realm para ios
Post on 17-Aug-2015
147 Views
Preview:
TRANSCRIPT
RealmErick Camacho @ecamacho
NSCoderMéxico15 julio 2015
CoreData es demasiado
grande / complejo
Realm es una opción más
sencilla
1. ¿Qué es?
• Es una base de datos para móviles: un reemplazo para CoreData y SQLite. El core está construido en C++ (TightDB)
• NO es un ORM, NO está basado en SQLite
• Es una base de datos relacional, no es NoSQL, no es un Key-Value store: columnas, filas, queries, índices.
• El desarrollo empezó en 2011, (en producción desde 2012), es público desde 2012
• Disponible para Objective-C, Java (Android) y Swift. Próximamente para .Net y JS
• El core hecho en C++ todavía no es opensource pero lo será
2. ¿Quién lo usa?
Groupon>100M usuarios
DubsmashiOS & Android
#1 app en >40 países>10M instalaciones en
Android
Wahoo#1 fitness app en >120
países
En Nubleer lo usamos desde hace 11 meses en producción
En 1 año• #1 -apps, Enterprise apps (Rite Aid, SAP, …), Bancos.. -
Corriendo en centenas de millones de dispositivos (la 2a base de datos con más instalaciones en el mundo)
3. ¿Cómo lo uso?
Demo Swift
Relaciones Swift
class Person: Object { dynamic var name = "" dynamic var picture = NSData() let dogs = List<Dog>()}
realm.write { let person = Person() person.name = "Tim" person.dogs.append(mydog)}
Migraciones Swift
setSchemaVersion(1, Realm.defaultPath, { migration, oldSchemaVersion in if oldSchemaVersion < 1 { // Nothing to do! // Realm will automatically detect new properties and removed properties // And will update the schema on disk automatically }})
Models Objective-C
@interface Dog : RLMObject@property NSString *name;@property NSInteger age;@end
Dog *mydog = [[Dog alloc] init];
mydog.name = @"Rex"; NSLog(@"Name of dog: %@", mydog.name);
Queries Objective-C
RLMResults *r = [Dog objectsWhere:@"age > 8"];
// Queries are chainabler = [r objectsWhere:@"name contains 'rex'"];
Relationships Objective-C
@interface Person : RLMObject@property NSString *name;@property NSData *picture;@property RLMArray<Dog> *dogs;@end
[realm transactionWithBlock:^{ RLMPerson *person = [[RLMPerson alloc] init]; person.name = @"Tim"; [person.dogs addObject:mydog];}];
Cifrado Swift
/ Generate a random encryption keylet key = NSMutableData(length: 64)!SecRandomCopyBytes(kSecRandomDefault, UInt(key.length), UnsafeMutablePointer<UInt8>(key.mutableBytes))
// Open the encrypted Realm filevar error: NSError?let realm = Realm(path: Realm.defaultPath, readOnly: false, encryptionKey: key, readOnly: false, error: &error)
Desempeño
4. ¿Por qué no usar Realm?
• SQLite es uno de los proyectos open source más probados en el mundo
• CoreData tiene un gran soporte en Xcode
• Soporte a valores nulos (se está trabajando en ello)
• Pasar objetos entre threads (se está trabajando en ello)
• Key-Value Observing, soporte a RXSwift y ReactiveCocoa (se está trabajando en ello)
• Datos poco estructurados, un schema-less store es mejor (Couchbase, NanoStore, Firebase)
Q&A
top related