Realm.io. CoreData killer?

CoreData killer

Site:

A mobile database that runs directly inside phones, tablets or wearables.
Realm lets you build apps faster, build apps that are faster,
and craft previously impossible experiences.

По моему мнению, совсем недавно запустился первый реальный претендент на звание “Core Data Killer”.
Он быстр, надежен, прост и свеж. У него понятный интерфейс, хорошо реализована мультипоточность. По заявлению разработчиков он демонстрирует “extraordinary performance”.

Движок основан не на SQLite, а использует собственный драйвер, который требует миннимум затрат по памяти.

Сделаем небольшие замеры.

Для тестов используются обьекты с одинаковым интерфейсом.

@interface CDPerson : NSManagedObject

@property (nonatomic, retain) NSString * firstName;
@property (nonatomic, retain) NSString * lastName;

@end
@interface RLMPerson : RLMObject

@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;

@end

Сделаем 100 000 инсертов.

CoreData:

2014-07-17 15:26:08.921 RealmvsCoreData[81988:1303] Start
2014-07-17 15:26:12.786 RealmvsCoreData[81988:1303] End

Realm:

2014-07-17 15:25:11.052 RealmvsCoreData[81938:1303] Start
2014-07-17 15:25:11.626 RealmvsCoreData[81938:1303] End

Как видно результат поразительный. Видимо это и называется “extraordinary perfromance”.

Из минусов пока обнаружил только неудобное отслеживание изменений RLMRealm обьекта. Блок не возвращает список обьектов, которые были изменены (как делает NSManagedObjectContextDidSaveNotification), а просто сообщает об изменении. То есть полноценного fetched results controller’а у нас нет. Зато есть мой самописный:)
https://github.com/Krivoblotsky/RealmDemo/tree/master/RealmDemo/RLMFetchedResultsController

Из плюшек еще:

  • встроенный маппинг. Обьект можно создавать из соответствующего NSDictionary.
    - (instancetype)initWithObject:(id)object;
  • встроенная сериализация. Вернется подготовленная json-строка для этого объекта.
    - (NSString *)JSONString;
  • браузер БД(!)
    Есть возможность просмотра содержимого базы данных через отедльное приложение.
  • Screen-Shot-2014-07-17-at-4.08.42-PM.png

    Конечно, это только первая публичная версия и еще есть над чем работать, но первый блин не был комом.

    Демо-проект:
    https://github.com/Krivoblotsky/RealmDemo

    Ссылки:

  • http://realm.io
  • https://github.com/realm
  • https://twitter.com/realm
  • Adios CoreData?

    Google+3LinkedIn1Twitter0Facebook0

    5 thoughts on “Realm.io. CoreData killer?

    1. Привет! Слушай, а с релейшенами разобрался? Я так понял, что концепции обратной связи (inverse relationship) тут нет, видимо был отдан за производительность.

      1. Да, обратной связи из коробки нет. При необходимости нужно реализовывать руками. Кроме того, при фетче не достаются связи, что-то вроде Faults в CoreData. И только при обращении этот “fault” превратиться в обьект. Тоже все ради производительности.

    Leave a Reply

    Your email address will not be published.

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>