Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Qui suis-je ? Qui suis-je ? about.me/lefred about.me/lefred Copyright @ 2022 Oracle and/or its affiliates. 2

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

NoSQL Document Store Sans structure (schemaless) Copyright @ 2022 Oracle and/or its affiliates. 5

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

par les DBAs Percection des données Copyright @ 2022 Oracle and/or its affiliates. 6

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Il faut quand-même toujours réaliser des analyses SQL SQL SQL Copyright @ 2022 Oracle and/or its affiliates. 7

Slide 18

Slide 18 text

... mais...comment ? ? SQL SQL SQL Copyright @ 2022 Oracle and/or its affiliates. 8

Slide 19

Slide 19 text

En migrant les données (ETL) SQL SQL SQL ETL: Extraction-Transformation-Chargement Copyright @ 2022 Oracle and/or its affiliates. 9

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

RDBMS ou NoSQL ? Copyright @ 2022 Oracle and/or its affiliates. 11

Slide 22

Slide 22 text

RDBMS ou NoSQL ? Pourquoi pas les deux ? Copyright @ 2022 Oracle and/or its affiliates. 11

Slide 23

Slide 23 text

MySQL Document Store ! Où le SQL est optionnel ?! Copyright @ 2022 Oracle and/or its affiliates. 12

Slide 24

Slide 24 text

Le SQL est optionnel ?! Copyright @ 2022 Oracle and/or its affiliates. 13

Slide 25

Slide 25 text

Utilisation de MySQL Document Store ! SQL SQL SQL Copyright @ 2022 Oracle and/or its affiliates. 14

Slide 26

Slide 26 text

La Solution La Solution MySQL Document Store MySQL Document Store Copyright @ 2022 Oracle and/or its affiliates. 15

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Connecteurs compatibles avec X Protocol Copyright @ 2022 Oracle and/or its affiliates. 17

Slide 29

Slide 29 text

Installation Installation MySQL Document Store MySQL Document Store Copyright @ 2022 Oracle and/or its affiliates. 18

Slide 30

Slide 30 text

Installation de MySQL Document Store installer MySQL 8.0 Copyright @ 2022 Oracle and/or its affiliates. 19

Slide 31

Slide 31 text

Installation de MySQL Document Store installer MySQL 8.0 installer MySQL Shell Copyright @ 2022 Oracle and/or its affiliates. 19

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

Copyright @ 2022 Oracle and/or its affiliates. 22

Slide 39

Slide 39 text

Copyright @ 2022 Oracle and/or its affiliates. 23

Slide 40

Slide 40 text

Copyright @ 2022 Oracle and/or its affiliates. 24

Slide 41

Slide 41 text

Copyright @ 2022 Oracle and/or its affiliates. 25

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

Copyright @ 2022 Oracle and/or its affiliates. 27

Slide 44

Slide 44 text

Quelques autres examples Copyright @ 2022 Oracle and/or its affiliates. 28

Slide 45

Slide 45 text

Ajoutons un critère de sélection Copyright @ 2022 Oracle and/or its affiliates. 29

Slide 46

Slide 46 text

Syntaxe légèrment di érente de celle de MongoDB Copyright @ 2022 Oracle and/or its affiliates. 30

Slide 47

Slide 47 text

Syntaxe légèrment di érente de celle de MongoDB Copyright @ 2022 Oracle and/or its affiliates. 30

Slide 48

Slide 48 text

Et pour les développeurs ? Copyright @ 2022 Oracle and/or its affiliates. 31

Slide 49

Slide 49 text

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 "${doc[name]}" "${doc[name]}"; ; echo echo "${doc[borough]}${doc[cuisine]}" "${doc[borough]}${doc[cuisine]}"; ; } } Copyright @ 2022 Oracle and/or its affiliates. 32

Slide 50

Slide 50 text

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 "${doc[name]}" "${doc[name]}"; ; echo echo "${doc[borough]}${doc[cuisine]}" "${doc[borough]}${doc[cuisine]}"; ; } } Facile, en utilisant uniquement des opérations CRUD ! Copyright @ 2022 Oracle and/or its affiliates. 32

Slide 51

Slide 51 text

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 "${doc[name]}" "${doc[name]}"; ; echo echo "${doc[borough]}${doc[cuisine]}" "${doc[borough]}${doc[cuisine]}"; ; } } Facile, en utilisant uniquement des opérations CRUD ! Pas une seule instruction SQL ! Copyright @ 2022 Oracle and/or its affiliates. 32

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

MySQL Document Store Objects Summary Copyright @ 2022 Oracle and/or its affiliates. 38

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

ACID - Transactions Copyright @ 2022 Oracle and/or its affiliates. 42

Slide 67

Slide 67 text

ACID - Transactions Copyright @ 2022 Oracle and/or its affiliates. 43

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

Traiter le NoSQL comme du SQL - agrégation Copyright @ 2022 Oracle and/or its affiliates. 46

Slide 71

Slide 71 text

Traiter le NoSQL comme du SQL - agrégation Copyright @ 2022 Oracle and/or its affiliates. 47

Slide 72

Slide 72 text

Traiter le NoSQL comme du SQL - agrégation Copyright @ 2022 Oracle and/or its affiliates. 48

Slide 73

Slide 73 text

Traiter le NoSQL comme du SQL - agrégation Copyright @ 2022 Oracle and/or its affiliates. 49

Slide 74

Slide 74 text

NoSQL ou SQL Vous avez la possibilité d'écrire un code propre et soigné : Copyright @ 2022 Oracle and/or its affiliates. 50

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

Tout cela dans la même session MySQL X ! Copyright @ 2022 Oracle and/or its affiliates. 51

Slide 79

Slide 79 text

vous pouvez combiner NoSQL & SQL Copyright @ 2022 Oracle and/or its affiliates. 52

Slide 80

Slide 80 text

Aller plus loin ! Le meilleur des deux mondes: Copyright @ 2022 Oracle and/or its affiliates. 53

Slide 81

Slide 81 text

Aller plus loin ! Le meilleur des deux mondes: Et le résultat en action: Copyright @ 2022 Oracle and/or its affiliates. 53

Slide 82

Slide 82 text

Aller plus loin ! Le meilleur des deux mondes: Et le résultat en action: Copyright @ 2022 Oracle and/or its affiliates. 53

Slide 83

Slide 83 text

Copyright @ 2022 Oracle and/or its affiliates. 54

Slide 84

Slide 84 text

Conclusion Conclusion qu'est ce que j'y gagne ? qu'est ce que j'y gagne ? Copyright @ 2022 Oracle and/or its affiliates. 55

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

MySQL 8.0 DBA Certi cation Copyright @ 2022 Oracle and/or its affiliates. 57

Slide 87

Slide 87 text

MySQL 8.0 Developer Certi cation Copyright @ 2022 Oracle and/or its affiliates. 58

Slide 88

Slide 88 text

Merci ! Merci ! Copyright @ 2022 Oracle and/or its affiliates. 59