SlideShare une entreprise Scribd logo
1  sur  88
Télécharger pour lire hors ligne
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
Qui suis-je ?
Qui suis-je ?
about.me/lefred
about.me/lefred
Copyright @ 2022 Oracle and/or its affiliates.
2
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
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
NoSQL Document Store
Sans structure (schemaless)
Copyright @ 2022 Oracle and/or its affiliates.
5
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
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
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
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
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
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
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
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
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
par les DBAs
Percection des données
Copyright @ 2022 Oracle and/or its affiliates.
6
par les DBAs par les développeurs
{
{
"GNP"
"GNP" :
: 249704
249704,
,
"Name"
"Name" :
: "Belgium"
"Belgium",
,
"government"
"government" :
: {
{
"GovernmentForm"
"GovernmentForm" :
:
"Constitutional Monarchy, Federation"
"Constitutional Monarchy, Federation",
,
"HeadOfState"
"HeadOfState" :
: "Philippe I"
"Philippe I"
}
},
,
"_id"
"_id" :
: "BEL"
"BEL",
,
"IndepYear"
"IndepYear" :
: 1830
1830,
,
"demographics"
"demographics" :
: {
{
"Population"
"Population" :
: 10239000
10239000,
,
"LifeExpectancy"
"LifeExpectancy" :
: 77.8000030517578
77.8000030517578
}
},
,
}
}
Percection des données
Copyright @ 2022 Oracle and/or its affiliates.
6
Il faut quand-même toujours réaliser des analyses
SQL
SQL
SQL
Copyright @ 2022 Oracle and/or its affiliates.
7
... mais...comment ?
?
SQL
SQL
SQL
Copyright @ 2022 Oracle and/or its affiliates.
8
En migrant les données (ETL)
SQL
SQL
SQL
ETL: Extraction-Transformation-Chargement
Copyright @ 2022 Oracle and/or its affiliates.
9
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
RDBMS ou NoSQL ?
Copyright @ 2022 Oracle and/or its affiliates.
11
RDBMS ou NoSQL ?
Pourquoi pas les deux ?
Copyright @ 2022 Oracle and/or its affiliates.
11
MySQL Document Store !
Où le SQL est optionnel ?!
Copyright @ 2022 Oracle and/or its affiliates.
12
Le SQL est optionnel ?!
Copyright @ 2022 Oracle and/or its affiliates.
13
Utilisation de MySQL Document Store !
SQL
SQL
SQL
Copyright @ 2022 Oracle and/or its affiliates.
14
La Solution
La Solution
MySQL Document Store
MySQL Document Store
Copyright @ 2022 Oracle and/or its affiliates.
15
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
Connecteurs compatibles avec X Protocol
Copyright @ 2022 Oracle and/or its affiliates.
17
Installation
Installation
MySQL Document Store
MySQL Document Store
Copyright @ 2022 Oracle and/or its affiliates.
18
Installation de MySQL Document Store
installer MySQL 8.0
Copyright @ 2022 Oracle and/or its affiliates.
19
Installation de MySQL Document Store
installer MySQL 8.0
installer MySQL Shell
Copyright @ 2022 Oracle and/or its affiliates.
19
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
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
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
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
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
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
Copyright @ 2022 Oracle and/or its affiliates.
22
Copyright @ 2022 Oracle and/or its affiliates.
23
Copyright @ 2022 Oracle and/or its affiliates.
24
Copyright @ 2022 Oracle and/or its affiliates.
25
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
Copyright @ 2022 Oracle and/or its affiliates.
27
Quelques autres examples
Copyright @ 2022 Oracle and/or its affiliates.
28
Ajoutons un critère de sélection
Copyright @ 2022 Oracle and/or its affiliates.
29
Syntaxe légèrment di érente de celle de MongoDB
Copyright @ 2022 Oracle and/or its affiliates.
30
Syntaxe légèrment di érente de celle de MongoDB
Copyright @ 2022 Oracle and/or its affiliates.
30
Et pour les développeurs ?
Copyright @ 2022 Oracle and/or its affiliates.
31
Et pour les développeurs ?
$session
$session =
= mysql_xdevapi
mysql_xdevapi
getSession
getSession(
("mysqlx://fred:MyP@ssw0rd%@localhost"
"mysqlx://fred:MyP@ssw0rd%@localhost")
);
;
$schema
$schema =
= $session
$session->
->getSchema
getSchema(
("docstore"
"docstore")
);
;
$collection
$collection =
= $schema
$schema->
->getCollection
getCollection(
("restaurants"
"restaurants")
);
;
$results
$results =
= $collection
$collection->
->find
find(
($search
$search)
)->
->execute
execute(
()
)->
->fetchAll
fetchAll(
()
);
;
...
...
foreach
foreach (
($results
$results as
as $doc
$doc)
) {
{
echo
echo "<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>"
"<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>";
;
echo
echo "<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>"
"<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>";
;
}
}
Copyright @ 2022 Oracle and/or its affiliates.
32
Et pour les développeurs ?
$session
$session =
= mysql_xdevapi
mysql_xdevapi
getSession
getSession(
("mysqlx://fred:MyP@ssw0rd%@localhost"
"mysqlx://fred:MyP@ssw0rd%@localhost")
);
;
$schema
$schema =
= $session
$session->
->getSchema
getSchema(
("docstore"
"docstore")
);
;
$collection
$collection =
= $schema
$schema->
->getCollection
getCollection(
("restaurants"
"restaurants")
);
;
$results
$results =
= $collection
$collection->
->find
find(
($search
$search)
)->
->execute
execute(
()
)->
->fetchAll
fetchAll(
()
);
;
...
...
foreach
foreach (
($results
$results as
as $doc
$doc)
) {
{
echo
echo "<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>"
"<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>";
;
echo
echo "<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>"
"<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>";
;
}
}
Facile, en utilisant uniquement des opérations CRUD !
Copyright @ 2022 Oracle and/or its affiliates.
32
Et pour les développeurs ?
$session
$session =
= mysql_xdevapi
mysql_xdevapi
getSession
getSession(
("mysqlx://fred:MyP@ssw0rd%@localhost"
"mysqlx://fred:MyP@ssw0rd%@localhost")
);
;
$schema
$schema =
= $session
$session->
->getSchema
getSchema(
("docstore"
"docstore")
);
;
$collection
$collection =
= $schema
$schema->
->getCollection
getCollection(
("restaurants"
"restaurants")
);
;
$results
$results =
= $collection
$collection->
->find
find(
($search
$search)
)->
->execute
execute(
()
)->
->fetchAll
fetchAll(
()
);
;
...
...
foreach
foreach (
($results
$results as
as $doc
$doc)
) {
{
echo
echo "<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>"
"<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>";
;
echo
echo "<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>"
"<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>";
;
}
}
Facile, en utilisant uniquement des opérations CRUD !
Pas une seule instruction SQL !
Copyright @ 2022 Oracle and/or its affiliates.
32
En
import
import *
*;
;
class
class Main
Main {
{
public
public static
static void
void main
main(
(String
String args
args[
[]
])
) {
{
Session
Session mySession
mySession =
= new
new SessionFactory
SessionFactory(
()
)
.
.getSession
getSession(
("mysqlx://localhost:33060/docstore?user=resto&password=Passw0rd!"
"mysqlx://localhost:33060/docstore?user=resto&password=Passw0rd!")
);
;
Schema
Schema myDb
myDb =
= mySession
mySession.
.getSchema
getSchema(
("docstore"
"docstore")
);
;
Collection
Collection myColl
myColl =
= myDb
myDb.
.getCollection
getCollection(
("restaurants"
"restaurants")
);
;
DocResult
DocResult myDocs
myDocs =
= myColl
myColl.
.find
find(
("name like :param"
"name like :param")
).
.limit
limit(
(1
1)
)
.
.bind
bind(
("param"
"param",
, "Green%"
"Green%")
).
.execute
execute(
()
);
;
System
System.
.out
out.
.println
println(
(myDocs
myDocs.
.fetchOne
fetchOne(
()
))
);
;
mySession
mySession.
.close
close(
()
);
;
}
}
}
}
Copyright @ 2022 Oracle and/or its affiliates.
com
com.
.mysql
mysql.
.cj
cj.
.xdevapi
xdevapi.
.
33
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
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
collection
collection.
.modify
modify(
('name = :name'
'name = :name')
)
.
.bind
bind(
('name'
'name',
, 'fred'
'fred')
)
.
.set
set(
('age'
'age',
, 43
43)
)
.
.sort
sort(
('name ASC'
'name ASC')
)
.
.limit
limit(
(1
1)
)
.
.execute
execute(
()
)
collection
collection.
.modify
modify(
('name = :name'
'name = :name')
)
.
.bind
bind(
('name'
'name',
, 'fred'
'fred')
)
.
.patch
patch(
({
{ age
age:
: 43
43,
, active
active:
: false
false }
})
)
.
.sort
sort(
('name DESC'
'name DESC')
)
.
.limit
limit(
(1
1)
)
.
.execute
execute(
()
)
Opérations CRUD relatives aux collections
Modi cation d'un document
Copyright @ 2022 Oracle and/or its affiliates.
36
Opérations CRUD relatives aux collections
Suppression d'un document
collection
collection.
.remove
remove(
('name = :name'
'name = :name')
)
.
.bind
bind(
('name'
'name',
, 'fred'
'fred')
)
.
.sort
sort(
('age ASC'
'age ASC')
)
.
.limit
limit(
(1
1)
)
.
.execute
execute(
()
)
Copyright @ 2022 Oracle and/or its affiliates.
37
MySQL Document Store Objects Summary
Copyright @ 2022 Oracle and/or its affiliates.
38
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
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
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
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
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
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
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
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
ACID - Transactions
Copyright @ 2022 Oracle and/or its affiliates.
42
ACID - Transactions
Copyright @ 2022 Oracle and/or its affiliates.
43
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
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
Traiter le NoSQL comme du SQL - agrégation
Copyright @ 2022 Oracle and/or its affiliates.
46
Traiter le NoSQL comme du SQL - agrégation
Copyright @ 2022 Oracle and/or its affiliates.
47
Traiter le NoSQL comme du SQL - agrégation
Copyright @ 2022 Oracle and/or its affiliates.
48
Traiter le NoSQL comme du SQL - agrégation
Copyright @ 2022 Oracle and/or its affiliates.
49
NoSQL ou SQL
Vous avez la possibilité d'écrire un code propre et soigné :
Copyright @ 2022 Oracle and/or its affiliates.
50
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
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
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
Tout cela dans la même session MySQL X !
Copyright @ 2022 Oracle and/or its affiliates.
51
vous pouvez combiner NoSQL & SQL
Copyright @ 2022 Oracle and/or its affiliates.
52
Aller plus loin !
Le meilleur des deux mondes:
Copyright @ 2022 Oracle and/or its affiliates.
53
Aller plus loin !
Le meilleur des deux mondes:
Et le résultat en action:
Copyright @ 2022 Oracle and/or its affiliates.
53
Aller plus loin !
Le meilleur des deux mondes:
Et le résultat en action:
Copyright @ 2022 Oracle and/or its affiliates.
53
Copyright @ 2022 Oracle and/or its affiliates.
54
Conclusion
Conclusion
qu'est ce que j'y gagne ?
qu'est ce que j'y gagne ?
Copyright @ 2022 Oracle and/or its affiliates.
55
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
MySQL 8.0 DBA Certi cation
Copyright @ 2022 Oracle and/or its affiliates.
57
MySQL 8.0 Developer Certi cation
Copyright @ 2022 Oracle and/or its affiliates.
58
Merci !
Merci !
Copyright @ 2022 Oracle and/or its affiliates.
59

