Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Дмитрий Долгов (Zalando), NoSQL внутри SQL: так...

CodeFest
January 31, 2018

Дмитрий Долгов (Zalando), NoSQL внутри SQL: тактика и стратегия, CodeFest 2017

https://2017.codefest.ru/lecture/1174

Чтобы добиться от системы максимальной производительности, необходимо учитывать структуру данных, с которыми вы работаете. Проблемы возникают, если данные очень неоднородные, и один из способов решения этих проблем - использовать возможности современных реляционных БД для хранения данных в документо-ориентированной форме.

Этот подход имеет свои плюсы и минусы, которые будут обсуждаться в докладе на примерах PostgreSQL/MySQL/MariaDB etc.

Основные вопросы:
● как не потеряться в новых возможностях, способы безболезненного переноса данных в такой формат и как с ними работать.
● производительность тех или иных решений и подходов - чего необходимо избегать, а чего бояться не стоит, бенчмарки для разных конфигураций и видов нагрузки.

CodeFest

January 31, 2018
Tweet

More Decks by CodeFest

Other Decks in Technology

Transcript

  1. Данные бывают разные Стандарт SQL/JSON Как перестать волноваться и начать

    использовать документы Важные факторы, влияющие на производительность 1
  2. Данные бывают разные Стандарт SQL/JSON Как перестать волноваться и начать

    использовать документы Важные факторы, влияющие на производительность Бенчмарки 1
  3. Данные бывают разные Стандарт SQL/JSON Как перестать волноваться и начать

    использовать документы Важные факторы, влияющие на производительность Бенчмарки * Поиск и чтение документов 1
  4. Данные бывают разные Стандарт SQL/JSON Как перестать волноваться и начать

    использовать документы Важные факторы, влияющие на производительность Бенчмарки * Поиск и чтение документов * Вставка документов 1
  5. Данные бывают разные Стандарт SQL/JSON Как перестать волноваться и начать

    использовать документы Важные факторы, влияющие на производительность Бенчмарки * Поиск и чтение документов * Вставка документов * Обновление документов 1
  6. 6

  7. . . SQL/JSON . JSON item . . scalar .

    . text . numeric . boolean . datetime . null . object . array . JSON sequence . 9
  8. . . Functions . Retrieval . . Exract value .

    Exract json . Path existence . Convert to relation . JSON cor- rectness . Construction . . Create an object . Create an array . Create from relation 10
  9. 13

  10. -- PG since 9.4 select jsonb_build_object( ’id’, 1, ’data’, ’aaa’

    ); -- MySQL since 5.7 select json_object( ’id’, 1, ’data’, ’aaa’ ); 14
  11. -- PG since 9.4 select jsonb_agg(query) from ( select id,

    data from jsonb_table ) query; -- MySQL since 8 select json_objectagg(‘key‘, val) as ‘key_val‘ from t1; 15
  12. -- PG copy table_name(jsonb_column_name) from ’data.json’; -- MySQL load data

    infile ’data.json’ into table table_name (json_column_name); 16
  13. select pg_relation_filepath(oid), relpages from pg_class where relname = ’table_name’; pg_relation_filepath

    | relpages ----------------------+---------- base/40960/325477 | 0 (1 row) 23
  14. Сериализация данных MongoDB – дерево Document -> Elements Postgresql –

    JsonbValue со списком элементов MySQL – класс Value 25
  15. Индексы MongoDB – индексы для полей Postgresql – общий индекс,

    индексы для полей MySQL – виртуальные колонки для индексирования 26
  16. 28

  17. AWS EC2 m4.xlarge instance separate instance (database and generator) 16GB

    memory, 4 core 2.3GHz Ubuntu 14.04 Same VPC and placement group AMI that supports HVM virtualization type at least 4 rounds of benchmark 31
  18. Виды документов “простой” документ 10 ключей и значений (100 символов)

    “большой” документ 100 ключей и значений (200 символов) “сложный” документ 100 ключей, 3 уровня вложенности (100 символов) 33
  19. 35

  20. 36

  21. 38

  22. 40

  23. 41

  24. 43

  25. 45

  26. 47

  27. 48

  28. 50

  29. 52

  30. 54

  31. 55

  32. 57

  33. 58

  34. 60

  35. 62

  36. 63

  37. Документов в RDBMS можно не бояться Приведенные бенчмарки - ”подсказки”

    Необходимы свои тесты для нагрузки Где кластер? 64
  38. вопросы?  github.com/erthalion  @erthalion  9erthalion6 at gmail dot

    com Дмитрий Долгов Senior Software Engineer Zalando 65