2. 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
3.
Safe Harbor Statement
The following is intended to outline our general product direction. It is intended for
information purpose only, and may not be incorporated into any contract. It is not a
commitment to deliver any material, code, or functionality, and should not be relied up in
making purchasing decisions. The development, release and timing of any features or
functionality described for Oracle's product remains at the sole discretion of Oracle.
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
3 / 53
6. SGDB & MySQL
Base de données Relationnelle
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
6 / 53
7. Bases de données Relationnelles
Intégrité des données
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
7 / 53
8. Bases de données Relationnelles
Intégrité des données
normalization
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
8 / 53
9. Bases de données Relationnelles
Intégrité des données
normalization
contraintes (clés étrangères, ...)
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
9 / 53
10. Bases de données Relationnelles
Intégrité des données
normalization
contraintes (clés étrangères, ...)
Atomicité, Cohérence, Isolarion et Durabilité - ACID
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
10 / 53
11. Bases de données Relationnelles
Intégrité des données
normalization
contraintes (clés étrangères, ...)
Atomicité, Cohérence, Isolarion et Durabilité - ACID
transactions
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
11 / 53
12. Bases de données Relationnelles
Intégrité des données
normalization
contraintes (clés étrangères, ...)
Atomicité, Cohérence, Isolarion et Durabilité - ACID
transactions
SQL
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
12 / 53
13. Bases de données Relationnelles
Intégrité des données
normalization
contraintes (clés étrangères, ...)
Atomicité, Cohérence, Isolarion et Durabilité - ACID
transactions
SQL
puissant language de requêtes
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
13 / 53
14. SGDB & MySQL
Base de données NoSQL
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
14 / 53
15. NoSQL ou Base de données Documents
Sans schéma
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
15 / 53
16. NoSQL ou Base de données Documents
Sans schéma
pas de design de schémas, pas de normalization, de clés étrangères, de
contraintes, de type de données (data types), etc...
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
16 / 53
17. NoSQL ou Base de données Documents
Sans schéma
pas de design de schémas, pas de normalization, de clés étrangères, de
contraintes, 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
18. NoSQL ou Base de données Documents
Sans schéma
pas de design de schémas, pas de normalization, de clés étrangères, de
contraintes, 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
19. NoSQL ou Base de données Documents
Sans schéma
pas de design de schémas, pas de normalization, de clés étrangères, de
contraintes, de type de données (data types), etc...
dévelopement initial très rapide
Structures flexibles des données
objets et tableaux imbriqués
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
19 / 53
20. NoSQL ou Base de données Documents
Sans schéma
pas de design de schémas, pas de normalization, de clés étrangères, de
contraintes, de type de données (data types), etc...
dévelopement initial très rapide
Structures flexibles des données
objets et tableaux imbriqués
certaines données sont simplement naturellement non structurées et ne
peuvent ê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
21. NoSQL ou Base de données Documents
Sans schéma
pas de design de schémas, pas de normalization, de clés étrangères, de
contraintes, de type de données (data types), etc...
dévelopement initial très rapide
Structures flexibles des données
objets et tableaux imbriqués
certaines données sont simplement naturellement non structurées et ne
peuvent être modélisées de façon optimale dans un modèle relationel
persistence des objets sans utilisation d'un ORM(mappingobjet-relationnel)
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
21 / 53
22. NoSQL ou Base de données Documents (2)
JSON
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
22 / 53
23. NoSQL ou Base de données Documents (2)
JSON
proche du frontend
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
23 / 53
24. 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
25. NoSQL ou Base de données Documents (2)
JSON
proche du frontend
"natif" en Javascript
utilisé en Node.js
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
25 / 53
26. NoSQL ou Base de données Documents (2)
JSON
proche du frontend
"natif" en Javascript
utilisé en Node.js
Aprentissage facile, et facile à utiliser
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
26 / 53
27. Bases de données Relationnelles ou Base de
données Documents
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
27 / 53
28. Bases de données Relationnelles ou Base de
données Documents
Pourquoi pas les deux ?
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
28 / 53
29. MySQL 5.7
Support de JSON
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
29 / 53
30. Support JSON
Type natif de données (native datatype)
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
30 / 53
31. Support JSON
Type 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
32. Support JSON
Type natif de données (native datatype)
Valeurs en JSON stockées dans des tables MySQL
Format de stokage JSON en binaire
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
32 / 53
33. Support JSON
Type natif de données (native datatype)
Valeurs en JSON stockées dans des tables MySQL
Format de stokage JSON en binaire
Conversion à partir des types SQL "natifs" vers des valeurs JSON
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
33 / 53
34. Support JSON
Type natif de données (native datatype)
Valeurs en JSON stockées dans des tables MySQL
Format de stokage JSON en binaire
Conversion à partir des types SQL "natifs" vers des valeurs JSON
Functions 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
35. 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
36. 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
37. Support JSON (3)
le meilleur pour la fin...
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
37 / 53
38. Support JSON (3)
le meilleur pour la fin...
Colonnes Générées/Virtuelles (generated/virtual columns)
Index de données JSON
Clés étrangères vers données JSON
Vues SQL pour des données JSON
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
38 / 53
39. Support JSON (3)
le meilleur pour la fin...
Colonnes Générées/Virtuelles (generated/virtual columns)
Index de données JSON
Clés étrangères vers données JSON
Vues 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
41. Extraire du JSON du DB Relationnelle
Relational In, Relational + Document Out
Données stockées dans des tables relationnelles, mais le fronted utilise JSON
Le JSON fait directement du mapping des structures de données pour plusieurs
langages
Fonctions SQL pour construire du JSON
JSON_OBJECT(), JSON_ARRAY()
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
41 / 53
42. 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
43. Utiliser MySQL comme container de Documents
JSON
Document In, Relational + Document Out
Virtuellement sans schéma (schemaless)
Données non-structurées
Pas de structure fixe, les enregistrements peuvent avoir des champs différents
Exemple: "product_info", "propriétés", "options", ...
Les données ne sont pas facilement modélisables dans un modèle relationnel, voir
impossible
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
43 / 53
44. 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 Documents
JSON (2)
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
44 / 53
45. Utiliser MySQL comme container de Documents
JSON
Une table MySQL ordinaire avec une colonne JSON
Les colonnes générées permettent au moteur SQL to vérifier dans les données MySQL.
colonnes virtuelles
clés primaires
Indexes
Clés étrangères
Ecriture direcement dans le JSON
Lis dans un premier temps, les informations du JSON
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
45 / 53
46. Solution Hybride de Relationnel et de JSON
Relational + Document In, Relational + Document out
Les bases de données sont majoritèrement relationnelles
Colonnes JSON dans les tables relationnelles
Les requêtes peuvent mixer plusieurs backends
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
46 / 53
47. Document Store
The X DevAPI
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
47 / 53
48. Opérations orientées Document via SQL
Très puissant
Permet la construction de requêtes complexes
Mais... 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
49. The X DevAPI
Abstraction au-dessus de SQL
Axé sur 4 opérations CRUD de base (Create, Read, Update, Delete)
Native Language API
Pas nécessaire de connaître le SQL
X Protocol
les requêtes CRUD sont encodées au niveau du protocol
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
49 / 53
50. 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
51. tout nouveau tout chaud
MySQL Shell
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
51 / 53
52. MySQL Shell
MySQL 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 est
connecté au serveur MySQL via le protocol X, le X DevAPI peut être utilisé pour manipuler
les deux types de données, relationnelles et documents.
Copyright @ 2016 Oracle and/or its affiliates. All rights reserved.
52 / 53