Contenu connexe

Similaire à MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Service

SQL Server et les développeurs
SQL Server et les développeurs SQL Server et les développeurs
SQL Server et les développeurs Microsoft
 
Web sémantique et Web de données, et si on passait à la pratique ?
Web sémantique et Web de données, et si on passait à la pratique ?Web sémantique et Web de données, et si on passait à la pratique ?
Web sémantique et Web de données, et si on passait à la pratique ?Antidot
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQLLilia Sfaxi
 
Presentation of Oracle database products for Beginners
Presentation of Oracle database products for BeginnersPresentation of Oracle database products for Beginners
Presentation of Oracle database products for Beginnersyazidaguedal
 
Presentation of Oracle database products
Presentation of Oracle database productsPresentation of Oracle database products
Presentation of Oracle database productsAlgiers Tech Meetup
 
Introduction nosql
Introduction nosqlIntroduction nosql
Introduction nosqlInes Slimene
 
Introduction au web des données (Linked Data)
Introduction au web des données (Linked Data)Introduction au web des données (Linked Data)
Introduction au web des données (Linked Data)BorderCloud
 
Livre blanc data-lakes converteo 2018
Livre blanc data-lakes converteo 2018Livre blanc data-lakes converteo 2018
Livre blanc data-lakes converteo 2018Converteo
 
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data LakeGUSS
 
