NoSQL внутри SQL: приземленные вопросы практического...
-
Upload
ontico -
Category
Engineering
-
view
230 -
download
1
Transcript of NoSQL внутри SQL: приземленные вопросы практического...
nosql внутри sqlприземленные вопросыпрактического примененияДмитрий Долгов
Дмитрий Долгов, Mindojo github.com/erthalion@erthalion 9erthalion6 at gmail dot com
1
Данные
2
Данные
2
Данные
2
Данные нужно хранить всоответствующем формате:
: Отдельные хранилища,единый интерфейс
: Единое хранилище,разные форматы
3
Данные нужно хранить всоответствующем формате:
: Отдельные хранилища,единый интерфейс
: Единое хранилище,разные форматы
3
Данные нужно хранить всоответствующем формате:
: Отдельные хранилища,единый интерфейс
: Единое хранилище,разные форматы
3
Отдельные хранилища
: Конкретный формат обрабатываетсянаилучщим образом
: Производительность, дублирование: Вопросы интеграции компонентов
4
Отдельные хранилища: Конкретный формат обрабатываетсянаилучщим образом
: Производительность, дублирование: Вопросы интеграции компонентов
4
Отдельные хранилища: Конкретный формат обрабатываетсянаилучщим образом
: Производительность, дублирование
: Вопросы интеграции компонентов
4
Отдельные хранилища: Конкретный формат обрабатываетсянаилучщим образом
: Производительность, дублирование: Вопросы интеграции компонентов
4
Единое хранилище
: Не требует интеграции: Производительность, дублирование: Поддержка со стороны БД
5
Единое хранилище: Не требует интеграции
: Производительность, дублирование: Поддержка со стороны БД
5
Единое хранилище: Не требует интеграции: Производительность, дублирование
: Поддержка со стороны БД
5
Единое хранилище: Не требует интеграции: Производительность, дублирование: Поддержка со стороны БД
5
6
Кто?: Postgresql (hstore/json/jsonb): MySQL (json): Oracle: MSSql: db2
7
Легкий способ начать бегать поутрам использовать документы вреляционной базе
8
-- PG since 9.4select jsonb_build_object(
’id’, 1,’data’, ’aaa’
);-- MySQL since 5.7select json_object(
’id’, 1,’data’, ’aaa’
);9
-- PG since 9.4select jsonb_agg(query) from (
select id, datafrom jsonb_table
) query;-- MySQL since 8select json_objectagg(‘key‘, val)as ‘key_val‘ from t1;
10
-- PGcopy table_name(jsonb_column_name)from ’data.json’;-- MySQLload data infile ’data.json’into table table_name (json_column_name);
11
: Загрузка дампа из внешних источников: Некорректные данные с валидной структурой –json5
: Битые данные – ручное исправление, линтеры
12
производительность
Факторы
: Структура данных на диске: Сериализация данных: Поддержка индексов
14
Факторы: Структура данных на диске
: Сериализация данных: Поддержка индексов
14
Факторы: Структура данных на диске: Сериализация данных
: Поддержка индексов
14
Факторы: Структура данных на диске: Сериализация данных: Поддержка индексов
14
Bson
15
bson.dumps({”a”: 3, ”b”: u”xyz”})
16
Jsonb
17
select pg_relation_filepath(oid),relpages from pg_classwhere relname = ’table_name’;
pg_relation_filepath | relpages----------------------+----------base/40960/325477 | 0(1 row)
18
MySQL json
19
Сериализация данных
: MongoDB – дерево Document -> Elements: Postgresql – JsonbValue со списком элементов: MySQL – древовидная структура
20
Индексы
: MongoDB – индексы для полей: Postgresql – общий индекс, индексы для полей: MySQL – виртуальные колонки для индексирования
21
тестирование
23
YCSB 0.8, 106
Postgresql 9.5.4MongoDB 3.2.9MySQL 5.7.9AWS EC2 m4.xlarge16GB memory, 4 core 2.3GHz
24
Воспроизводимостьerthalion/YCSBerthalion/ansible-ycsb
25
Конфигурацияshared_bufferseffective_cache_sizeinnodb_buffer_pool_sizewrite concerntransaction_sync, method
26
Простая выборка по ключу с jsonb_path_opsиндексом
”Маленький документ”10 полейбез вложенности
27
28
29
Простая выборка по ключу с Btree индексом”Маленький документ”10 полейбез вложенности
30
31
32
Простая выборка по ключу с Btree индексом”Сложный документ”3 уровня вложенности/4 потомка
33
34
35
Срез по документу”Большой документ”100 полейИз документа выбирается одно поле
36
37
Срез по документу”Большой документ”100 полейИз документа выбирается 10 полей
38
39
40
41
Вставка документов”Маленький документ”10 полейбез вложенностиjournaled
42
43
Выборка 50%, обновление 50%”Маленький документ”10 полейбез вложенностиобновление одного поляtransaction_sync
44
45
46
Выборка 50%, обновление 50%”Маленький документ”10 полейбез вложенностиобновление одного поляjournaled
47
48
Выборка 50%, обновление 50%”Большой документ”100 полей удвоенной длиныобновление одного полябез вложенности
49
50
51
Вопросы?
52