SlideShare a Scribd company logo
1 of 120
Download to read offline
1 / 120
2 / 120
MySQL 8.0
a Document Store with all the benefits of a transactional RDBMS
 
 
Frédéric Descamps - MySQL Community Manager - Oracle
3 / 120
Save the date !
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
4 / 120
 
Safe Harbor Statement
The following is intended to outline our general product direction. It is intended for information purpose only, and may not
be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be
relied up in making purchasing decisions. The development, release and timing of any features or functionality described
for Oracle´s product remains at the sole discretion of Oracle.
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
5 / 120
about me - http://about.me/lefred
Who am I ?
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
6 / 120
Frédéric Descamps
@lefred
MySQL Evangelist
Hacking MySQL since 3.23
devops believer
living in Belgium 🇧🇪
http://lefred.be
 
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
7 / 120
RDBMS & MySQL
Relational Databases
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
8 / 120
Relational Databases
Data Integrity
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
9 / 120
Relational Databases
Data Integrity
normalization
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
10 / 120
Relational Databases
Data Integrity
normalization
constraints (foreign keys, ...)
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
11 / 120
Relational Databases
Data Integrity
normalization
constraints (foreign keys, ...)
Atomicity, Consistency, Isolation, Durability
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
12 / 120
Relational Databases
Data Integrity
normalization
constraints (foreign keys, ...)
Atomicity, Consistency, Isolation, Durability
ACID compliant
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
13 / 120
Relational Databases
Data Integrity
normalization
constraints (foreign keys, ...)
Atomicity, Consistency, Isolation, Durability
ACID compliant
transactions
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
14 / 120
Relational Databases
Data Integrity
normalization
constraints (foreign keys, ...)
Atomicity, Consistency, Isolation, Durability
ACID compliant
transactions
SQL
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
15 / 120
Relational Databases
Data Integrity
normalization
constraints (foreign keys, ...)
Atomicity, Consistency, Isolation, Durability
ACID compliant
transactions
SQL
powerfull query language
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
16 / 120
NoSQL & MySQL
NoSQL Databases
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
17 / 120
NoSQL or Document Store
Schemaless
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
18 / 120
NoSQL or Document Store
Schemaless
no schema design, no normalization, no foreign keys, no data types, ...
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
19 / 120
NoSQL or Document Store
Schemaless
no schema design, no normalization, no foreign keys, no data types, ...
very quick initial development
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
20 / 120
NoSQL or Document Store
Schemaless
no schema design, no normalization, no foreign keys, no data types, ...
very quick initial development
Flexible data structure
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
21 / 120
NoSQL or Document Store
Schemaless
no schema design, no normalization, no foreign keys, no data types, ...
very quick initial development
Flexible data structure
embedded arrays or objects
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
22 / 120
NoSQL or Document Store
Schemaless
no schema design, no normalization, no foreign keys, no data types, ...
very quick initial development
Flexible data structure
embedded arrays or objects
valid solution when natural data can´t be modelized optimaly into a relational model
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
23 / 120
NoSQL or Document Store
Schemaless
no schema design, no normalization, no foreign keys, no data types, ...
very quick initial development
Flexible data structure
embedded arrays or objects
valid solution when natural data can´t be modelized optimaly into a relational model
objects persistance without the use of any ORM - mapping oobject-oriented
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
24 / 120
NoSQL or Document Store
Schemaless
no schema design, no normalization, no foreign keys, no data types, ...
very quick initial development
Flexible data structure
embedded arrays or objects
valid solution when natural data can´t be modelized optimaly into a relational model
objects persistance without the use of any ORM - mapping oobject-oriented
JSON
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
25 / 120
NoSQL or Document Store
Schemaless
no schema design, no normalization, no foreign keys, no data types, ...
very quick initial development
Flexible data structure
embedded arrays or objects
valid solution when natural data can´t be modelized optimaly into a relational model
objects persistance without the use of any ORM - mapping oobject-oriented
JSON
close to frontend
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
26 / 120
NoSQL or Document Store
Schemaless
no schema design, no normalization, no foreign keys, no data types, ...
very quick initial development
Flexible data structure
embedded arrays or objects
valid solution when natural data can´t be modelized optimaly into a relational model
objects persistance without the use of any ORM - mapping oobject-oriented
JSON
close to frontend
native in JS
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
27 / 120
NoSQL or Document Store
Schemaless
no schema design, no normalization, no foreign keys, no data types, ...
very quick initial development
Flexible data structure
embedded arrays or objects
valid solution when natural data can´t be modelized optimaly into a relational model
objects persistance without the use of any ORM - mapping oobject-oriented
JSON
close to frontend
native in JS
easy to learn
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
28 / 120
How DBAs see data
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
29 / 120
How DBAs see data How Developers see data
{
"GNP" : 249704,
"Name" : "Belgium",
"government" : {
"GovernmentForm" :
"Constitutional Monarchy, Federation",
"HeadOfState" : "Philippe I"
},
"_id" : "BEL",
"IndepYear" : 1830,
"demographics" : {
"Population" : 10239000,
"LifeExpectancy" : 77.8000030517578
},
"geography" : {
"Region" : "Western Europe",
"SurfaceArea" : 30518,
"Continent" : "Europe"
}
}
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
30 / 120
What if there was a way to provide both SQL and NoSQL on one
stable platform that has proven stability on well know
technology with a large Community and a diverse ecosystem ?
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
31 / 120
DBMS or NoSQL ?
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
32 / 120
DBMS or NoSQL ?
Why not both ?
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
33 / 120
The MySQL Document Store !
SQL is now optional !
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
34 / 120
Developers:
[x] schemaless
[x] rapid prototying/simpler APIs
[x] document model
[x] transactions
Operations:
[x] performance management/visibility
[x] robust replication, backup, restore
[x] comprehensive tooling ecosystem
[x] simpler application schema upgrades
Business Owner:
[x] don't lose my data == ACID trx
[x] capture all my data = extensible/schemaless
[x] product on schedule/time to market = rapid
developement
A solution for all
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
35 / 120
MySQL Document Store
the Solution
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
36 / 120
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
37 / 120
Built on the
MySQL JSON
Data type and
Proven MySQL
Server
Technology
Provides a schema flexible JSON Document Store
No SQL required
No need to define all possible attributes, tables, etc.
Uses new X DevAPI
Can leverage generated column to extract JSON values into materialized columns
that can be indexed for fast SQL searches.
Document can be ~1GB
It's a column in a row of a table
It cannot exceed max_allowed_packet
Allows use of modern programming styles
No more embedded strings of SQL in your code
Easy to read
Also works with relational Tables
Proven MySQL Technology
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
38 / 120
X DevAPI Connectors for
C++, Java, .Net, Node.js, Python, PHP
working with Communities to help them supporting it too
New MySQL Shell
Command Completion
Python, JavaScrips & SQL modes
Admin functions
New Util object
A new high-level session concept that can scale from single MySQL Server to
a multiple server environment
Non-blocking, asynchronous calls follow common language patterns
Supports CRUD operations
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
39 / 120
Starting using MySQL DS in few minutes
 
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
40 / 120
MySQL Shell Info
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
41 / 120
Migration from MongoDB to MySQL DS
For this example, I will use the well known restaurants collection:
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
42 / 120
Migration from MongoDB to MySQL DS
For this example, I will use the well known restaurants collection:
We need to dump the data to a file and we will use MySQL Shell with the Python interpreter to load the data.
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
43 / 120
Migration from MongoDB to MySQL DS
For this example, I will use the well known restaurants collection:
We need to dump the data to a file and we will use MySQL Shell with the Python interpreter to load the data.
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
44 / 120
Dump and load using MySQL Shell & Python
this example is inspired by @datacharmer's work: https://www.slideshare.net/datacharmer/mysql-documentstore
$ mongo --quiet --eval 'DBQuery.shellBatchSize=30000;
db.restaurants. nd().shellPrint()' 
| perl -pe 's/(?:ObjectId|ISODate)(("[^"]+"))/ $1/g' > all_recs.json
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
45 / 120
Dump and load using MySQL Shell & Python
this example is inspired by @datacharmer's work: https://www.slideshare.net/datacharmer/mysql-documentstore
$ mongo --quiet --eval 'DBQuery.shellBatchSize=30000;
db.restaurants. nd().shellPrint()' 
| perl -pe 's/(?:ObjectId|ISODate)(("[^"]+"))/ $1/g' > all_recs.json
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
46 / 120
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
47 / 120
Let´s query
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
48 / 120
Let´s query
That´s too much records to show it here... let´s limit it
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
49 / 120
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
50 / 120
Some more examples
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
51 / 120
Some more examples
Let´s add a selection criteria:
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
52 / 120
Using IN...
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
53 / 120
Syntax slightly different than MongoDB
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
54 / 120
Syntax slightly different than MongoDB
> db.restaurants. nd({"cuisine": "French",
"borough": { $not: /^Manhattan/} },
{"_id":0, "name": 1,"cuisine": 1, "borough": 1}).limit(2)
{ "borough" : "Queens", "cuisine" : "French",
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
55 / 120
CRUD operations
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
56 / 120
CRUD operations for collections
Add a document
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
57 / 120
CRUD operations for collections
Modify a document
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
58 / 120
CRUD operations for collections
Remove a document
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
59 / 120
MySQL Document Store Objects Summary
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
60 / 120
Document Store Full ACID !
It relies on the proven MySQL InnoDB´s strength & robustness:
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
61 / 120
Document Store Full ACID !
It relies on the proven MySQL InnoDB´s strength & robustness:
innodb_ ush_log_at_trx_commit = 1
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
62 / 120
Document Store Full ACID !
It relies on the proven MySQL InnoDB´s strength & robustness:
innodb_ ush_log_at_trx_commit = 1
innodb_doublewrite = ON
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
63 / 120
Document Store Full ACID !
It relies on the proven MySQL InnoDB´s strength & robustness:
innodb_ ush_log_at_trx_commit = 1
innodb_doublewrite = ON
sync_binlog = 1
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
64 / 120
Document Store Full ACID !
It relies on the proven MySQL InnoDB´s strength & robustness:
innodb_ ush_log_at_trx_commit = 1
innodb_doublewrite = ON
sync_binlog = 1
transaction_isolation = REPEATABLE-READ|READ-COMMITTED|...
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
65 / 120
Document Store Full ACID !
It relies on the proven MySQL InnoDB´s strength & robustness:
innodb_ ush_log_at_trx_commit = 1
innodb_doublewrite = ON
sync_binlog = 1
transaction_isolation = REPEATABLE-READ|READ-COMMITTED|...
We do care about your data !
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
66 / 120
Document Store Full ACID !
MySQL Document Store supports transactions
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
67 / 120
Document Store Full ACID !
MySQL Document Store supports transactions
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
68 / 120
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
69 / 120
what about my old SQL ?
The hidden part of the iceberg
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
70 / 120
JSON datatype is behind the scene
native datatype (since 5.7.8)
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
71 / 120
JSON datatype is behind the scene
native datatype (since 5.7.8)
JSON values are stored in MySQL tables using UTF8MB4
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
72 / 120
JSON datatype is behind the scene
native datatype (since 5.7.8)
JSON values are stored in MySQL tables using UTF8MB4
Conversion from "native" SQL types to JSON values
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
73 / 120
JSON datatype is behind the scene
native datatype (since 5.7.8)
JSON values are stored in MySQL tables using UTF8MB4
Conversion from "native" SQL types to JSON values
JSON manipulation functions (JSON_EXTRACT, JSON_KEYS, JSON_SEARCH, JSON_TABLES, ...)
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
74 / 120
JSON datatype is behind the scene
native datatype (since 5.7.8)
JSON values are stored in MySQL tables using UTF8MB4
Conversion from "native" SQL types to JSON values
JSON manipulation functions (JSON_EXTRACT, JSON_KEYS, JSON_SEARCH, JSON_TABLES, ...)
Generated/virtual columns
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
75 / 120
JSON datatype is behind the scene
native datatype (since 5.7.8)
JSON values are stored in MySQL tables using UTF8MB4
Conversion from "native" SQL types to JSON values
JSON manipulation functions (JSON_EXTRACT, JSON_KEYS, JSON_SEARCH, JSON_TABLES, ...)
Generated/virtual columns
Indexing JSON data
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
76 / 120
JSON datatype is behind the scene
native datatype (since 5.7.8)
JSON values are stored in MySQL tables using UTF8MB4
Conversion from "native" SQL types to JSON values
JSON manipulation functions (JSON_EXTRACT, JSON_KEYS, JSON_SEARCH, JSON_TABLES, ...)
Generated/virtual columns
Indexing JSON data
Foreign Keys to JSON data
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
77 / 120
JSON datatype is behind the scene
native datatype (since 5.7.8)
JSON values are stored in MySQL tables using UTF8MB4
Conversion from "native" SQL types to JSON values
JSON manipulation functions (JSON_EXTRACT, JSON_KEYS, JSON_SEARCH, JSON_TABLES, ...)
Generated/virtual columns
Indexing JSON data
Foreign Keys to JSON data
SQL Views to JSON data
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
78 / 120
How does the MySQL Document Store work ?
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
79 / 120
What does a collection look like on the server ?
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
80 / 120
_id Every document has a unique identifier called the document ID, which can be thought
of as the equivalent of a table´s primary key. The document ID value can be manually
assigned when adding a document. If no value is assigned, a document ID is
generated and assigned to the document automatically !
Use getDocumentId() or getDocumentIds() to get _ids(s)
   
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
81 / 120
Mapping to SQL examples
createCollection('mycollection')
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
82 / 120
Mapping to SQL examples
createCollection('mycollection')
CREATE TABLE `test`.`mycoll` (
doc JSON,
_id VARCHAR(32)
GENERATED ALWAYS AS (doc->>'$._id') STORED
PRIMARY KEY
) CHARSET utf8mb4;
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
83 / 120
Mapping to SQL examples
createCollection('mycollection')
CREATE TABLE `test`.`mycoll` (
doc JSON,
_id VARCHAR(32)
GENERATED ALWAYS AS (doc->>'$._id') STORED
PRIMARY KEY
) CHARSET utf8mb4;
mycollection.add({'test': 1234})
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
84 / 120
Mapping to SQL examples
createCollection('mycollection')
CREATE TABLE `test`.`mycoll` (
doc JSON,
_id VARCHAR(32)
GENERATED ALWAYS AS (doc->>'$._id') STORED
PRIMARY KEY
) CHARSET utf8mb4;
mycollection.add({'test': 1234})
INSERT INTO `test`.`mycoll` (doc)
VALUES (
JSON_OBJECT('_id','663807fe367ee6114e0e5458bdac28bf',
'test',1234)
);
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
85 / 120
Mapping to SQL examples (2)
mycollection.find("test > 100")
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
86 / 120
Mapping to SQL examples (2)
mycollection.find("test > 100")
SELECT doc
FROM `test`.`mycoll`
WHERE (JSON_EXTRACT(doc,'$.test') > 100);
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
87 / 120
SQL and JSON Example
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
88 / 120
SQL and JSON Example
same as:
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
89 / 120
SQL and JSON Example
same as:
we can use it in SQL:
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
90 / 120
Indexes in Document Store
It's also possible to create indexes without using SQL syntax:
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
91 / 120
Indexes in Document Store
It's also possible to create indexes without using SQL syntax:
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
92 / 120
SQL and JSON Example (2): validation
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
93 / 120
SQL and JSON Example (2): validation
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
94 / 120
SQL and JSON Example (2): validation
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
95 / 120
SQL and JSON Example (3): explain
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
96 / 120
SQL and JSON Example (3): explain
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
97 / 120
SQL and JSON Example (4): add index
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
98 / 120
SQL and JSON Example (4): add index
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
99 / 120
SQL and JSON Example (5): arrays
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
100 / 120
SQL and JSON Example (5): arrays
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
101 / 120
SQL and JSON Example (5): arrays
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
102 / 120
SQL and JSON Example (5): arrays
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
103 / 120
NoSQL as SQL
JSON_TABLE
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
104 / 120
NoSQL as SQL (2)
JSON_TABLE
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
105 / 120
NoSQL as SQL - aggregation
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
106 / 120
NoSQL as SQL - aggregation (2)
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
107 / 120
SQL and NoSQL - JOINS
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
108 / 120
SQL and NoSQL - JOINS
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
109 / 120
SQL and NoSQL - JOINS
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
110 / 120
SQL and NoSQL - JOINS (2)
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
111 / 120
SQL and NoSQL - JOINS (2)
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
112 / 120
SQL and NoSQL - JOINS (2)
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
113 / 120
SQL and NoSQL - and back to JSON Document
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
114 / 120
NoSQL or SQL
JS> session.sql("select doc->>'$.name', doc->>'$.cuisine'
from restaurants where doc->>'$.cuisine'='Italian' limit 2")
+----------------------------+-------------------+
| doc->>'$.name' | doc->>'$.cuisine' |
+----------------------------+-------------------+
| Philadelhia Grille Express | Italian |
| Isle Of Capri Resturant | Italian |
+----------------------------+-------------------+
2 rows in set (0.0287 sec)
JS> db.restaurants. nd("cuisine='Italian'"). elds('name','cuisine').limit(2)
[
{
"cuisine": "Italian",
"name": "Philadelhia Grille Express"
},
{
"cuisine": "Italian",
"name": "Isle Of Capri Resturant"
}
]
2 documents in set (0.0015 sec)
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
115 / 120
what do I gain ?
Conclusion
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
116 / 120
schemaless
flexible data structure
easy to start (CRUD)
Conclusion
This is the best of the two worlds in one product !
Data integrity
ACID Compliant
Transactions
SQL
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
117 / 120
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
118 / 120
http://lefred.be/content/top-10-reasons-for-nosql-with-mysql/
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
119 / 120
Thank you !
Any Questions ?
share your 💕 for MySQL on social media using @mysql #DataOpsBarcelona
Copyright @ 2018 Oracle and/or its affiliates. All rights reserved.
120 / 120

More Related Content

What's hot

Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #5: Oracle’s InnoDB Cluster
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #5: Oracle’s InnoDB ClusterWebinar Slides: MySQL HA/DR/Geo-Scale - High Noon #5: Oracle’s InnoDB Cluster
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #5: Oracle’s InnoDB Cluster
Continuent
 

What's hot (20)

Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB ClusterIntroduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB Cluster
 
MySQL InnoDB Cluster and Group Replication in a nutshell hands-on tutorial
MySQL InnoDB Cluster and Group Replication in a nutshell  hands-on tutorialMySQL InnoDB Cluster and Group Replication in a nutshell  hands-on tutorial
MySQL InnoDB Cluster and Group Replication in a nutshell hands-on tutorial
 
MySQL Innovation Day Chicago - MySQL HA So Easy : That's insane !!
MySQL Innovation Day Chicago  - MySQL HA So Easy : That's insane !!MySQL Innovation Day Chicago  - MySQL HA So Easy : That's insane !!
MySQL Innovation Day Chicago - MySQL HA So Easy : That's insane !!
 
Oracle Open World 2018 / Code One : MySQL 8.0 High Availability with MySQL I...
Oracle Open World 2018 / Code One  : MySQL 8.0 High Availability with MySQL I...Oracle Open World 2018 / Code One  : MySQL 8.0 High Availability with MySQL I...
Oracle Open World 2018 / Code One : MySQL 8.0 High Availability with MySQL I...
 
Introduction to MySQL Document Store
Introduction to MySQL Document StoreIntroduction to MySQL Document Store
Introduction to MySQL Document Store
 
MySQL InnoDB Cluster and Group Replication in a Nutshell
MySQL InnoDB Cluster and Group Replication in a NutshellMySQL InnoDB Cluster and Group Replication in a Nutshell
MySQL InnoDB Cluster and Group Replication in a Nutshell
 
Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB ClusterIntroduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB Cluster
 
MySQL Innovation: from 5.7 to 8.0
MySQL Innovation:  from 5.7 to 8.0MySQL Innovation:  from 5.7 to 8.0
MySQL Innovation: from 5.7 to 8.0
 
Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB ClusterIntroduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB Cluster
 
MySQL Community Meetup in China : Innovation driven by the Community
MySQL Community Meetup in China : Innovation driven by the CommunityMySQL Community Meetup in China : Innovation driven by the Community
MySQL Community Meetup in China : Innovation driven by the Community
 
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...
MySQL innodb cluster and Group Replication in a nutshell - hands-on tutorial ...
 
Swedish MySQL User Group - MySQL InnoDB Cluster
Swedish MySQL User Group - MySQL InnoDB ClusterSwedish MySQL User Group - MySQL InnoDB Cluster
Swedish MySQL User Group - MySQL InnoDB Cluster
 
Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB ClusterIntroduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB Cluster
 
Percona Live Europe 2018 MySQL Group Replication... the magic explained
Percona Live Europe 2018  MySQL Group Replication... the magic explainedPercona Live Europe 2018  MySQL Group Replication... the magic explained
Percona Live Europe 2018 MySQL Group Replication... the magic explained
 
High Availability in MySQL 8 using InnoDB Cluster
High Availability in MySQL 8 using InnoDB ClusterHigh Availability in MySQL 8 using InnoDB Cluster
High Availability in MySQL 8 using InnoDB Cluster
 
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
Inexpensive Datamasking for MySQL with ProxySQL - data anonymization for deve...
 
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #5: Oracle’s InnoDB Cluster
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #5: Oracle’s InnoDB ClusterWebinar Slides: MySQL HA/DR/Geo-Scale - High Noon #5: Oracle’s InnoDB Cluster
Webinar Slides: MySQL HA/DR/Geo-Scale - High Noon #5: Oracle’s InnoDB Cluster
 
InnoDB Tablespace Encryption
InnoDB Tablespace Encryption InnoDB Tablespace Encryption
InnoDB Tablespace Encryption
 
replic8 - Replication in MySQL 8
replic8 - Replication in MySQL 8replic8 - Replication in MySQL 8
replic8 - Replication in MySQL 8
 
MySQL 8.0 InnoDB Cluster - Easiest Tutorial
MySQL 8.0 InnoDB Cluster - Easiest TutorialMySQL 8.0 InnoDB Cluster - Easiest Tutorial
MySQL 8.0 InnoDB Cluster - Easiest Tutorial
 

Similar to DataOps barcelona - MySQL 8.0 document store: NoSQL with all the benefits of a transactional RDBMS

MySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document StoreMySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document Store
Olivier DASINI
 

Similar to DataOps barcelona - MySQL 8.0 document store: NoSQL with all the benefits of a transactional RDBMS (20)

Oracle Code Roma: NoSQL + SQL = MySQL
Oracle Code Roma:   NoSQL + SQL = MySQLOracle Code Roma:   NoSQL + SQL = MySQL
Oracle Code Roma: NoSQL + SQL = MySQL
 
MySQL Document Store (Oracle Code Warsaw 2018)
MySQL Document Store (Oracle Code Warsaw 2018)MySQL Document Store (Oracle Code Warsaw 2018)
MySQL Document Store (Oracle Code Warsaw 2018)
 
Looking Inside the MySQL 8.0 Document Store
Looking Inside the MySQL 8.0 Document StoreLooking Inside the MySQL 8.0 Document Store
Looking Inside the MySQL 8.0 Document Store
 
MySQL Document Store - A Document Store with all the benefts of a Transactona...
MySQL Document Store - A Document Store with all the benefts of a Transactona...MySQL Document Store - A Document Store with all the benefts of a Transactona...
MySQL Document Store - A Document Store with all the benefts of a Transactona...
 
Oracle Code Event - MySQL JSON Document Store
Oracle Code Event - MySQL JSON Document StoreOracle Code Event - MySQL JSON Document Store
Oracle Code Event - MySQL JSON Document Store
 
MySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document StoreMySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document Store
 
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...MySQL JSON Document Store - A Document Store with all the benefits of a Trans...
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...
 
MySQL 8.0 Document Store - Discovery of a New World
MySQL 8.0 Document Store - Discovery of a New WorldMySQL 8.0 Document Store - Discovery of a New World
MySQL 8.0 Document Store - Discovery of a New World
 
OpenExpo Virtual Experience 2020: MySQL 8.0 Document Store - Discovery of a n...
OpenExpo Virtual Experience 2020: MySQL 8.0 Document Store - Discovery of a n...OpenExpo Virtual Experience 2020: MySQL 8.0 Document Store - Discovery of a n...
OpenExpo Virtual Experience 2020: MySQL 8.0 Document Store - Discovery of a n...
 
Oracle Open World Middle East - MySQL 8 a Giant Leap for SQL
Oracle Open World Middle East - MySQL 8 a Giant Leap for SQLOracle Open World Middle East - MySQL 8 a Giant Leap for SQL
Oracle Open World Middle East - MySQL 8 a Giant Leap for SQL
 
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
 
DOAG Big Data Days 2017 - Cloud Journey
DOAG Big Data Days 2017 - Cloud JourneyDOAG Big Data Days 2017 - Cloud Journey
DOAG Big Data Days 2017 - Cloud Journey
 
Connector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document Store
Connector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document StoreConnector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document Store
Connector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document Store
 
Big data oracle_introduccion
Big data oracle_introduccionBig data oracle_introduccion
Big data oracle_introduccion
 
MySQL Connector/Node.js and the X DevAPI
MySQL Connector/Node.js and the X DevAPIMySQL Connector/Node.js and the X DevAPI
MySQL Connector/Node.js and the X DevAPI
 
MySQL 8.0 - What's New ?
MySQL 8.0 - What's New ?MySQL 8.0 - What's New ?
MySQL 8.0 - What's New ?
 
MySQL 8.0 Introduction to NoSQL + SQL
MySQL 8.0 Introduction to NoSQL + SQLMySQL 8.0 Introduction to NoSQL + SQL
MySQL 8.0 Introduction to NoSQL + SQL
 
How Partners Can Tap into a New Revenue Stream w/MySQL EE
How Partners Can Tap into a New Revenue Stream w/MySQL EEHow Partners Can Tap into a New Revenue Stream w/MySQL EE
How Partners Can Tap into a New Revenue Stream w/MySQL EE
 
Node.js and the MySQL Document Store
Node.js and the MySQL Document StoreNode.js and the MySQL Document Store
Node.js and the MySQL Document Store
 
MySQL 8.0, what's new ? - Forum PHP 2018
MySQL 8.0, what's new ? - Forum PHP 2018MySQL 8.0, what's new ? - Forum PHP 2018
MySQL 8.0, what's new ? - Forum PHP 2018
 

More from Frederic Descamps

More from Frederic Descamps (20)

MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...
MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...
MySQL Innovation & Cloud Day - Document Store avec MySQL HeatWave Database Se...
 
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
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 

DataOps barcelona - MySQL 8.0 document store: NoSQL with all the benefits of a transactional RDBMS

  • 3. MySQL 8.0 a Document Store with all the benefits of a transactional RDBMS     Frédéric Descamps - MySQL Community Manager - Oracle 3 / 120
  • 4. Save the date ! Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 4 / 120
  • 5.   Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purpose only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied up in making purchasing decisions. The development, release and timing of any features or functionality described for Oracle´s product remains at the sole discretion of Oracle. Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 5 / 120
  • 6. about me - http://about.me/lefred Who am I ? Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 6 / 120
  • 7. Frédéric Descamps @lefred MySQL Evangelist Hacking MySQL since 3.23 devops believer living in Belgium 🇧🇪 http://lefred.be   Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 7 / 120
  • 8. RDBMS & MySQL Relational Databases Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 8 / 120
  • 9. Relational Databases Data Integrity Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 9 / 120
  • 10. Relational Databases Data Integrity normalization Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 10 / 120
  • 11. Relational Databases Data Integrity normalization constraints (foreign keys, ...) Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 11 / 120
  • 12. Relational Databases Data Integrity normalization constraints (foreign keys, ...) Atomicity, Consistency, Isolation, Durability Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 12 / 120
  • 13. Relational Databases Data Integrity normalization constraints (foreign keys, ...) Atomicity, Consistency, Isolation, Durability ACID compliant Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 13 / 120
  • 14. Relational Databases Data Integrity normalization constraints (foreign keys, ...) Atomicity, Consistency, Isolation, Durability ACID compliant transactions Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 14 / 120
  • 15. Relational Databases Data Integrity normalization constraints (foreign keys, ...) Atomicity, Consistency, Isolation, Durability ACID compliant transactions SQL Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 15 / 120
  • 16. Relational Databases Data Integrity normalization constraints (foreign keys, ...) Atomicity, Consistency, Isolation, Durability ACID compliant transactions SQL powerfull query language Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 16 / 120
  • 17. NoSQL & MySQL NoSQL Databases Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 17 / 120
  • 18. NoSQL or Document Store Schemaless Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 18 / 120
  • 19. NoSQL or Document Store Schemaless no schema design, no normalization, no foreign keys, no data types, ... Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 19 / 120
  • 20. NoSQL or Document Store Schemaless no schema design, no normalization, no foreign keys, no data types, ... very quick initial development Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 20 / 120
  • 21. NoSQL or Document Store Schemaless no schema design, no normalization, no foreign keys, no data types, ... very quick initial development Flexible data structure Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 21 / 120
  • 22. NoSQL or Document Store Schemaless no schema design, no normalization, no foreign keys, no data types, ... very quick initial development Flexible data structure embedded arrays or objects Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 22 / 120
  • 23. NoSQL or Document Store Schemaless no schema design, no normalization, no foreign keys, no data types, ... very quick initial development Flexible data structure embedded arrays or objects valid solution when natural data can´t be modelized optimaly into a relational model Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 23 / 120
  • 24. NoSQL or Document Store Schemaless no schema design, no normalization, no foreign keys, no data types, ... very quick initial development Flexible data structure embedded arrays or objects valid solution when natural data can´t be modelized optimaly into a relational model objects persistance without the use of any ORM - mapping oobject-oriented Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 24 / 120
  • 25. NoSQL or Document Store Schemaless no schema design, no normalization, no foreign keys, no data types, ... very quick initial development Flexible data structure embedded arrays or objects valid solution when natural data can´t be modelized optimaly into a relational model objects persistance without the use of any ORM - mapping oobject-oriented JSON Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 25 / 120
  • 26. NoSQL or Document Store Schemaless no schema design, no normalization, no foreign keys, no data types, ... very quick initial development Flexible data structure embedded arrays or objects valid solution when natural data can´t be modelized optimaly into a relational model objects persistance without the use of any ORM - mapping oobject-oriented JSON close to frontend Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 26 / 120
  • 27. NoSQL or Document Store Schemaless no schema design, no normalization, no foreign keys, no data types, ... very quick initial development Flexible data structure embedded arrays or objects valid solution when natural data can´t be modelized optimaly into a relational model objects persistance without the use of any ORM - mapping oobject-oriented JSON close to frontend native in JS Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 27 / 120
  • 28. NoSQL or Document Store Schemaless no schema design, no normalization, no foreign keys, no data types, ... very quick initial development Flexible data structure embedded arrays or objects valid solution when natural data can´t be modelized optimaly into a relational model objects persistance without the use of any ORM - mapping oobject-oriented JSON close to frontend native in JS easy to learn Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 28 / 120
  • 29. How DBAs see data Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 29 / 120
  • 30. How DBAs see data How Developers see data { "GNP" : 249704, "Name" : "Belgium", "government" : { "GovernmentForm" : "Constitutional Monarchy, Federation", "HeadOfState" : "Philippe I" }, "_id" : "BEL", "IndepYear" : 1830, "demographics" : { "Population" : 10239000, "LifeExpectancy" : 77.8000030517578 }, "geography" : { "Region" : "Western Europe", "SurfaceArea" : 30518, "Continent" : "Europe" } } Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 30 / 120
  • 31. What if there was a way to provide both SQL and NoSQL on one stable platform that has proven stability on well know technology with a large Community and a diverse ecosystem ? Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 31 / 120
  • 32. DBMS or NoSQL ? Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 32 / 120
  • 33. DBMS or NoSQL ? Why not both ? Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 33 / 120
  • 34. The MySQL Document Store ! SQL is now optional ! Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 34 / 120
  • 35. Developers: [x] schemaless [x] rapid prototying/simpler APIs [x] document model [x] transactions Operations: [x] performance management/visibility [x] robust replication, backup, restore [x] comprehensive tooling ecosystem [x] simpler application schema upgrades Business Owner: [x] don't lose my data == ACID trx [x] capture all my data = extensible/schemaless [x] product on schedule/time to market = rapid developement A solution for all Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 35 / 120
  • 36. MySQL Document Store the Solution Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 36 / 120
  • 37. Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 37 / 120
  • 38. Built on the MySQL JSON Data type and Proven MySQL Server Technology Provides a schema flexible JSON Document Store No SQL required No need to define all possible attributes, tables, etc. Uses new X DevAPI Can leverage generated column to extract JSON values into materialized columns that can be indexed for fast SQL searches. Document can be ~1GB It's a column in a row of a table It cannot exceed max_allowed_packet Allows use of modern programming styles No more embedded strings of SQL in your code Easy to read Also works with relational Tables Proven MySQL Technology Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 38 / 120
  • 39. X DevAPI Connectors for C++, Java, .Net, Node.js, Python, PHP working with Communities to help them supporting it too New MySQL Shell Command Completion Python, JavaScrips & SQL modes Admin functions New Util object A new high-level session concept that can scale from single MySQL Server to a multiple server environment Non-blocking, asynchronous calls follow common language patterns Supports CRUD operations Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 39 / 120
  • 40. Starting using MySQL DS in few minutes   Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 40 / 120
  • 41. MySQL Shell Info Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 41 / 120
  • 42. Migration from MongoDB to MySQL DS For this example, I will use the well known restaurants collection: Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 42 / 120
  • 43. Migration from MongoDB to MySQL DS For this example, I will use the well known restaurants collection: We need to dump the data to a file and we will use MySQL Shell with the Python interpreter to load the data. Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 43 / 120
  • 44. Migration from MongoDB to MySQL DS For this example, I will use the well known restaurants collection: We need to dump the data to a file and we will use MySQL Shell with the Python interpreter to load the data. Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 44 / 120
  • 45. Dump and load using MySQL Shell & Python this example is inspired by @datacharmer's work: https://www.slideshare.net/datacharmer/mysql-documentstore $ mongo --quiet --eval 'DBQuery.shellBatchSize=30000; db.restaurants. nd().shellPrint()' | perl -pe 's/(?:ObjectId|ISODate)(("[^"]+"))/ $1/g' > all_recs.json Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 45 / 120
  • 46. Dump and load using MySQL Shell & Python this example is inspired by @datacharmer's work: https://www.slideshare.net/datacharmer/mysql-documentstore $ mongo --quiet --eval 'DBQuery.shellBatchSize=30000; db.restaurants. nd().shellPrint()' | perl -pe 's/(?:ObjectId|ISODate)(("[^"]+"))/ $1/g' > all_recs.json Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 46 / 120
  • 47. Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 47 / 120
  • 48. Let´s query Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 48 / 120
  • 49. Let´s query That´s too much records to show it here... let´s limit it Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 49 / 120
  • 50. Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 50 / 120
  • 51. Some more examples Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 51 / 120
  • 52. Some more examples Let´s add a selection criteria: Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 52 / 120
  • 53. Using IN... Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 53 / 120
  • 54. Syntax slightly different than MongoDB Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 54 / 120
  • 55. Syntax slightly different than MongoDB > db.restaurants. nd({"cuisine": "French", "borough": { $not: /^Manhattan/} }, {"_id":0, "name": 1,"cuisine": 1, "borough": 1}).limit(2) { "borough" : "Queens", "cuisine" : "French", Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 55 / 120
  • 56. CRUD operations Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 56 / 120
  • 57. CRUD operations for collections Add a document Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 57 / 120
  • 58. CRUD operations for collections Modify a document Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 58 / 120
  • 59. CRUD operations for collections Remove a document Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 59 / 120
  • 60. MySQL Document Store Objects Summary Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 60 / 120
  • 61. Document Store Full ACID ! It relies on the proven MySQL InnoDB´s strength & robustness: Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 61 / 120
  • 62. Document Store Full ACID ! It relies on the proven MySQL InnoDB´s strength & robustness: innodb_ ush_log_at_trx_commit = 1 Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 62 / 120
  • 63. Document Store Full ACID ! It relies on the proven MySQL InnoDB´s strength & robustness: innodb_ ush_log_at_trx_commit = 1 innodb_doublewrite = ON Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 63 / 120
  • 64. Document Store Full ACID ! It relies on the proven MySQL InnoDB´s strength & robustness: innodb_ ush_log_at_trx_commit = 1 innodb_doublewrite = ON sync_binlog = 1 Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 64 / 120
  • 65. Document Store Full ACID ! It relies on the proven MySQL InnoDB´s strength & robustness: innodb_ ush_log_at_trx_commit = 1 innodb_doublewrite = ON sync_binlog = 1 transaction_isolation = REPEATABLE-READ|READ-COMMITTED|... Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 65 / 120
  • 66. Document Store Full ACID ! It relies on the proven MySQL InnoDB´s strength & robustness: innodb_ ush_log_at_trx_commit = 1 innodb_doublewrite = ON sync_binlog = 1 transaction_isolation = REPEATABLE-READ|READ-COMMITTED|... We do care about your data ! Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 66 / 120
  • 67. Document Store Full ACID ! MySQL Document Store supports transactions Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 67 / 120
  • 68. Document Store Full ACID ! MySQL Document Store supports transactions Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 68 / 120
  • 69. Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 69 / 120
  • 70. what about my old SQL ? The hidden part of the iceberg Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 70 / 120
  • 71. JSON datatype is behind the scene native datatype (since 5.7.8) Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 71 / 120
  • 72. JSON datatype is behind the scene native datatype (since 5.7.8) JSON values are stored in MySQL tables using UTF8MB4 Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 72 / 120
  • 73. JSON datatype is behind the scene native datatype (since 5.7.8) JSON values are stored in MySQL tables using UTF8MB4 Conversion from "native" SQL types to JSON values Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 73 / 120
  • 74. JSON datatype is behind the scene native datatype (since 5.7.8) JSON values are stored in MySQL tables using UTF8MB4 Conversion from "native" SQL types to JSON values JSON manipulation functions (JSON_EXTRACT, JSON_KEYS, JSON_SEARCH, JSON_TABLES, ...) Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 74 / 120
  • 75. JSON datatype is behind the scene native datatype (since 5.7.8) JSON values are stored in MySQL tables using UTF8MB4 Conversion from "native" SQL types to JSON values JSON manipulation functions (JSON_EXTRACT, JSON_KEYS, JSON_SEARCH, JSON_TABLES, ...) Generated/virtual columns Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 75 / 120
  • 76. JSON datatype is behind the scene native datatype (since 5.7.8) JSON values are stored in MySQL tables using UTF8MB4 Conversion from "native" SQL types to JSON values JSON manipulation functions (JSON_EXTRACT, JSON_KEYS, JSON_SEARCH, JSON_TABLES, ...) Generated/virtual columns Indexing JSON data Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 76 / 120
  • 77. JSON datatype is behind the scene native datatype (since 5.7.8) JSON values are stored in MySQL tables using UTF8MB4 Conversion from "native" SQL types to JSON values JSON manipulation functions (JSON_EXTRACT, JSON_KEYS, JSON_SEARCH, JSON_TABLES, ...) Generated/virtual columns Indexing JSON data Foreign Keys to JSON data Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 77 / 120
  • 78. JSON datatype is behind the scene native datatype (since 5.7.8) JSON values are stored in MySQL tables using UTF8MB4 Conversion from "native" SQL types to JSON values JSON manipulation functions (JSON_EXTRACT, JSON_KEYS, JSON_SEARCH, JSON_TABLES, ...) Generated/virtual columns Indexing JSON data Foreign Keys to JSON data SQL Views to JSON data Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 78 / 120
  • 79. How does the MySQL Document Store work ? Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 79 / 120
  • 80. What does a collection look like on the server ? Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 80 / 120
  • 81. _id Every document has a unique identifier called the document ID, which can be thought of as the equivalent of a table´s primary key. The document ID value can be manually assigned when adding a document. If no value is assigned, a document ID is generated and assigned to the document automatically ! Use getDocumentId() or getDocumentIds() to get _ids(s)     Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 81 / 120
  • 82. Mapping to SQL examples createCollection('mycollection') Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 82 / 120
  • 83. Mapping to SQL examples createCollection('mycollection') CREATE TABLE `test`.`mycoll` ( doc JSON, _id VARCHAR(32) GENERATED ALWAYS AS (doc->>'$._id') STORED PRIMARY KEY ) CHARSET utf8mb4; Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 83 / 120
  • 84. Mapping to SQL examples createCollection('mycollection') CREATE TABLE `test`.`mycoll` ( doc JSON, _id VARCHAR(32) GENERATED ALWAYS AS (doc->>'$._id') STORED PRIMARY KEY ) CHARSET utf8mb4; mycollection.add({'test': 1234}) Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 84 / 120
  • 85. Mapping to SQL examples createCollection('mycollection') CREATE TABLE `test`.`mycoll` ( doc JSON, _id VARCHAR(32) GENERATED ALWAYS AS (doc->>'$._id') STORED PRIMARY KEY ) CHARSET utf8mb4; mycollection.add({'test': 1234}) INSERT INTO `test`.`mycoll` (doc) VALUES ( JSON_OBJECT('_id','663807fe367ee6114e0e5458bdac28bf', 'test',1234) ); Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 85 / 120
  • 86. Mapping to SQL examples (2) mycollection.find("test > 100") Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 86 / 120
  • 87. Mapping to SQL examples (2) mycollection.find("test > 100") SELECT doc FROM `test`.`mycoll` WHERE (JSON_EXTRACT(doc,'$.test') > 100); Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 87 / 120
  • 88. SQL and JSON Example Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 88 / 120
  • 89. SQL and JSON Example same as: Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 89 / 120
  • 90. SQL and JSON Example same as: we can use it in SQL: Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 90 / 120
  • 91. Indexes in Document Store It's also possible to create indexes without using SQL syntax: Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 91 / 120
  • 92. Indexes in Document Store It's also possible to create indexes without using SQL syntax: Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 92 / 120
  • 93. SQL and JSON Example (2): validation Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 93 / 120
  • 94. SQL and JSON Example (2): validation Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 94 / 120
  • 95. SQL and JSON Example (2): validation Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 95 / 120
  • 96. SQL and JSON Example (3): explain Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 96 / 120
  • 97. SQL and JSON Example (3): explain Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 97 / 120
  • 98. SQL and JSON Example (4): add index Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 98 / 120
  • 99. SQL and JSON Example (4): add index Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 99 / 120
  • 100. SQL and JSON Example (5): arrays Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 100 / 120
  • 101. SQL and JSON Example (5): arrays Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 101 / 120
  • 102. SQL and JSON Example (5): arrays Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 102 / 120
  • 103. SQL and JSON Example (5): arrays Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 103 / 120
  • 104. NoSQL as SQL JSON_TABLE Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 104 / 120
  • 105. NoSQL as SQL (2) JSON_TABLE Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 105 / 120
  • 106. NoSQL as SQL - aggregation Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 106 / 120
  • 107. NoSQL as SQL - aggregation (2) Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 107 / 120
  • 108. SQL and NoSQL - JOINS Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 108 / 120
  • 109. SQL and NoSQL - JOINS Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 109 / 120
  • 110. SQL and NoSQL - JOINS Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 110 / 120
  • 111. SQL and NoSQL - JOINS (2) Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 111 / 120
  • 112. SQL and NoSQL - JOINS (2) Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 112 / 120
  • 113. SQL and NoSQL - JOINS (2) Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 113 / 120
  • 114. SQL and NoSQL - and back to JSON Document Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 114 / 120
  • 115. NoSQL or SQL JS> session.sql("select doc->>'$.name', doc->>'$.cuisine' from restaurants where doc->>'$.cuisine'='Italian' limit 2") +----------------------------+-------------------+ | doc->>'$.name' | doc->>'$.cuisine' | +----------------------------+-------------------+ | Philadelhia Grille Express | Italian | | Isle Of Capri Resturant | Italian | +----------------------------+-------------------+ 2 rows in set (0.0287 sec) JS> db.restaurants. nd("cuisine='Italian'"). elds('name','cuisine').limit(2) [ { "cuisine": "Italian", "name": "Philadelhia Grille Express" }, { "cuisine": "Italian", "name": "Isle Of Capri Resturant" } ] 2 documents in set (0.0015 sec) Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 115 / 120
  • 116. what do I gain ? Conclusion Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 116 / 120
  • 117. schemaless flexible data structure easy to start (CRUD) Conclusion This is the best of the two worlds in one product ! Data integrity ACID Compliant Transactions SQL Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 117 / 120
  • 118. Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 118 / 120
  • 119. http://lefred.be/content/top-10-reasons-for-nosql-with-mysql/ Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 119 / 120
  • 120. Thank you ! Any Questions ? share your 💕 for MySQL on social media using @mysql #DataOpsBarcelona Copyright @ 2018 Oracle and/or its affiliates. All rights reserved. 120 / 120