SlideShare una empresa de Scribd logo
Realm
Erick Camacho @ecamacho
NSCoderMéxico
15 julio 2015
Realm para iOS
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
Dubsmash
iOS & 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 chainable
r = [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 key
let key = NSMutableData(length: 64)!
SecRandomCopyBytes(kSecRandomDefault, UInt(key.length),
UnsafeMutablePointer<UInt8>(key.mutableBytes))
// Open the encrypted Realm file
var error: NSError?
let realm = Realm(path: Realm.defaultPath,
readOnly: false, encryptionKey: key, readOnly: false, error: &error)
Desempeño
Realm para iOS
Realm para iOS
Realm para iOS
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

Más contenido relacionado

PDF
Simplify your Life with Message Extensions in iOS 10
PPTX
KEY
Ios.s9
PDF
Presentación taller aplicaciones
PDF
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
PDF
Bases de datos locales y remotas con xamarin
PDF
Introducción a NoSQL - RubyFunDay 2013
PDF
Core Data en Mac OS X
Simplify your Life with Message Extensions in iOS 10
Ios.s9
Presentación taller aplicaciones
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Bases de datos locales y remotas con xamarin
Introducción a NoSQL - RubyFunDay 2013
Core Data en Mac OS X

Similar a Realm para iOS (20)

PPTX
Introducción a NoSQL
PDF
No-SQL Databases
DOCX
Bddmoviles
PPT
iOS dev group - Introduccion core data
PPTX
Persistencia de Datos en iOS: ¿Qué es Core Data?
PPT
PDF
Accediendo a una base de datos de MySQL con Entity Framework Core desde ASP ....
PPT
Big table por Matias tesoriero
PPTX
NoSQL: la siguiente generación de Base de Datos
PDF
PPTX
MANUFACTURAS AGROPECUARIAS EN TIEMPOS DE COVID .pptx
KEY
Aplicaciones web altamente escalables con Redis
PPTX
Video_MartinFowler.pptx
PPTX
Video_MartinFowler.pptx
PDF
NoSql introducción -Innova4j
PPT
SGDB móviles - Relacional y/o No Relacional
PPTX
Apache cassandra
KEY
Redis, base de datos NoSQL clave-valor
Introducción a NoSQL
No-SQL Databases
Bddmoviles
iOS dev group - Introduccion core data
Persistencia de Datos en iOS: ¿Qué es Core Data?
Accediendo a una base de datos de MySQL con Entity Framework Core desde ASP ....
Big table por Matias tesoriero
NoSQL: la siguiente generación de Base de Datos
MANUFACTURAS AGROPECUARIAS EN TIEMPOS DE COVID .pptx
Aplicaciones web altamente escalables con Redis
Video_MartinFowler.pptx
Video_MartinFowler.pptx
NoSql introducción -Innova4j
SGDB móviles - Relacional y/o No Relacional
Apache cassandra
Redis, base de datos NoSQL clave-valor
Publicidad

Más de Erick Camacho (11)

PDF
Modelos de Concurrencia
PDF
Desarrollo de apps para AppleWatch con Watchkit
PDF
Integrando Swift y Objective-C
PDF
Porque debes de renunciar a tu empleo y desarrollar para iOS
PDF
CocoaHeads México: Introducción a CocoaTouch:UIKit
PDF
Lo que no te han contado sobre el desarrollo para iPhone/iPad
PDF
Ecosistemas software para Flex
PDF
Mejorando el País mediante Código
PDF
Introducción a NoSQL con MongoDB
KEY
Spring BlazeDS Integration + Flex 4
PPT
Hands on Spring 2.5
Modelos de Concurrencia
Desarrollo de apps para AppleWatch con Watchkit
Integrando Swift y Objective-C
Porque debes de renunciar a tu empleo y desarrollar para iOS
CocoaHeads México: Introducción a CocoaTouch:UIKit
Lo que no te han contado sobre el desarrollo para iPhone/iPad
Ecosistemas software para Flex
Mejorando el País mediante Código
Introducción a NoSQL con MongoDB
Spring BlazeDS Integration + Flex 4
Hands on Spring 2.5
Publicidad

Último (20)

DOCX
Guía 5. Test de orientación Vocacional 2.docx
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PPTX
modulo seguimiento 1 para iniciantes del
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PPT
Protocolos de seguridad y mecanismos encriptación
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PPTX
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
PPTX
ccna: redes de nat ipv4 stharlling cande
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PPTX
El uso de las TIC en la vida cotidiana..
PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
DOCX
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
Guía 5. Test de orientación Vocacional 2.docx
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
modulo seguimiento 1 para iniciantes del
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
Protocolos de seguridad y mecanismos encriptación
Power Point Nicolás Carrasco (disertación Roblox).pptx
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
Sesion 1 de microsoft power point - Clase 1
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
ccna: redes de nat ipv4 stharlling cande
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
informe_fichas1y2_corregido.docx (2) (1).pdf
El uso de las TIC en la vida cotidiana..
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
Trabajo grupal.docxjsjsjsksjsjsskksjsjsjsj
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
la-historia-de-la-medicina Edna Silva.pptx
historia_web de la creacion de un navegador_presentacion.pptx

Realm para iOS

  • 4. Realm es una opción más sencilla
  • 6. • 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.
  • 7. • 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á
  • 10. Dubsmash iOS & Android #1 app en >40 países >10M instalaciones en Android
  • 11. Wahoo #1 fitness app en >120 países
  • 12. En Nubleer lo usamos desde hace 11 meses en producción
  • 13. 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)
  • 16. 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) }
  • 17. 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 } })
  • 18. 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);
  • 19. Queries Objective-C RLMResults *r = [Dog objectsWhere:@"age > 8"]; // Queries are chainable r = [r objectsWhere:@"name contains 'rex'"];
  • 20. 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]; }];
  • 21. Cifrado Swift / Generate a random encryption key let key = NSMutableData(length: 64)! SecRandomCopyBytes(kSecRandomDefault, UInt(key.length), UnsafeMutablePointer<UInt8>(key.mutableBytes)) // Open the encrypted Realm file var error: NSError? let realm = Realm(path: Realm.defaultPath, readOnly: false, encryptionKey: key, readOnly: false, error: &error)
  • 26. 4. ¿Por qué no usar Realm?
  • 27. • 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)
  • 28. Q&A