Realm — замена для SQtite и Core Data, на которую последние годы полагается все больше и больше разработчиков. Ссылка на Github. Там же вы найдете документацию к нему.
Realm: Скорость, простота, кросс-платформенность
Это не ORM, каким является SQLite. Realm использует свой движок, простой и быстрый. Многие, испытавшие Realm говорят, что начать с ним работу можно в течении пары минут и перейти в своем приложении на него в течении пары часов. И это экономит несколько недель!
Благодаря своей конструкции нулевого копирования, Realm гораздо быстрее, чем ORM, и зачастую быстрее, чем SQLite.
Имеется поддержка OSX, iOS и Android. Вы можете не менять логику на разных платформах и использовать одни и те же модели на Java, Swift и Objective-C.
Realm поддерживает расширенные функции, такие как шифрование, graph-запросы и легкую миграцию. Он уже активно используется в приложениях банков, медицинских центров, предприятий, и даже Starbucks!
Объекты Realm выглядят так же как и обычные объекты:
1 2 3 4 5 6 7 8 9 | class Dog: Object { dynamic var name = "" dynamic var age = 0 } let mydog = Dog() mydog.name = "Rex" print("name of dog: \(mydog.name)") |
Простая запись в хранилище:
1 2 3 4 5 | let realm = try! Realm() try! realm.write { realm.add(mydog) } |
Легко запрашивается:
1 2 3 4 5 | let realm = try! Realm() let r = realm.objects(Dog).filter("age > 8") // Queries are chainable let r2 = r.filter("name contains 'rex'") |
Объекты просто связываются:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Person: Object { dynamic var name = "" // optionals are supported dynamic var picture: NSData? = nil let dogs = List<Dog>() } try! realm.write { let person = Person() person.name = "Tim" person.dogs.append(mydog) realm.add(person) } |
Прост в многопоточном использовании:
1 2 3 4 5 6 7 8 9 | dispatch_async(dispatch_queue_create("background", nil)) { // All Realm instances are thread-confined, // but can be easily fetched from any thread let realm = try! Realm() let results = realm.objects(Dog).filter("name contains 'rex'") // You can also write to a Realm from any thread // with full ACID guarantees } |
Если вы еще не начали использовать этим замечательным инструментом, то спешите, так как это действительно мощный инструмент и достойная замена привычным базам данных!
А если я хочу использовать, например, какие-то сложные запросы типа inner join (ов) это прокатит в Realm?