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

Post on 25-Jan-2017

848 views 2 download

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

1 / 53

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

 

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

about.me/lefred

Qui suis-je ?

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

4 / 53

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

SGDB & MySQL

Base de données Relationnelle

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

6 / 53

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

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

7 / 53

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

normalization

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

8 / 53

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

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

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

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

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

SGDB & MySQL

Base de données NoSQL

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

14 / 53

NoSQL ou Base de données DocumentsSans schéma

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

15 / 53

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

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

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

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

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

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

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

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

22 / 53

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

proche du frontend

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

23 / 53

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

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

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

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

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

27 / 53

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

MySQL 5.7

Support de JSON

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

29 / 53

Support JSONType natif de données (native datatype)

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

30 / 53

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

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

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

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

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

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

Support JSON (3)

le meilleur pour la fin...

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

37 / 53

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

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

Document

Cas d'utilisation

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

40 / 53

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

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

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

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

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

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

Document Store

The X DevAPI

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

47 / 53

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

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

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

tout nouveau tout chaud

MySQL Shell

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

51 / 53

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

Questions ?

Merci !   

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

53 / 53