Moбильная база данных Realm. Прошло ли время SQLite?

Post on 16-Feb-2017

728 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

Transcript

Мобильная база данных Realm Прошло ли время SQLite?

Стачка, 2016Чебулаев Олег, Perpetuum Mobile Lab

План● Проблема хранения данных● Что такое Realm● Realm изнутри● Производительность● Практика использования

Идеальное решение● быстрое● безопасное● удобное● умное● обеспечивает консистентность

данных● бесплатное● кроссплатформенное

Способы хранения данных

Файлы, JSON, сериализация● Потокобезопастность● Производительность● Мапинг вручную● Запросы вручную● Не гарантируют

консистентность● No Smart

Pure SQLite● Сложность эффективного

использования● Мапинг и извлечение данных● Управление миграциями● Многопоточный доступ

Но зато, БЫСТРО

Core Data● Большой порог вхождения, для

новичков● Много шаблонного кода● Хитрая передача данных между

потоками● Непрозрачные операции● iOS only● Производительность

NSUserDefaults?

Что такое Realm?● быстрая, встраиваемая бд, zero-copy● объектно ориентированная, NoORM,

NoSQL, ● ACID транзакции● кросс-платформенный формат файла,

ядро на с++● биндинги на obj-c, swift, java, react native ● бесплатная и с открытым исходным

кодом

Конкурентный доступ

Конкурентный доступ: state 1

READ

ID NAME NOTES

1 Alex c++ developer

2 Jim java developer

3 Bill php developer

Конкурентный доступ: state 2

UPD

ID NAME NOTES

1 Alex c++ developer

2 Jim ios developer

3 Bill php developer

Конкурентный доступ: state 1

DEL

ID NAME NOTES

1 Alex c++ developer

2 Jim java developer

3 Bill php developer

Конкурентный доступ: state 3

READ

ID NAME NOTES

1 Alex c++ developer

2 Jim ios developer

3 Bill php developer

MVCC● Multi Version Concurrency Control● Одновременный доступ с разных

потоков● Каждая транзакция имеет свой

слепок базы данных● Изоляция изменений● Минимальные накладные расходы

Copy on write

B C

A

Copy on write

B C

A

B’

Copy on write

B C

A

B’A’

Copy on write

B C

A

B’A’

Copy on write

B C

A

B’A’

V1

V2

Copy on write

MVCC● Запись выполняется только

дописыванием● Обеспечивает доступ из разных

потоков● Запись не блокирует чтение● Безопасность исходных данных● Производительность

Ссылки● Realm это огромное b+ дерево● Получить объекты по связи To-One или To-

many это дешевые операции● Связи это просто указатели● Дешевая навигация по объектам

Оптимизации и безопасность● Оптимизация хранение строк● Оптимизация хранение

целочисленных типов● Crash безопасность● Lazy loading● Zero-copy

Тесты Core Data VS Realm 0.98.6Вставка записей/секундуCore Data: 528Realm: 1626Подсчет количества объектов запросов/секундуCore Data: 6624Realm: 91549Количество итераций/секундуCore Data: 29Realm: 30

Практика использования

Запросы● Все базовые операторы, вложенные запросы● Поддержка операций с коллекциями @min, @max,

@sum, @count, @avg● Операторы работы с массивами и множествами● Подзапросы по связям

JSONMantle-like мапинг через Realm-JSON

Работа в потоках● RLMObject и RLMRealm не

потокобезопасны● Решение: вместо объекта

передавать идентификатор

Уведомления● RLMRealm, RLMResults, свойстава

RLMObject поддерживают KVO● уведомления через методы Realm● Realm дружит и с Reactive Cocoa!

Миграции

Ограничения● Асинхронная запись● Каскадное удаление● Перегрузка сеттеров/геттеров● Поддержка полиморфизма● Fine-grained уведомления (обещают очень

скоро)● 16 мб на NSString и NSData● NSDate округляется до 1 секунды● Объем Realm файла <= выделенной памяти

для приложения

top related