43
MySQL 5.7 - NoSQL Возможности NoSQL, JSON, PluginX Петр Зайцев CEO, Percona 8 November 2016

MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

MySQL 5.7 - NoSQL ВозможностиNoSQL, JSON, PluginX

Петр ЗайцевCEO, Percona

8 November 2016

Page 2: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

2

О презентации

КраткооNoSQL

ИсторияNoSQLвMySQL

НовыевозможностиMySQL5.7

Page 3: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

Кратко о NoSQL

Page 4: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

4

Определение NoSQL обычно состоит из

•НереляционнаяМодельДанных

•НеSQLЯзыкДоступа

Page 5: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

5

NoSQL Модели Данных

Key-Value DocumentStores

Wide-ColumnStores

Graph Multi-Model

Page 6: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

6

Другая расшифровка NoSQL

Page 7: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

7

Преимущества NoSQL

СкоростьРазработки

Простота

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

Масштабируемость

Болееудобнаямодельдлярядаприложений

Page 8: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

NoSQL в MySQL

Page 9: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

9

Фокус в MySQL

Гибкаясхема

CRUDдоступ

Page 10: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

10

Пример JSON Документа

Page 11: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

11

CRUD

CREATE– Создаватьдокумент

READ– Читатьдокумент

UPDATE– Изменятьдокумент

DELETE– Удалятьдокумент

Page 12: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

12

SQL vs CRUD - Insert

• SQL • CRUD

Page 13: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

13

SQL vs CRUD - Search

Page 14: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

14

NoSQL протокол доступа в MySQL

• ДоступчерезстандартныйпротоколMySQLHANDLERКоманда

• СвойNoSQL протоколMySQLCluster(NDB)2004

• ПоддержкаMemcacheD протоколавMySQL(Community)MyCacheD2009

• СвойNoSQLпротоколHandlerSocket2010

• Для Innodb andNDBОфициальнаяподдержкаMemcacheD протокола 2011

• НовыйпротоколподдерживающийSQLиCRUDProtocolX2016

Page 15: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

15

История поддержки NoSQL Модели Данных

ХранимСериализованные объектыв BLOB/TEXT

ПоддержкаXpath в MySQL(2005)

Динамическиеколонкив MariaDB (2012)

JSONUDF функцииСветыСмирновой (2013)

ПоддержкатипаданныхJSONMySQL5.7(2015)

Page 16: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

Тип JSON в MySQL 5.7

Page 17: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

17

Архитектурные основы поддержки JSON

Нативный JSONтипданных

Поддержкаиндексовнеоснованныхнаколонке

ПоддержкадоступакполямвсинтаксисеSQL

Page 18: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

18

Нативный JSON тип

Бинарныйформатхранения

Парсинг ивалидация толькопривставке

Индексдлябыстрогодоступакполямиэлементаммассивов

Поддержкарезервацииместаиобновлениянаместе (Вбудущем)

Page 19: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

19

Поддержка Типов

ВсестандартныеJSONтипы

•Номера•Строки•БулевскийТип•Вложенныедокументы•Массивы

Расширеннаяподдержкатипов

•Дата•Время•DateTime

Page 20: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

20

Поддержка вычислимых колонок

• sidecDOUBLEAS(SQRT(sidea*sidea+sideb*sideb))

Значениеколонкивычисляетсянабазе

другихколонок

• Вычисляетсяпридоступеилихранитсякопиявычисленногозначения

Можембыть VIRTUALили STORED

• КакSTOREDтакиVIRTUALМожноиндексировать

Page 21: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

21

Вычислимые колонки

CREATE TABLE `ontime` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`YearD` year(4) NOT NULL,

`FlightDate` datetime DEFAULT NULL,

`Carrier` char(2) DEFAULT NULL,

`OriginAirportID` int(11) DEFAULT NULL,

`OriginCityName` varchar(100) DEFAULT NULL,

`OriginState` char(2) DEFAULT NULL,

`DestAirportID` int(11) DEFAULT NULL,

`DestCityName` varchar(100) DEFAULT NULL,

`DestState` char(2) DEFAULT NULL,

...

`Flight_dayofweek` tinyint(4)

GENERATED ALWAYS AS (dayofweek(FlightDate)) VIRTUAL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB;

alter table ontime add key (Flight_dayofweek);

https://www.percona.com/blog/2015/04/29/generated-virtual-columns-in-mysql-5-7-labs/

https://dev.mysql.com/worklog/task/?id=8114

Нехранимколонкуноиндексируем

SELECT Flight_dayofweek, count(*) FROM ontime_sm_virtualGROUP BY Flight_dayofweek

Page 22: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

22

mysql> EXPLAIN SELECT carrier, count(*)

FROM ontime_sm_virtual

WHERE Flight_dayofweek = 7 group by carrier\G

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: ontime_sm_virtual

partitions: NULL

type: ref

possible_keys: Flight_dayofweek

key: Flight_dayofweek

key_len: 2

ref: const

rows: 165409

filtered: 100.00

Extra: Using where; Using temporary; Using filesort

1 row in set, 1 warning (0.00 sec)

Используетсяиндекс

Вычислимые колонки

Page 23: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

23

Нужен удобный SQL синтаксис

