66
nosql внутри sql приземленные вопросы практического применения Дмитрий Долгов

NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий Долгов (Mindojo)

  • Upload
    ontico

  • View
    215

  • Download
    1

Embed Size (px)

Citation preview

Page 1: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

nosql внутри sqlприземленные вопросыпрактического примененияДмитрий Долгов

Page 2: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Дмитрий Долгов, Mindojo github.com/erthalion@erthalion 9erthalion6 at gmail dot com

1

Page 3: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Данные

2

Page 4: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Данные

2

Page 5: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Данные

2

Page 6: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Данные нужно хранить всоответствующем формате:

: Отдельные хранилища,единый интерфейс

: Единое хранилище,разные форматы

3

Page 7: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Данные нужно хранить всоответствующем формате:

: Отдельные хранилища,единый интерфейс

: Единое хранилище,разные форматы

3

Page 8: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Данные нужно хранить всоответствующем формате:

: Отдельные хранилища,единый интерфейс

: Единое хранилище,разные форматы

3

Page 9: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Отдельные хранилища

: Конкретный формат обрабатываетсянаилучщим образом

: Производительность, дублирование: Вопросы интеграции компонентов

4

Page 10: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Отдельные хранилища: Конкретный формат обрабатываетсянаилучщим образом

: Производительность, дублирование: Вопросы интеграции компонентов

4

Page 11: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Отдельные хранилища: Конкретный формат обрабатываетсянаилучщим образом

: Производительность, дублирование

: Вопросы интеграции компонентов

4

Page 12: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Отдельные хранилища: Конкретный формат обрабатываетсянаилучщим образом

: Производительность, дублирование: Вопросы интеграции компонентов

4

Page 13: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Единое хранилище

: Не требует интеграции: Производительность, дублирование: Поддержка со стороны БД

5

Page 14: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Единое хранилище: Не требует интеграции

: Производительность, дублирование: Поддержка со стороны БД

5

Page 15: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Единое хранилище: Не требует интеграции: Производительность, дублирование

: Поддержка со стороны БД

5

Page 16: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Единое хранилище: Не требует интеграции: Производительность, дублирование: Поддержка со стороны БД

5

Page 17: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

6

Page 18: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Кто?: Postgresql (hstore/json/jsonb): MySQL (json): Oracle: MSSql: db2

7

Page 19: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Легкий способ начать бегать поутрам использовать документы вреляционной базе

8

Page 20: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

-- PG since 9.4select jsonb_build_object(

’id’, 1,’data’, ’aaa’

);-- MySQL since 5.7select json_object(

’id’, 1,’data’, ’aaa’

);9

Page 21: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

-- 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

Page 22: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

-- PGcopy table_name(jsonb_column_name)from ’data.json’;-- MySQLload data infile ’data.json’into table table_name (json_column_name);

11

Page 23: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

: Загрузка дампа из внешних источников: Некорректные данные с валидной структурой –json5

: Битые данные – ручное исправление, линтеры

12

Page 24: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

производительность

Page 25: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Факторы

: Структура данных на диске: Сериализация данных: Поддержка индексов

14

Page 26: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Факторы: Структура данных на диске

: Сериализация данных: Поддержка индексов

14

Page 27: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Факторы: Структура данных на диске: Сериализация данных

: Поддержка индексов

14

Page 28: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Факторы: Структура данных на диске: Сериализация данных: Поддержка индексов

14

Page 29: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Bson

15

Page 30: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

bson.dumps({”a”: 3, ”b”: u”xyz”})

16

Page 31: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Jsonb

17

Page 32: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

select pg_relation_filepath(oid),relpages from pg_classwhere relname = ’table_name’;

pg_relation_filepath | relpages----------------------+----------base/40960/325477 | 0(1 row)

18

Page 33: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

MySQL json

19

Page 34: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Сериализация данных

: MongoDB – дерево Document -> Elements: Postgresql – JsonbValue со списком элементов: MySQL – древовидная структура

20

Page 35: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Индексы

: MongoDB – индексы для полей: Postgresql – общий индекс, индексы для полей: MySQL – виртуальные колонки для индексирования

21

Page 36: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

тестирование

Page 37: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

23

Page 38: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

YCSB 0.8, 106

Postgresql 9.5.4MongoDB 3.2.9MySQL 5.7.9AWS EC2 m4.xlarge16GB memory, 4 core 2.3GHz

24

Page 39: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Воспроизводимостьerthalion/YCSBerthalion/ansible-ycsb

25

Page 40: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Конфигурацияshared_bufferseffective_cache_sizeinnodb_buffer_pool_sizewrite concerntransaction_sync, method

26

Page 41: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Простая выборка по ключу с jsonb_path_opsиндексом

”Маленький документ”10 полейбез вложенности

27

Page 42: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

28

Page 43: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

29

Page 44: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Простая выборка по ключу с Btree индексом”Маленький документ”10 полейбез вложенности

30

Page 45: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

31

Page 46: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

32

Page 47: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Простая выборка по ключу с Btree индексом”Сложный документ”3 уровня вложенности/4 потомка

33

Page 48: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

34

Page 49: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

35

Page 50: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Срез по документу”Большой документ”100 полейИз документа выбирается одно поле

36

Page 51: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

37

Page 52: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Срез по документу”Большой документ”100 полейИз документа выбирается 10 полей

38

Page 53: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

39

Page 54: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

40

Page 55: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

41

Page 56: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Вставка документов”Маленький документ”10 полейбез вложенностиjournaled

42

Page 57: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

43

Page 58: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Выборка 50%, обновление 50%”Маленький документ”10 полейбез вложенностиобновление одного поляtransaction_sync

44

Page 59: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

45

Page 60: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

46

Page 61: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Выборка 50%, обновление 50%”Маленький документ”10 полейбез вложенностиобновление одного поляjournaled

47

Page 62: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

48

Page 63: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Выборка 50%, обновление 50%”Большой документ”100 полей удвоенной длиныобновление одного полябез вложенности

49

Page 64: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

50

Page 65: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

51

Page 66: NoSQL внутри SQL: приземленные вопросы практического применения /  Дмитрий Долгов (Mindojo)

Вопросы?

52