SAS Forum Soft Computing Théâtre
SAS Forum Soft Computing ThéâtreSAS Forum Soft Computing Théâtre
SAS Forum Soft Computing ThéâtreSoft Computing
 
Discovery Session France: Atelier découverte de la Data Virtualization
Discovery Session France: Atelier découverte de la Data VirtualizationDiscovery Session France: Atelier découverte de la Data Virtualization
Discovery Session France: Atelier découverte de la Data VirtualizationDenodo
 
Discovery Session France: Atelier découverte de la Data Virtualization
Discovery Session France: Atelier découverte de la Data VirtualizationDiscovery Session France: Atelier découverte de la Data Virtualization
Discovery Session France: Atelier découverte de la Data VirtualizationDenodo
 
Mise en place d’un moteur de recherche et de recommandation de documents text...
Mise en place d’un moteur de recherche et de recommandation de documents text...Mise en place d’un moteur de recherche et de recommandation de documents text...
Mise en place d’un moteur de recherche et de recommandation de documents text...AbdeslamAMRANE3
 
Phan-TienNam-CV-20161103
Phan-TienNam-CV-20161103Phan-TienNam-CV-20161103
Phan-TienNam-CV-20161103Tien Nam Phan
 
CV - Database Administrator ( French )
CV - Database Administrator ( French )CV - Database Administrator ( French )
CV - Database Administrator ( French )Franck VICTORIA
 
