MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

53
1 / 53

Transcript of MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Page 1: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

1 / 53

Page 2: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

MySQL 5.7 & JSON

Nouvelles Oportunités pour les Dévelopeurs

 

Septembre 2016

 

Frédéric Descamps

MySQL Community Manager

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

2 / 53

Page 3: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

 

Safe Harbor StatementThe following is intended to outline our general product direction. It is intended forinformation purpose only, and may not be incorporated into any contract. It is not acommitment to deliver any material, code, or functionality, and should not be relied up inmaking purchasing decisions. The development, release and timing of any features orfunctionality described for Oracle's product remains at the sole discretion of Oracle.

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

3 / 53

Page 4: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

about.me/lefred

Qui suis-je ?

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

4 / 53

Page 5: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Frédéric Descamps@lefredMySQL EvangelistManaging MySQL since 3.23devops believerhttp://lefred.behttp://lefred.be

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

5 / 53

Page 6: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

SGDB & MySQL

Base de données Relationnelle

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

6 / 53

Page 7: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Bases de données RelationnellesIntégrité des données

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

7 / 53

Page 8: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Bases de données RelationnellesIntégrité des données

normalization

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

8 / 53

Page 9: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Bases de données RelationnellesIntégrité des données

normalizationcontraintes (clés étrangères, ...)

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

9 / 53

Page 10: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Bases de données RelationnellesIntégrité des données

normalizationcontraintes (clés étrangères, ...)

Atomicité, Cohérence, Isolarion et Durabilité - ACID

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

10 / 53

Page 11: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Bases de données RelationnellesIntégrité des données

normalizationcontraintes (clés étrangères, ...)

Atomicité, Cohérence, Isolarion et Durabilité - ACIDtransactions

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

11 / 53

Page 12: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Bases de données RelationnellesIntégrité des données

normalizationcontraintes (clés étrangères, ...)

Atomicité, Cohérence, Isolarion et Durabilité - ACIDtransactions

SQL

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

12 / 53

Page 13: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Bases de données RelationnellesIntégrité des données

normalizationcontraintes (clés étrangères, ...)

Atomicité, Cohérence, Isolarion et Durabilité - ACIDtransactions

SQLpuissant language de requêtes

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

13 / 53

Page 14: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

SGDB & MySQL

Base de données NoSQL

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

14 / 53

Page 15: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données DocumentsSans schéma

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

15 / 53

Page 16: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données DocumentsSans schéma

pas de design de schémas, pas de normalization, de clés étrangères, decontraintes, de type de données (data types), etc...

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

16 / 53

Page 17: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données DocumentsSans schéma

pas de design de schémas, pas de normalization, de clés étrangères, decontraintes, de type de données (data types), etc...dévelopement initial très rapide

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

17 / 53

Page 18: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données DocumentsSans schéma

pas de design de schémas, pas de normalization, de clés étrangères, decontraintes, de type de données (data types), etc...dévelopement initial très rapide

Structures flexibles des données

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

18 / 53

Page 19: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données DocumentsSans schéma

pas de design de schémas, pas de normalization, de clés étrangères, decontraintes, de type de données (data types), etc...dévelopement initial très rapide

Structures flexibles des donnéesobjets et tableaux imbriqués

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

19 / 53

Page 20: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données DocumentsSans schéma

pas de design de schémas, pas de normalization, de clés étrangères, decontraintes, de type de données (data types), etc...dévelopement initial très rapide

Structures flexibles des donnéesobjets et tableaux imbriquéscertaines données sont simplement naturellement non structurées et nepeuvent être modélisées de façon optimale dans un modèle relationel

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

20 / 53

Page 21: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données DocumentsSans schéma

pas de design de schémas, pas de normalization, de clés étrangères, decontraintes, de type de données (data types), etc...dévelopement initial très rapide

Structures flexibles des donnéesobjets et tableaux imbriquéscertaines données sont simplement naturellement non structurées et nepeuvent être modélisées de façon optimale dans un modèle relationelpersistence des objets sans utilisation d'un ORM (mapping objet-relationnel)

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

21 / 53

Page 22: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données Documents (2)JSON

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

22 / 53

Page 23: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données Documents (2)JSON

proche du frontend

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

23 / 53

Page 24: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données Documents (2)JSON

proche du frontend"natif " en Javascript

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

24 / 53

Page 25: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données Documents (2)JSON

proche du frontend"natif " en Javascriptutilisé en Node.js

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

25 / 53

Page 26: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

NoSQL ou Base de données Documents (2)JSON

proche du frontend"natif " en Javascriptutilisé en Node.js

Aprentissage facile, et facile à utiliser

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

26 / 53

Page 27: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Bases de données Relationnelles ou Base dedonnées Documents

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

27 / 53

Page 28: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Bases de données Relationnelles ou Base dedonnées Documents

Pourquoi pas les deux ?

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

28 / 53

Page 29: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

MySQL 5.7

Support de JSON

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

29 / 53

Page 30: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Support JSONType natif de données (native datatype)

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

30 / 53

Page 31: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Support JSONType natif de données (native datatype)Valeurs en JSON stockées dans des tables MySQL

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

31 / 53

Page 32: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Support JSONType natif de données (native datatype)Valeurs en JSON stockées dans des tables MySQLFormat de stokage JSON en binaire

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

32 / 53

Page 33: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Support JSONType natif de données (native datatype)Valeurs en JSON stockées dans des tables MySQLFormat de stokage JSON en binaireConversion à partir des types SQL "natifs" vers des valeurs JSON

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

33 / 53

Page 34: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Support JSONType natif de données (native datatype)Valeurs en JSON stockées dans des tables MySQLFormat de stokage JSON en binaireConversion à partir des types SQL "natifs" vers des valeurs JSONFunctions de manipulation du JSON

