Découvrez un nouveau monde où l'on peut gérer ses données sans la moindre ligne de SQL.
MySQL Document Store utilise le nouveau protocol MySQL X, qui est également présent avec MySQL Database Service sur OCI, et permet aux développeurs d'écrire du code simple et efficace.
Mais attention, si nécessaire, MySQL Document Store peut également traiter les document JSON comme s'ils étaient des tables relationnelles et permettre des requêtes très poussées...
From single MySQL instance to High Availability: the journey to MySQL InnoDB ...
MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Service
1. Frédéric Descamps
Community Manager
Oracle MySQL
Novembre 2022
Document Store avec MySQL
Document Store avec MySQL
HeatWave Database Service
HeatWave Database Service
MySQL Innovation & Cloud Day
MySQL Innovation & Cloud Day
2. Qui suis-je ?
Qui suis-je ?
about.me/lefred
about.me/lefred
Copyright @ 2022 Oracle and/or its affiliates.
2
3. Frédéric Descamps
@lefred
animateur de la Communauté MySQL
utilisateur de MySQL depuis la version
3.20
fervant adepte du vrai devops
habite dans la contrée de la bière, du
chocolat et des frites
h ps://lefred.be
Copyright @ 2022 Oracle and/or its affiliates.
3
4. MySQL 8.0 Document Store
MySQL 8.0 Document Store
à la découverte du nouveau monde !
à la découverte du nouveau monde !
Copyright @ 2022 Oracle and/or its affiliates.
4
6. NoSQL Document Store
Sans structure (schemaless)
pas de conception de schéma, pas de normalisation, pas de clés étrangères, pas de types de
données, ...
Copyright @ 2022 Oracle and/or its affiliates.
5
7. NoSQL Document Store
Sans structure (schemaless)
pas de conception de schéma, pas de normalisation, pas de clés étrangères, pas de types de
données, ...
un développement initial très rapide
Copyright @ 2022 Oracle and/or its affiliates.
5
8. NoSQL Document Store
Sans structure (schemaless)
pas de conception de schéma, pas de normalisation, pas de clés étrangères, pas de types de
données, ...
un développement initial très rapide
Structure de données exible
Copyright @ 2022 Oracle and/or its affiliates.
5
9. NoSQL Document Store
Sans structure (schemaless)
pas de conception de schéma, pas de normalisation, pas de clés étrangères, pas de types de
données, ...
un développement initial très rapide
Structure de données exible
tableaux ou objets intégrés
Copyright @ 2022 Oracle and/or its affiliates.
5
10. NoSQL Document Store
Sans structure (schemaless)
pas de conception de schéma, pas de normalisation, pas de clés étrangères, pas de types de
données, ...
un développement initial très rapide
Structure de données exible
tableaux ou objets intégrés
solution valable lorsque les certaines données ne peuvent pas être modélisées de manière
optimale dans un modèle relationnel
Copyright @ 2022 Oracle and/or its affiliates.
5
11. NoSQL Document Store
Sans structure (schemaless)
pas de conception de schéma, pas de normalisation, pas de clés étrangères, pas de types de
données, ...
un développement initial très rapide
Structure de données exible
tableaux ou objets intégrés
solution valable lorsque les certaines données ne peuvent pas être modélisées de manière
optimale dans un modèle relationnel
persistance des objets sans l'utilisation d'un ORM - mapping oobject-oriented
Copyright @ 2022 Oracle and/or its affiliates.
5
12. NoSQL Document Store
Sans structure (schemaless)
pas de conception de schéma, pas de normalisation, pas de clés étrangères, pas de types de
données, ...
un développement initial très rapide
Structure de données exible
tableaux ou objets intégrés
solution valable lorsque les certaines données ne peuvent pas être modélisées de manière
optimale dans un modèle relationnel
persistance des objets sans l'utilisation d'un ORM - mapping oobject-oriented
JSON
Copyright @ 2022 Oracle and/or its affiliates.
5
13. NoSQL Document Store
Sans structure (schemaless)
pas de conception de schéma, pas de normalisation, pas de clés étrangères, pas de types de
données, ...
un développement initial très rapide
Structure de données exible
tableaux ou objets intégrés
solution valable lorsque les certaines données ne peuvent pas être modélisées de manière
optimale dans un modèle relationnel
persistance des objets sans l'utilisation d'un ORM - mapping oobject-oriented
JSON
proche du frontend
Copyright @ 2022 Oracle and/or its affiliates.
5
14. NoSQL Document Store
Sans structure (schemaless)
pas de conception de schéma, pas de normalisation, pas de clés étrangères, pas de types de
données, ...
un développement initial très rapide
Structure de données exible
tableaux ou objets intégrés
solution valable lorsque les certaines données ne peuvent pas être modélisées de manière
optimale dans un modèle relationnel
persistance des objets sans l'utilisation d'un ORM - mapping oobject-oriented
JSON
proche du frontend
apprentissage aisé
Copyright @ 2022 Oracle and/or its affiliates.
5
19. En migrant les données (ETL)
SQL
SQL
SQL
ETL: Extraction-Transformation-Chargement
Copyright @ 2022 Oracle and/or its affiliates.
9
20. Et s'il y avait un moyen de fournir à la fois SQL et NoSQL
sur une plateforme stable qui a prouvé sa stabilité sur
une technologie bien connue disposant d'une grande
communauté et un écosystème diversi é ?
Copyright @ 2022 Oracle and/or its affiliates.
10
21. RDBMS ou NoSQL ?
Copyright @ 2022 Oracle and/or its affiliates.
11
22. RDBMS ou NoSQL ?
Pourquoi pas les deux ?
Copyright @ 2022 Oracle and/or its affiliates.
11
23. MySQL Document Store !
Où le SQL est optionnel ?!
Copyright @ 2022 Oracle and/or its affiliates.
12
24. Le SQL est optionnel ?!
Copyright @ 2022 Oracle and/or its affiliates.
13
25. Utilisation de MySQL Document Store !
SQL
SQL
SQL
Copyright @ 2022 Oracle and/or its affiliates.
14
27. Bâti sur le
type de
données
JSON et la
solide
technologie
de MySQL
Server
Fournit un JSON Document Store exible en terme de schéma
Aucune connaissance de SQL requise
Pas besoin de dé nir tous les a ributs possibles, les tables, etc.
Utilise la nouvelle interface X DevAPI
Possibilité d'indexation des données
Un document peut avoir une taille de ~1GB !
Permet l'utilisation des nouveaux styles de programmation moderne
Possibilité de ne plus avoir de requêtes SQL intégrées dans le code
Code plus facile à lire
Fonctionne également aves les tables relationnelles
Compatible avec les solutions existantes pour MySQL
Copyright @ 2022 Oracle and/or its affiliates.
16
30. Installation de MySQL Document Store
installer MySQL 8.0
Copyright @ 2022 Oracle and/or its affiliates.
19
31. Installation de MySQL Document Store
installer MySQL 8.0
installer MySQL Shell
Copyright @ 2022 Oracle and/or its affiliates.
19
32. Installation de MySQL Document Store
installer MySQL 8.0
installer MySQL Shell
installer un connecteur pour votre langage de programmation
Copyright @ 2022 Oracle and/or its affiliates.
19
33. Installation de MySQL Document Store
installer MySQL 8.0
installer MySQL Shell
installer un connecteur pour votre langage de programmation
php-pecl-mysql-xdevapi pour PHP
mysql-connector-python pour Python
...
Copyright @ 2022 Oracle and/or its affiliates.
19
34. Installation de MySQL Document Store
installer MySQL 8.0
installer MySQL Shell
installer un connecteur pour votre langage de programmation
php-pecl-mysql-xdevapi pour PHP
mysql-connector-python pour Python
...
Et rien d'autre, pas besoin d'installer d'autre composant ou de charger un plugin. Assurez-
vous simplement que votre pare-feu vous perme e de vous connecter au port 33060 (X
Protocol).
Copyright @ 2022 Oracle and/or its affiliates.
19
35. MySQL HeatWave Database Service
MySQL HeatWave Database Service sur OCI est le seul service dans le Cloud perme ant
d'utiliser le X Protocol.
Copyright @ 2022 Oracle and/or its affiliates.
20
36. Migration de MongoDB vers MySQL DS
Pour cet example, j'utilise la collection restaurants de MongoDB:
$ mongoexport
$ mongoexport -c
-c restaurants
restaurants >
> restaurants.json
restaurants.json
connected to:
connected to: 127.0
127.0.0.1
.0.1
exported
exported 25359
25359 records
records
Copyright @ 2022 Oracle and/or its affiliates.
21
37. Migration de MongoDB vers MySQL DS
Pour cet example, j'utilise la collection restaurants de MongoDB:
$ mongoexport
$ mongoexport -c
-c restaurants
restaurants >
> restaurants.json
restaurants.json
connected to:
connected to: 127.0
127.0.0.1
.0.1
exported
exported 25359
25359 records
records
JS
JS>
> util
util.
.importJson
importJson(
('restaurants.json'
'restaurants.json',
,{
{convertBsonOid
convertBsonOid:
: true
true}
})
)
Importing from file
Importing from file "restaurants.json"
"restaurants.json" to collection
to collection `
`docstore
docstore`
`.
.`
`restaurants
restaurants`
`
in
in MySQL Server at localhost
MySQL Server at localhost:
:33060
33060
.
..
. 25359.
25359..
. 25359
25359
Processed
Processed 15.60
15.60 MB
MB in
in 25359
25359 documents
documents in
in 0.9976
0.9976 sec
sec (
(25
25.
.36K documents
36K documents/
/s
s)
)
Total successfully imported documents
Total successfully imported documents 25359
25359 (
(25
25.
.36K documents
36K documents/
/s
s)
)
Copyright @ 2022 Oracle and/or its affiliates.
21
42. Faisons une requête
JS > restaurants.find()
C'est beaucoup trop d'enrgistrements pour les a cher ici... limitons-les
Copyright @ 2022 Oracle and/or its affiliates.
26
53. Opérations CRUD
L'acronyme informatique anglais CRUD (pour Create, Read, Update, Delete) désigne les quatre opérations de base pour la persistance des
données, en particulier le stockage d'informations en base de données.
Copyright @ 2022 Oracle and/or its affiliates.
34
54. Opérations CRUD relatives aux collections
Ajout d'un document
collection
collection.
.add
add(
({
{ name
name:
: 'fred'
'fred',
, age
age:
: 46
46 }
})
)
.
.add
add(
({
{ name
name:
: 'scott'
'scott',
, age
age:
: 47
47 }
})
)
.
.execute
execute(
()
)
collection
collection.
.add
add(
([
[
{
{ name
name:
: 'dimo'
'dimo',
, age
age:
: 50
50 }
},
,
{
{ name
name:
: 'kenny'
'kenny',
, age
age:
: 25
25 }
}
]
])
).
.execute
execute(
()
)
Copyright @ 2022 Oracle and/or its affiliates.
35
57. MySQL Document Store Objects Summary
Copyright @ 2022 Oracle and/or its affiliates.
38
58. Tout ce dont vous avez besoin, se trouve ici:
h ps://dev.mysql.com/doc/x-devapi-userguide/en/crud-operations-overview.html
Copyright @ 2022 Oracle and/or its affiliates.
39
59. MySQL Document Store
MySQL Document Store
est entièrement conforme à la norme ACID
est entièrement conforme à la norme ACID
nous nous soucions de vos données
nous nous soucions de vos données
Copyright @ 2022 Oracle and/or its affiliates.
40
60. Document Store entièrement ACID !
Ce e solution s'appuie sur la force et la robustesse éprouvée de MySQL InnoDB
Copyright @ 2022 Oracle and/or its affiliates.
41
61. Document Store entièrement ACID !
Ce e solution s'appuie sur la force et la robustesse éprouvée de MySQL InnoDB
innodb_ ush_log_at_trx_commit = 1
Copyright @ 2022 Oracle and/or its affiliates.
41
62. Document Store entièrement ACID !
Ce e solution s'appuie sur la force et la robustesse éprouvée de MySQL InnoDB
innodb_ ush_log_at_trx_commit = 1
innodb_doublewrite = ON
Copyright @ 2022 Oracle and/or its affiliates.
41
63. Document Store entièrement ACID !
Ce e solution s'appuie sur la force et la robustesse éprouvée de MySQL InnoDB
innodb_ ush_log_at_trx_commit = 1
innodb_doublewrite = ON
sync_binlog = 1
Copyright @ 2022 Oracle and/or its affiliates.
41
64. Document Store entièrement ACID !
Ce e solution s'appuie sur la force et la robustesse éprouvée de MySQL InnoDB
innodb_ ush_log_at_trx_commit = 1
innodb_doublewrite = ON
sync_binlog = 1
transaction_isolation = REPEATABLE-READ|READ-COMMITTED|...
Copyright @ 2022 Oracle and/or its affiliates.
41
65. Document Store entièrement ACID !
Ce e solution s'appuie sur la force et la robustesse éprouvée de MySQL InnoDB
innodb_ ush_log_at_trx_commit = 1
innodb_doublewrite = ON
sync_binlog = 1
transaction_isolation = REPEATABLE-READ|READ-COMMITTED|...
Nous nous soucions de vos données !
Copyright @ 2022 Oracle and/or its affiliates.
41
68. OK nous avons le Document Store,
OK nous avons le Document Store,
les opérations CRUD et la norme ACID
les opérations CRUD et la norme ACID
mais qu'est-ce qui rend le MySQL Document Store unique
mais qu'est-ce qui rend le MySQL Document Store unique
?
?
Copyright @ 2022 Oracle and/or its affiliates.
44
69. Challenge: listez les meilleurs restaurants de chaque
type de nourriture et a chez le top 10, avec le meilleur
en premier !
n'oubliez pas que tous ces restaurants ne sont que des documents JSON
Copyright @ 2022 Oracle and/or its affiliates.
45
70. Traiter le NoSQL comme du SQL - agrégation
Copyright @ 2022 Oracle and/or its affiliates.
46
71. Traiter le NoSQL comme du SQL - agrégation
Copyright @ 2022 Oracle and/or its affiliates.
47
72. Traiter le NoSQL comme du SQL - agrégation
Copyright @ 2022 Oracle and/or its affiliates.
48
73. Traiter le NoSQL comme du SQL - agrégation
Copyright @ 2022 Oracle and/or its affiliates.
49
74. NoSQL ou SQL
Vous avez la possibilité d'écrire un code propre et soigné :
Copyright @ 2022 Oracle and/or its affiliates.
50
75. NoSQL ou SQL
Vous avez la possibilité d'écrire un code propre et soigné :
$results
$results =
= $collection
$collection->
->find
find(
('cuisine like "italian"'
'cuisine like "italian"')
)->
->execute
execute(
()
)->
->fetchAll
fetchAll(
()
);
;
Copyright @ 2022 Oracle and/or its affiliates.
50
76. NoSQL ou SQL
Vous avez la possibilité d'écrire un code propre et soigné :
$results
$results =
= $collection
$collection->
->find
find(
('cuisine like "italian"'
'cuisine like "italian"')
)->
->execute
execute(
()
)->
->fetchAll
fetchAll(
()
);
;
Et n'utilisez SQL que lorsque c'est vraiment nécessaire :
Copyright @ 2022 Oracle and/or its affiliates.
50
77. NoSQL ou SQL
Vous avez la possibilité d'écrire un code propre et soigné :
$results
$results =
= $collection
$collection->
->find
find(
('cuisine like "italian"'
'cuisine like "italian"')
)->
->execute
execute(
()
)->
->fetchAll
fetchAll(
()
);
;
Et n'utilisez SQL que lorsque c'est vraiment nécessaire :
$results
$results =
= $session
$session->
->sql
sql(
('WITH cte1 AS (SELECT doc->>"$.name" AS name,
'WITH cte1 AS (SELECT doc->>"$.name" AS name,
doc->>"$.cuisine" AS cuisine,
doc->>"$.cuisine" AS cuisine,
(SELECT AVG(score) FROM JSON_TABLE(doc, "$.grades[*]" COLUMNS (score INT
(SELECT AVG(score) FROM JSON_TABLE(doc, "$.grades[*]" COLUMNS (score INT
PATH "$.score")) AS r) AS avg_score FROM docstore.restaurants) SELECT *, RANK()
PATH "$.score")) AS r) AS avg_score FROM docstore.restaurants) SELECT *, RANK()
OVER ( PARTITION BY cuisine ORDER BY avg_score) AS `rank`
OVER ( PARTITION BY cuisine ORDER BY avg_score) AS `rank`
FROM cte1 ORDER BY `rank`, avg_score DESC LIMIT 10;'
FROM cte1 ORDER BY `rank`, avg_score DESC LIMIT 10;')
)->
->execute
execute(
()
);
;
Copyright @ 2022 Oracle and/or its affiliates.
50
78. Tout cela dans la même session MySQL X !
Copyright @ 2022 Oracle and/or its affiliates.
51
85. absence de schéma
structure de données exible
apprentissage facile (CRUD)
Conclusion
Le meilleur des deux mondes en un seul produit !
Intégrité des données
Conforme à la norme ACID
Transactions
SQL
Copyright @ 2022 Oracle and/or its affiliates.
56
86. MySQL 8.0 DBA Certi cation
Copyright @ 2022 Oracle and/or its affiliates.
57
87. MySQL 8.0 Developer Certi cation
Copyright @ 2022 Oracle and/or its affiliates.
58