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

Realm para iOS

Aug 17, 2015

Download

Technology

Erick Camacho
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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