Session en ligne: Découverte du Logical Data Fabric & Data Virtualization
Session en ligne: Découverte du Logical Data Fabric & Data VirtualizationSession en ligne: Découverte du Logical Data Fabric & Data Virtualization
Session en ligne: Découverte du Logical Data Fabric & Data VirtualizationDenodo
 
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDBSGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDBRomain Cambien
 

Similaire à MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Service (20)

SQL Server et les développeurs
SQL Server et les développeurs SQL Server et les développeurs
SQL Server et les développeurs
 
Web sémantique et Web de données, et si on passait à la pratique ?
Web sémantique et Web de données, et si on passait à la pratique ?Web sémantique et Web de données, et si on passait à la pratique ?
Web sémantique et Web de données, et si on passait à la pratique ?
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
Presentation of Oracle database products for Beginners
Presentation of Oracle database products for BeginnersPresentation of Oracle database products for Beginners
Presentation of Oracle database products for Beginners
 
Presentation of Oracle database products
Presentation of Oracle database productsPresentation of Oracle database products
Presentation of Oracle database products
 
Introduction nosql
Introduction nosqlIntroduction nosql
Introduction nosql
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Introduction au web des données (Linked Data)
Introduction au web des données (Linked Data)Introduction au web des données (Linked Data)
Introduction au web des données (Linked Data)
 
Livre blanc data-lakes converteo 2018
Livre blanc data-lakes converteo 2018Livre blanc data-lakes converteo 2018
Livre blanc data-lakes converteo 2018
 
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
 
SAS Forum Soft Computing Théâtre
SAS Forum Soft Computing ThéâtreSAS Forum Soft Computing Théâtre
SAS Forum Soft Computing Théâtre
 
Webinar Degetel DataStax
Webinar Degetel DataStaxWebinar Degetel DataStax
Webinar Degetel DataStax
 
Discovery Session France: Atelier découverte de la Data Virtualization
Discovery Session France: Atelier découverte de la Data VirtualizationDiscovery Session France: Atelier découverte de la Data Virtualization
Discovery Session France: Atelier découverte de la Data Virtualization
 
Discovery Session France: Atelier découverte de la Data Virtualization
Discovery Session France: Atelier découverte de la Data VirtualizationDiscovery Session France: Atelier découverte de la Data Virtualization
Discovery Session France: Atelier découverte de la Data Virtualization
 
Mise en place d’un moteur de recherche et de recommandation de documents text...
Mise en place d’un moteur de recherche et de recommandation de documents text...Mise en place d’un moteur de recherche et de recommandation de documents text...
Mise en place d’un moteur de recherche et de recommandation de documents text...
 
Neo4j
Neo4jNeo4j
Neo4j
 
Phan-TienNam-CV-20161103
Phan-TienNam-CV-20161103Phan-TienNam-CV-20161103
Phan-TienNam-CV-20161103
 
CV - Database Administrator ( French )
CV - Database Administrator ( French )CV - Database Administrator ( French )
CV - Database Administrator ( French )
 
Session en ligne: Découverte du Logical Data Fabric & Data Virtualization
Session en ligne: Découverte du Logical Data Fabric & Data VirtualizationSession en ligne: Découverte du Logical Data Fabric & Data Virtualization
Session en ligne: Découverte du Logical Data Fabric & Data Virtualization
 
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDBSGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
 

Plus de Frederic Descamps

MySQL Day Roma - MySQL Shell and Visual Studio Code Extension
MySQL Day Roma - MySQL Shell and Visual Studio Code ExtensionMySQL Day Roma - MySQL Shell and Visual Studio Code Extension
MySQL Day Roma - MySQL Shell and Visual Studio Code ExtensionFrederic Descamps
 
RivieraJUG - MySQL Indexes and Histograms
RivieraJUG - MySQL Indexes and HistogramsRivieraJUG - MySQL Indexes and Histograms
RivieraJUG - MySQL Indexes and HistogramsFrederic Descamps
 
RivieraJUG - MySQL 8.0 - What's new for developers.pdf
RivieraJUG - MySQL 8.0 - What's new for developers.pdfRivieraJUG - MySQL 8.0 - What's new for developers.pdf
RivieraJUG - MySQL 8.0 - What's new for developers.pdfFrederic Descamps
 
MySQL User Group NL - MySQL 8
MySQL User Group NL - MySQL 8MySQL User Group NL - MySQL 8
MySQL User Group NL - MySQL 8Frederic Descamps
 
State of the Dolphin - May 2022
State of the Dolphin - May 2022State of the Dolphin - May 2022
State of the Dolphin - May 2022Frederic Descamps
 
Percona Live 2022 - MySQL Shell for Visual Studio Code
Percona Live 2022 - MySQL Shell for Visual Studio CodePercona Live 2022 - MySQL Shell for Visual Studio Code
Percona Live 2022 - MySQL Shell for Visual Studio CodeFrederic Descamps
 
Percona Live 2022 - The Evolution of a MySQL Database System
Percona Live 2022 - The Evolution of a MySQL Database SystemPercona Live 2022 - The Evolution of a MySQL Database System
Percona Live 2022 - The Evolution of a MySQL Database SystemFrederic Descamps
 
Percona Live 2022 - MySQL Architectures
Percona Live 2022 - MySQL ArchitecturesPercona Live 2022 - MySQL Architectures
Percona Live 2022 - MySQL ArchitecturesFrederic Descamps
 
LinuxFest Northwest 2022 - The Evolution of a MySQL Database System
LinuxFest Northwest 2022 - The Evolution of a MySQL Database SystemLinuxFest Northwest 2022 - The Evolution of a MySQL Database System
LinuxFest Northwest 2022 - The Evolution of a MySQL Database SystemFrederic Descamps
 
Open Source 101 2022 - MySQL Indexes and Histograms
Open Source 101 2022 - MySQL Indexes and HistogramsOpen Source 101 2022 - MySQL Indexes and Histograms
Open Source 101 2022 - MySQL Indexes and HistogramsFrederic Descamps
 
Pi Day 2022 - from IoT to MySQL HeatWave Database Service
Pi Day 2022 -  from IoT to MySQL HeatWave Database ServicePi Day 2022 -  from IoT to MySQL HeatWave Database Service
Pi Day 2022 - from IoT to MySQL HeatWave Database ServiceFrederic Descamps
 
Confoo 2022 - le cycle d'une instance MySQL
Confoo 2022  - le cycle d'une instance MySQLConfoo 2022  - le cycle d'une instance MySQL
Confoo 2022 - le cycle d'une instance MySQLFrederic Descamps
 
FOSDEM 2022 MySQL Devroom: MySQL 8.0 - Logical Backups, Snapshots and Point-...
FOSDEM 2022 MySQL Devroom:  MySQL 8.0 - Logical Backups, Snapshots and Point-...FOSDEM 2022 MySQL Devroom:  MySQL 8.0 - Logical Backups, Snapshots and Point-...
FOSDEM 2022 MySQL Devroom: MySQL 8.0 - Logical Backups, Snapshots and Point-...Frederic Descamps
 
Les nouveautés de MySQL 8.0
Les nouveautés de MySQL 8.0Les nouveautés de MySQL 8.0
Les nouveautés de MySQL 8.0Frederic Descamps
 
Les nouveautés de MySQL 8.0
Les nouveautés de MySQL 8.0Les nouveautés de MySQL 8.0
Les nouveautés de MySQL 8.0Frederic Descamps
 
State of The Dolphin - May 2021
State of The Dolphin - May 2021State of The Dolphin - May 2021
State of The Dolphin - May 2021Frederic Descamps
 
Deploying Magento on OCI with MDS
Deploying Magento on OCI with MDSDeploying Magento on OCI with MDS
Deploying Magento on OCI with MDSFrederic Descamps
 
From single MySQL instance to High Availability: the journey to MySQL InnoDB ...
From single MySQL instance to High Availability: the journey to MySQL InnoDB ...From single MySQL instance to High Availability: the journey to MySQL InnoDB ...
From single MySQL instance to High Availability: the journey to MySQL InnoDB ...Frederic Descamps
 

Plus de Frederic Descamps (20)

MySQL Day Roma - MySQL Shell and Visual Studio Code Extension
MySQL Day Roma - MySQL Shell and Visual Studio Code ExtensionMySQL Day Roma - MySQL Shell and Visual Studio Code Extension
MySQL Day Roma - MySQL Shell and Visual Studio Code Extension
 
RivieraJUG - MySQL Indexes and Histograms
RivieraJUG - MySQL Indexes and HistogramsRivieraJUG - MySQL Indexes and Histograms
RivieraJUG - MySQL Indexes and Histograms
 
RivieraJUG - MySQL 8.0 - What's new for developers.pdf
RivieraJUG - MySQL 8.0 - What's new for developers.pdfRivieraJUG - MySQL 8.0 - What's new for developers.pdf
RivieraJUG - MySQL 8.0 - What's new for developers.pdf
 
MySQL User Group NL - MySQL 8
MySQL User Group NL - MySQL 8MySQL User Group NL - MySQL 8
MySQL User Group NL - MySQL 8
 
State of the Dolphin - May 2022
State of the Dolphin - May 2022State of the Dolphin - May 2022
State of the Dolphin - May 2022
 
Percona Live 2022 - MySQL Shell for Visual Studio Code
Percona Live 2022 - MySQL Shell for Visual Studio CodePercona Live 2022 - MySQL Shell for Visual Studio Code
Percona Live 2022 - MySQL Shell for Visual Studio Code
 
Percona Live 2022 - The Evolution of a MySQL Database System
Percona Live 2022 - The Evolution of a MySQL Database SystemPercona Live 2022 - The Evolution of a MySQL Database System
Percona Live 2022 - The Evolution of a MySQL Database System
 
Percona Live 2022 - MySQL Architectures
Percona Live 2022 - MySQL ArchitecturesPercona Live 2022 - MySQL Architectures
Percona Live 2022 - MySQL Architectures
 
LinuxFest Northwest 2022 - The Evolution of a MySQL Database System
LinuxFest Northwest 2022 - The Evolution of a MySQL Database SystemLinuxFest Northwest 2022 - The Evolution of a MySQL Database System
LinuxFest Northwest 2022 - The Evolution of a MySQL Database System
 
Open Source 101 2022 - MySQL Indexes and Histograms
Open Source 101 2022 - MySQL Indexes and HistogramsOpen Source 101 2022 - MySQL Indexes and Histograms
Open Source 101 2022 - MySQL Indexes and Histograms
 
Pi Day 2022 - from IoT to MySQL HeatWave Database Service
Pi Day 2022 -  from IoT to MySQL HeatWave Database ServicePi Day 2022 -  from IoT to MySQL HeatWave Database Service
Pi Day 2022 - from IoT to MySQL HeatWave Database Service
 
Confoo 2022 - le cycle d'une instance MySQL
Confoo 2022  - le cycle d'une instance MySQLConfoo 2022  - le cycle d'une instance MySQL
Confoo 2022 - le cycle d'une instance MySQL
 
FOSDEM 2022 MySQL Devroom: MySQL 8.0 - Logical Backups, Snapshots and Point-...
FOSDEM 2022 MySQL Devroom:  MySQL 8.0 - Logical Backups, Snapshots and Point-...FOSDEM 2022 MySQL Devroom:  MySQL 8.0 - Logical Backups, Snapshots and Point-...
FOSDEM 2022 MySQL Devroom: MySQL 8.0 - Logical Backups, Snapshots and Point-...
 
Les nouveautés de MySQL 8.0
Les nouveautés de MySQL 8.0Les nouveautés de MySQL 8.0
Les nouveautés de MySQL 8.0
 
Les nouveautés de MySQL 8.0
Les nouveautés de MySQL 8.0Les nouveautés de MySQL 8.0
Les nouveautés de MySQL 8.0
 
State of The Dolphin - May 2021
State of The Dolphin - May 2021State of The Dolphin - May 2021
State of The Dolphin - May 2021
 
MySQL Shell for DBAs
MySQL Shell for DBAsMySQL Shell for DBAs
MySQL Shell for DBAs
 
Deploying Magento on OCI with MDS
Deploying Magento on OCI with MDSDeploying Magento on OCI with MDS
Deploying Magento on OCI with MDS
 
MySQL Router REST API
MySQL Router REST APIMySQL Router REST API
MySQL Router REST API
 
