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