Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

lefred
November 16, 2022

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

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...

lefred

November 16, 2022
Tweet

More Decks by lefred

Other Decks in Programming

Transcript

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  38. Copyright @ 2022 Oracle and/or its affiliates.
    22

    View Slide

  39. Copyright @ 2022 Oracle and/or its affiliates.
    23

    View Slide

  40. Copyright @ 2022 Oracle and/or its affiliates.
    24

    View Slide

  41. Copyright @ 2022 Oracle and/or its affiliates.
    25

    View Slide

  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

    View Slide

  43. Copyright @ 2022 Oracle and/or its affiliates.
    27

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  49. Et pour les développeurs ?
    $session
    $session =
    = mysql_xdevapi
    mysql_xdevapi\
    \getSession
    getSession(
    ("mysqlx://fred:[email protected]%@localhost"
    "mysqlx://fred:[email protected]%@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

    View Slide

  50. Et pour les développeurs ?
    $session
    $session =
    = mysql_xdevapi
    mysql_xdevapi\
    \getSession
    getSession(
    ("mysqlx://fred:[email protected]%@localhost"
    "mysqlx://fred:[email protected]%@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

    View Slide

  51. Et pour les développeurs ?
    $session
    $session =
    = mysql_xdevapi
    mysql_xdevapi\
    \getSession
    getSession(
    ("mysqlx://fred:[email protected]%@localhost"
    "mysqlx://fred:[email protected]%@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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  83. Copyright @ 2022 Oracle and/or its affiliates.
    54

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide