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

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

Feb 16, 2017

Download

Engineering

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: 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 файла <= выделенной памяти

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