From single MySQL instance to High Availability: the journey to MySQL InnoDB ...
From single MySQL instance to High Availability: the journey to MySQL InnoDB ...From single MySQL instance to High Availability: the journey to MySQL InnoDB ...
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
  • 5. NoSQL Document Store Sans structure (schemaless) Copyright @ 2022 Oracle and/or its affiliates. 5
  • 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
  • 15. par les DBAs Percection des données Copyright @ 2022 Oracle and/or its affiliates. 6
  • 16. par les DBAs par les développeurs { { "GNP" "GNP" : : 249704 249704, , "Name" "Name" : : "Belgium" "Belgium", , "government" "government" : : { { "GovernmentForm" "GovernmentForm" : : "Constitutional Monarchy, Federation" "Constitutional Monarchy, Federation", , "HeadOfState" "HeadOfState" : : "Philippe I" "Philippe I" } }, , "_id" "_id" : : "BEL" "BEL", , "IndepYear" "IndepYear" : : 1830 1830, , "demographics" "demographics" : : { { "Population" "Population" : : 10239000 10239000, , "LifeExpectancy" "LifeExpectancy" : : 77.8000030517578 77.8000030517578 } }, , } } Percection des données Copyright @ 2022 Oracle and/or its affiliates. 6
  • 17. Il faut quand-même toujours réaliser des analyses SQL SQL SQL Copyright @ 2022 Oracle and/or its affiliates. 7
  • 18. ... mais...comment ? ? SQL SQL SQL Copyright @ 2022 Oracle and/or its affiliates. 8
  • 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
  • 26. La Solution La Solution MySQL Document Store MySQL Document Store Copyright @ 2022 Oracle and/or its affiliates. 15
  • 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
  • 28. Connecteurs compatibles avec X Protocol Copyright @ 2022 Oracle and/or its affiliates. 17
  • 29. Installation Installation MySQL Document Store MySQL Document Store Copyright @ 2022 Oracle and/or its affiliates. 18
  • 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
  • 38. Copyright @ 2022 Oracle and/or its affiliates. 22
  • 39. Copyright @ 2022 Oracle and/or its affiliates. 23
  • 40. Copyright @ 2022 Oracle and/or its affiliates. 24
  • 41. Copyright @ 2022 Oracle and/or its affiliates. 25
  • 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
  • 43. Copyright @ 2022 Oracle and/or its affiliates. 27
  • 44. Quelques autres examples Copyright @ 2022 Oracle and/or its affiliates. 28
  • 45. Ajoutons un critère de sélection Copyright @ 2022 Oracle and/or its affiliates. 29
  • 46. Syntaxe légèrment di érente de celle de MongoDB Copyright @ 2022 Oracle and/or its affiliates. 30
  • 47. Syntaxe légèrment di érente de celle de MongoDB Copyright @ 2022 Oracle and/or its affiliates. 30
  • 48. Et pour les développeurs ? Copyright @ 2022 Oracle and/or its affiliates. 31
  • 49. Et pour les développeurs ? $session $session = = mysql_xdevapi mysql_xdevapi getSession getSession( ("mysqlx://fred:MyP@ssw0rd%@localhost" "mysqlx://fred:MyP@ssw0rd%@localhost") ); ; $schema $schema = = $session $session-> ->getSchema getSchema( ("docstore" "docstore") ); ; $collection $collection = = $schema $schema-> ->getCollection getCollection( ("restaurants" "restaurants") ); ; $results $results = = $collection $collection-> ->find find( ($search $search) )-> ->execute execute( () )-> ->fetchAll fetchAll( () ); ; ... ... foreach foreach ( ($results $results as as $doc $doc) ) { { echo echo "<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>" "<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>"; ; echo echo "<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>" "<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>"; ; } } Copyright @ 2022 Oracle and/or its affiliates. 32
  • 50. Et pour les développeurs ? $session $session = = mysql_xdevapi mysql_xdevapi getSession getSession( ("mysqlx://fred:MyP@ssw0rd%@localhost" "mysqlx://fred:MyP@ssw0rd%@localhost") ); ; $schema $schema = = $session $session-> ->getSchema getSchema( ("docstore" "docstore") ); ; $collection $collection = = $schema $schema-> ->getCollection getCollection( ("restaurants" "restaurants") ); ; $results $results = = $collection $collection-> ->find find( ($search $search) )-> ->execute execute( () )-> ->fetchAll fetchAll( () ); ; ... ... foreach foreach ( ($results $results as as $doc $doc) ) { { echo echo "<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>" "<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>"; ; echo echo "<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>" "<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>"; ; } } Facile, en utilisant uniquement des opérations CRUD ! Copyright @ 2022 Oracle and/or its affiliates. 32
  • 51. Et pour les développeurs ? $session $session = = mysql_xdevapi mysql_xdevapi getSession getSession( ("mysqlx://fred:MyP@ssw0rd%@localhost" "mysqlx://fred:MyP@ssw0rd%@localhost") ); ; $schema $schema = = $session $session-> ->getSchema getSchema( ("docstore" "docstore") ); ; $collection $collection = = $schema $schema-> ->getCollection getCollection( ("restaurants" "restaurants") ); ; $results $results = = $collection $collection-> ->find find( ($search $search) )-> ->execute execute( () )-> ->fetchAll fetchAll( () ); ; ... ... foreach foreach ( ($results $results as as $doc $doc) ) { { echo echo "<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>" "<tr><td><a href='?id=${doc[_id]}'>${doc[name]}</a></td>"; ; echo echo "<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>" "<td>${doc[borough]}</td><td>${doc[cuisine]}</td></tr>"; ; } } Facile, en utilisant uniquement des opérations CRUD ! Pas une seule instruction SQL ! Copyright @ 2022 Oracle and/or its affiliates. 32
  • 52. En import import * *; ; class class Main Main { { public public static static void void main main( (String String args args[ [] ]) ) { { Session Session mySession mySession = = new new SessionFactory SessionFactory( () ) . .getSession getSession( ("mysqlx://localhost:33060/docstore?user=resto&password=Passw0rd!" "mysqlx://localhost:33060/docstore?user=resto&password=Passw0rd!") ); ; Schema Schema myDb myDb = = mySession mySession. .getSchema getSchema( ("docstore" "docstore") ); ; Collection Collection myColl myColl = = myDb myDb. .getCollection getCollection( ("restaurants" "restaurants") ); ; DocResult DocResult myDocs myDocs = = myColl myColl. .find find( ("name like :param" "name like :param") ). .limit limit( (1 1) ) . .bind bind( ("param" "param", , "Green%" "Green%") ). .execute execute( () ); ; System System. .out out. .println println( (myDocs myDocs. .fetchOne fetchOne( () )) ); ; mySession mySession. .close close( () ); ; } } } } Copyright @ 2022 Oracle and/or its affiliates. com com. .mysql mysql. .cj cj. .xdevapi xdevapi. . 33
  • 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
  • 55. collection collection. .modify modify( ('name = :name' 'name = :name') ) . .bind bind( ('name' 'name', , 'fred' 'fred') ) . .set set( ('age' 'age', , 43 43) ) . .sort sort( ('name ASC' 'name ASC') ) . .limit limit( (1 1) ) . .execute execute( () ) collection collection. .modify modify( ('name = :name' 'name = :name') ) . .bind bind( ('name' 'name', , 'fred' 'fred') ) . .patch patch( ({ { age age: : 43 43, , active active: : false false } }) ) . .sort sort( ('name DESC' 'name DESC') ) . .limit limit( (1 1) ) . .execute execute( () ) Opérations CRUD relatives aux collections Modi cation d'un document Copyright @ 2022 Oracle and/or its affiliates. 36
  • 56. Opérations CRUD relatives aux collections Suppression d'un document collection collection. .remove remove( ('name = :name' 'name = :name') ) . .bind bind( ('name' 'name', , 'fred' 'fred') ) . .sort sort( ('age ASC' 'age ASC') ) . .limit limit( (1 1) ) . .execute execute( () ) Copyright @ 2022 Oracle and/or its affiliates. 37
  • 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
  • 66. ACID - Transactions Copyright @ 2022 Oracle and/or its affiliates. 42
  • 67. ACID - Transactions Copyright @ 2022 Oracle and/or its affiliates. 43
  • 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
  • 79. vous pouvez combiner NoSQL & SQL Copyright @ 2022 Oracle and/or its affiliates. 52
  • 80. Aller plus loin ! Le meilleur des deux mondes: Copyright @ 2022 Oracle and/or its affiliates. 53
  • 81. Aller plus loin ! Le meilleur des deux mondes: Et le résultat en action: Copyright @ 2022 Oracle and/or its affiliates. 53
  • 82. Aller plus loin ! Le meilleur des deux mondes: Et le résultat en action: Copyright @ 2022 Oracle and/or its affiliates. 53
  • 83. Copyright @ 2022 Oracle and/or its affiliates. 54
  • 84. Conclusion Conclusion qu'est ce que j'y gagne ? qu'est ce que j'y gagne ? Copyright @ 2022 Oracle and/or its affiliates. 55
  • 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
  • 88. Merci ! Merci ! Copyright @ 2022 Oracle and/or its affiliates. 59