37
Мобильная база данных Realm Прошло ли время SQLite? Стачка , 2016 Чебулаев Олег, Perpetuum Mobile Lab

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

  • Upload
    -

  • View
    730

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

NSUserDefaults?

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

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

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

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

кодом

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

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

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

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

READ

ID NAME NOTES

1 Alex c++ developer

2 Jim java developer

3 Bill php developer

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

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

UPD

ID NAME NOTES

1 Alex c++ developer

2 Jim ios developer

3 Bill php developer

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

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

DEL

ID NAME NOTES

1 Alex c++ developer

2 Jim java developer

3 Bill php developer

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

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

READ

ID NAME NOTES

1 Alex c++ developer

2 Jim ios developer

3 Bill php developer

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

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

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

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

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

Copy on write

B C

A

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

Copy on write

B C

A

B’

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

Copy on write

B C

A

B’A’

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

Copy on write

B C

A

B’A’

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

Copy on write

B C

A

B’A’

V1

V2

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

Copy on write

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

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

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

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

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

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

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

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

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

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

Page 26: Moбильная база данных Realm. Прошло ли время SQLite?
Page 27: Moбильная база данных Realm. Прошло ли время SQLite?
Page 28: Moбильная база данных Realm. Прошло ли время SQLite?
Page 29: Moбильная база данных Realm. Прошло ли время SQLite?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Миграции

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

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

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

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