28
Realm Erick Camacho @ecamacho NSCoderMéxico 15 julio 2015

Realm para iOS

Embed Size (px)

Citation preview

Page 1: Realm para iOS

RealmErick Camacho @ecamacho

NSCoderMéxico15 julio 2015

Page 2: Realm para iOS
Page 3: Realm para iOS

CoreData es demasiado

grande / complejo

Page 4: Realm para iOS

Realm es una opción más

sencilla

Page 5: Realm para iOS

1. ¿Qué es?

Page 6: Realm para iOS

• 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.

Page 7: Realm para iOS

• 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á

Page 8: Realm para iOS

2. ¿Quién lo usa?

Page 9: Realm para iOS

Groupon>100M usuarios

Page 10: Realm para iOS

DubsmashiOS & Android

#1 app en >40 países>10M instalaciones en

Android

Page 11: Realm para iOS

Wahoo#1 fitness app en >120

países

Page 12: Realm para iOS

En Nubleer lo usamos desde hace 11 meses en producción

Page 13: Realm para iOS

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)

Page 14: Realm para iOS

3. ¿Cómo lo uso?

Page 15: Realm para iOS

Demo Swift

Page 16: Realm para iOS

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)}

Page 17: Realm para iOS

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 }})

Page 18: Realm para iOS

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);

Page 19: Realm para iOS

Queries Objective-C

RLMResults *r = [Dog objectsWhere:@"age > 8"];

// Queries are chainabler = [r objectsWhere:@"name contains 'rex'"];

Page 20: Realm para iOS

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];}];

Page 21: Realm para iOS

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)

Page 22: Realm para iOS

Desempeño

Page 23: Realm para iOS
Page 24: Realm para iOS
Page 25: Realm para iOS
Page 26: Realm para iOS

4. ¿Por qué no usar Realm?

Page 27: Realm para iOS

• 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)

Page 28: Realm para iOS

Q&A