extraire (JSON_EXTRACT, JSON_KEYS, ...)

inpecter (JSON_CONTAINS, ...)

modifier (JSON_SET, JSON_INSERT, JSON_REMOVE, ...)

création de tableaux et d'objets (JSON_ARRAY, JSON_OBJECT)

recherche d'objets (JSON_SEARCH)

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

34 / 53

Page 35: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Support JSON (2)Inline SQL JSON path expressions

SELECT doc->'$.object.array[0].item' FROM some_table

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

35 / 53

Page 36: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Support JSON (2)Inline SQL JSON path expressions

SELECT doc->'$.object.array[0].item' FROM some_table

Opérateurs booléens (comparaison de valeurs JSON, ...)

foo = doc->'$.field'

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

36 / 53

Page 37: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Support JSON (3)

le meilleur pour la fin...

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

37 / 53

Page 38: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Support JSON (3)

le meilleur pour la fin...

Colonnes Générées/Virtuelles (generated/virtual columns)Index de données JSONClés étrangères vers données JSONVues SQL pour des données JSON

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

38 / 53

Page 39: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Support JSON (3)

le meilleur pour la fin...

Colonnes Générées/Virtuelles (generated/virtual columns)Index de données JSONClés étrangères vers données JSONVues SQL pour des données JSON

ALTER TABLE test_features ADD COLUMN street VARCHAR(30) GENERATED ALWAYS AS (json_unquote(json_extract(feature,'$.properties.STREET'))) VIRTUAL;

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

39 / 53

Page 40: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Document

Cas d'utilisation

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

40 / 53

Page 41: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Extraire du JSON du DB Relationnelle

Relational In, Relational + Document Out

Données stockées dans des tables relationnelles, mais le fronted utilise JSONLe JSON fait directement du mapping des structures de données pour plusieurslangagesFonctions SQL pour construire du JSON

JSON_OBJECT(), JSON_ARRAY()

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

41 / 53

Page 42: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Exemple:

SELECT JSON_OBJECT('cust_id', id, 'name', name, 'email', email) FROM customer;

CREATE VIEW customer_json AS SELECT JSON_OBJECT('cust_id', id, 'name', name, 'email', email) FROM customer;

SELECT * FROM customer_json;

Les modifications et les insertions se font toujours dans les colonnes de la table.

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

42 / 53

Page 43: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Utiliser MySQL comme container de DocumentsJSON

Document In, Relational + Document Out

Virtuellement sans schéma (schemaless)Données non-structuréesPas de structure fixe, les enregistrements peuvent avoir des champs différentsExemple: "product_info", "propriétés", "options", ...

Les données ne sont pas facilement modélisables dans un modèle relationnel, voirimpossible

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

43 / 53

Page 44: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

product_info

product_id attribute value

9 size M

9 color red

9 fabric cotton

11 flavour strawberry

12 capacity 128G

12 spee class class 10

{ "product_id": 9, "size": "M", "color": "red", "fabric": "cotton" }, { "product_id": 11, "flavour": "strawberry" }, { "product+id": 12, "capacity" "128GB" "speed class": "class 10" }

Utiliser MySQL comme container de DocumentsJSON (2)

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

44 / 53

Page 45: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Utiliser MySQL comme container de DocumentsJSON

Une table MySQL ordinaire avec une colonne JSONLes colonnes générées permettent au moteur SQL to vérifier dans les données MySQL.

colonnes virtuellesclés primairesIndexesClés étrangères

Ecriture direcement dans le JSONLis dans un premier temps, les informations du JSON

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

45 / 53

Page 46: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Solution Hybride de Relationnel et de JSON

Relational + Document In, Relational + Document out

Les bases de données sont majoritèrement relationnellesColonnes JSON dans les tables relationnellesLes requêtes peuvent mixer plusieurs backends

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

46 / 53

Page 47: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Document Store

The X DevAPI

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

47 / 53

Page 48: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Opérations orientées Document via SQLTrès puissantPermet la construction de requêtes complexesMais... encore difficile à utiliser

CREATE TABLE product ( id VARCHAR(32) GENERATED ALWAYS AS (JSON_EXTRACT(doc, '$.id')) STORED, doc JSON);INSERT INTO product VALUYES (1, '{...}');SELECT * FROM product WHERE JSON_EXTRACT(doc, '$.field') = value;

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

48 / 53

Page 49: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

The X DevAPIAbstraction au-dessus de SQLAxé sur 4 opérations CRUD de base (Create, Read, Update, Delete)Native Language APIPas nécessaire de connaître le SQLX Protocol

les requêtes CRUD sont encodées au niveau du protocol

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

49 / 53

Page 50: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Exemple 

mydb = session.getSchema("mydb");

mydb.createCollection("products");

products = mydb.getCollection("products");

products.add({"name":"bananas", "color":"yellow"}).execute();

products.find("color = 'yellow'").sort(["name"]).execute();

products.modify("product_id = 123").set("color", "red").execute();

products.remove("product_id = 123").execute();

mydb.post.createIndex("email").field("author.email", "text(30)", false)

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

50 / 53

Page 51: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

tout nouveau tout chaud

MySQL Shell

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

51 / 53

Page 52: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

MySQL ShellMySQL Shell est un client avancé en ligne commande.En plus de SQL, MySQL Shell offreégalement des capacités de script en Javascript et Python. Lorsque MySQL Shell estconnecté au serveur MySQL via le protocol X, le X DevAPI peut être utilisé pour manipulerles deux types de données, relationnelles et documents.

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

52 / 53

Page 53: MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs

Questions ?

Merci !   

  Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.

53 / 53