• Использование JSON функция для доступа к полу очень неудобно

Page 24: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

24

Пример использования типа JSONmysql> create table json_test (

id int primary key auto_increment,

data json

) engine=InnoDB;

Query OK, 0 rows affected (0.02 sec)

mysql> select * from json_test where data->'$.type' = 'Point' limit 1;

+----+-------------------------------------------------------------+

| id | data |

+----+-------------------------------------------------------------+

| 1 | {"type": "Point", "coordinates": [-87.9101245, 41.7585879]} |

+----+-------------------------------------------------------------+

ТожесамоекакJSON_EXTRACT(data,"$.type”)

Page 25: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

www.percona.com

Поддержка Индексов для JSON mysql> explain select * from json_test where data->'$.type' = 'Point' limit 1\G*************************** 1. row ***************************

id: 1select_type: SIMPLE

table: json_testpartitions: NULL

type: ALLpossible_keys: NULL

key: NULLkey_len: NULL

ref: NULLrows: 996823

filtered: 100.00Extra: Using where

mysql> alter table json_testadd data_type varchar(255) GENERATED ALWAYS AS (data->'$.type') VIRTUAL;Query OK, 0 rows affected (0.00 sec)Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table json_test add key (data_type);Query OK, 0 rows affected (2.51 sec)Records: 0 Duplicates: 0 Warnings: 0

Page 26: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

www.percona.com

Поддержка индексов для JSONmysql> explain select * from json_test where data->'$.type' = 'Point' limit 1\G*************************** 1. row ***************************

id: 1select_type: SIMPLE

table: json_testpartitions: NULL

type: refpossible_keys: data_type

key: data_typekey_len: 258

ref: constrows: 1

filtered: 100.00Extra: NULL

Page 27: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

Новый протокол доступа (Protocol X)

Page 28: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

28

А хотелось бы не использовать SQL Вообще

ProtocolXдобавленвMySQL5.7

МножествоулучшенийпомимоNoSQL

ПоддержкаSQLиCRUDодновременно

НовыйCLIклиент– MySQLShell

Page 29: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

29

Инсталлируем MySQL Shell

… • apt-get install mysql-apt-config• apt-get install mysql-shell• mysqlsh -u root -h localhost -p --classic --dba enableXProtocol

• mysqlsh -u root --sql --recreate-schema world_x < /tmp/world_x-db/world_x.sql

https://dev.mysql.com/doc/refman/5.7/en/document-store-setting-up.html

Page 30: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

30

Используем MySQL Shell

mysql-js> db = session.getSchema('world_x')<Schema:world_x>

mysql-js> db.getCollections(){

"CountryInfo": <Collection:CountryInfo>}

Page 31: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

31

.Find()

Page 32: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

32

.Modify()

Page 33: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

33

А как же это все работает внутри ?

• Каждая коллекция представляет собой таблицу• Бонус: Работает с разными Storage Engines

Page 34: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

34

Выполняем запрос

Page 35: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

35

Если посмотреть в MySQL General Log

• Видим:§ 2016-05-17T21:02:21.213899Z 186 Query SELECT doc FROM `world_x`.`CountryInfo` WHERE (JSON_EXTRACT(doc,'$.Name') = 'United States') LIMIT 1

• MySQL конвертирует CRUD в SQL на низком уровне

Page 36: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

36

Создаем Индекс

Page 37: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

37

Достоинства и недостатки такого дизайна

Плюсы

• Новыйинтерфейсдляразработчиковноадминистраторамбазданныхненужноучитьновыйязык

• Всесуществующиеинструментыработают

Минусы

• Сконвертированныезапросытяжелопонимать

• Сложнопонятьизкакогоместавприложениитакиезапросыприходят

Page 38: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

38

Так же стоит иметь в виду

• Поддержка возможностей обеспечения консистентности данных § Транзакции§ Режимы изоляции§ Точки сохранения (Savepoints)

• Можно использовать CRUD и SQL в одной транзакции• Можно использовать разные Storage Engines• Инструментация с Performance Schema• Поддержка MySQL Replication и Percona XtraDB Cluster

Page 39: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

39

Поддержка в языках программирования

•C/C++•Java•Node.JS•Python•.NET

Тольконекоторыеязыкиподдерживаются

наданныймомент

https://dev.mysql.com/doc/index-connectors.html

Page 40: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

40

Подведем итоги

MySQLпозволяетиспользоватьCRUDиSQLинтерфейсдоступакданным

МожнохранитьреляционныеиJSON данныеводномтранзакционномхранилище

Новоев MySQL5.7– ведетсяактивнаяразработка

Нерешаетпроблем“ScaleOut”какряддругих NoSQLрешений

Page 41: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

41

Percona Live: Call for Papers Deadline - November 13

PerconaLiveSantaClaratotakeplaceApril24-27inSantaClara,CA.

Submission Guidelines:http://bit.ly/2exss8u

Submission Form: http://bit.ly/2e01oT2

Page 42: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

42

Page 43: MySQL 5.7 - NoSQL Возможности - Percona · Петр Зайцев CEO, Percona 8 November 2016. 2 О презентации ... Document Stores Wide-Column Stores Graph

Thank You!