Top Banner
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Introducing the MySQL Document Store Mark Swarbrick Principle Presales Consultant UK&I [email protected] Oracle ConfidenOal – Internal/Restricted/Highly Restricted
39

MySQL as a Document Store

Jan 25, 2017

Download

Technology

Mark Swarbrick
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: MySQL as a Document Store

Copyright©2014Oracleand/oritsaffiliates.Allrightsreserved.|

IntroducingtheMySQLDocumentStore

MarkSwarbrickPrinciplePresalesConsultantUK&[email protected]

OracleConfidenOal–Internal/Restricted/HighlyRestricted

Page 2: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

SafeHarborStatementThefollowingisintendedtooutlineourgeneralproductdirecOon.ItisintendedforinformaOonpurposesonly,andmaynotbeincorporatedintoanycontract.Itisnotacommitmenttodeliveranymaterial,code,orfuncOonality,andshouldnotberelieduponinmakingpurchasingdecisions.Thedevelopment,release,andOmingofanyfeaturesorfuncOonalitydescribedforOracle’sproductsremainsatthesolediscreOonofOracle.

2

Page 3: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

Today’sAgenda

RelaOonalDatabases,DocumentDatabasesandMySQL

MySQLJSONSupport

DocumentUseCases

TheXDevAPI

Ge\ngitallworkingtogether

1

2

3

4

3

5

Page 4: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalDatabases• DataIntegrity– NormalizaOon– Constraints(foreignkeysetc)

• Atomicity,Consistency,IsolaOon,Durability-ACID– TransacOons

•  SQL– Powerful,OpOmizableQueryLanguage– DeclarewhatyouwantandtheDBwillfindoutthemostefficientwaytogetittoyou

OracleConfidenOal–Restricted 4

Page 5: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

Plus…• MySQLhasbeenaroundsince1995• Ubiquitous• Pregymuchastandard•  Scalable• Whenthereareissues,theyareknownandunderstood•  Largebodyofknowledge,fromsmalltoBIGdeployments

OracleConfidenOal–Restricted 5

Page 6: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

DocumentDatabases

OracleConfidenOal–Restricted 6

•  Schemaless– noschemadesign,normalizaOon,foreignkeys,constraints,datatypesetc– fasteriniOaldevelopment

•  Flexibledatastructures– nestedarraysandobjects– somedataissimplynaturallyunstructuredorcannotbemodeledefficientlyintherelaOonalmodel(hierarchies,productDBetc)– persistobjectswithoutORMs

Page 7: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

DocumentDatabases(Cont.)

OracleConfidenOal–Restricted 7

•  JSON– Closertothefrontend– "naOve"inJavaScript– Node.jsandfullstackJavaScript

•  Easytolearn,easytouse

Page 8: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalvsDocumentDatabases

Whynotboth?

OracleConfidenOal–Restricted 8

Page 9: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalDatabases,DocumentDatabasesandMySQL

MySQLJSONSupport

DocumentUseCases

TheXDevAPI

Ge\ngitallworkingtogether

9

1

2

3

4

5

Page 10: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQL5.7:JSONSupport• NaOveJSONdatatype•  StoreJSONvalues(objects,arraysandsimplevalues)inMySQLtables• BinaryJSONstorageformat• Conversionfrom"naOve"SQLtypestoandfromJSONvalues•  JSONManipulaOonfuncOons– Extractcontents(JSON_EXTRACT,JSON_KEYSetc)– Inspectcontents(JSON_CONTAINSetc)– Modifycontents(JSON_SET,JSON_INSERT,JSON_REMOVEetc)– Createarraysandobjects(JSON_ARRAY,JSON_OBJECT)– Searchobjects(JSON_SEARCH)

OracleConfidenOal–Restricted 10

Page 11: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQL5.7:JSONSupport(cont.)•  InlineSQLJSONpathexpressionsSELECT doc->'$.object.array[0].item' FROM some_table

• Booleanoperators(compareJSONvaluesetc)– foo=doc->'$.field'

OracleConfidenOal–Restricted 11

Page 12: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQL5.7:JSONSupport(cont.)• Plus…• Generated/VirtualColumns– IndexJSONdata– ForeignkeystoJSONdata– SQLviewsforJSONdata

OracleConfidenOal–Restricted 12

Page 13: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalDatabases,DocumentDatabasesandMySQL

MySQLJSONSupport

DocumentUseCases

TheXDevAPI

Ge\ngitallworkingtogether

13

1

2

3

4

5

Page 14: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

ExtracOngJSONfromaRelaOonalDBRela+onalIn,Rela+onal+DocumentOut

• DatastoredinrelaOonaltables,butfrontendusesJSON•  JSONdirectlymapstonaOvedatastructuresinmanylanguages– OxeneasierforapplicaOoncodetouse– JavaScript,Python,Rubyetc– InbrowserJavaScript

OracleConfidenOal–Restricted 14

Page 15: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

ExtracOngJSONfromaRelaOonalDBRela+onalIn,Rela+onal+DocumentOut

•  SQLFuncOonstoconstructJSON– JSON_OBJECT(),JSON_ARRAY()

•  Ex.:SELECT JSON_OBJECT('cust_id', id, 'name', name, 'email', email) FROM customer;

CREATE VIEW customer_json AS

SELECT JSON_OBJECT('cust_id', id, 'name', name, 'email', email) as doc FROM customer;

SELECT * FROM customer_json;

• UpdatesandinsertssOllhappenthroughthetablecolumns

OracleConfidenOal–Restricted 15

Page 16: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

UsingMySQLasaJSONDocumentContainerDocumentIn,Rela+onal+DocumentOut

• VirtuallySchemaless– Unstructureddata– Noclear,fixedstructureforthedata…recordscanhavedifferentfields– Oxendatathatisnotinvolvedinbusinessrules– Examples:"product_info","properOes","opOons"etc

• DatadoesnotmapcleanlyintoarelaOonalmodel(arrays,hierarchicaldataetc)• Prototyping

OracleConfidenOal–Restricted 16

Page 17: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQLasaJSONDocumentContainer

OracleConfidenOal–Restricted 17

Example:"product_info"tableproduct_id a<ribute value

9 size M

9 color red

9 fabric cogon

11 flavour strawberry

12 capacity 128GB

12 speedclass class10

13 connecOvity Wi-Fi

13 storage 64GB

13 screensize 8.9"

13 resoluOon 2560x1600(339ppi)

13 bagerylife 12hours

{"product_id":9,"size":"M","color":"red","fabric":"cogon"},{"product_id":11,"flavour":"strawberry"},{"product_id":12,"capacity":"128GB","speedclass":"class10"},{

Page 18: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQLasaJSONDocumentContainerDocumentIn,Rela+onal+DocumentOut

• AnordinaryMySQLtablewithasingleJSONdatacolumn• GeneratedcolumnsallowSQLenginetolookinsidetheJSONdata– Virtualcolumns– PrimaryKeys– Indexes– ForeignKeys

• WritesontheJSONcolumn• ReadsprimarilyfromtheJSONcolumns

OracleConfidenOal–Restricted 18

Page 19: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

HybridRelaOonalandJSONRela+onal+DocumentIn,Rela+onal+DocumentOut

• DatabaseismostlyrelaOonal•  SomepartsofthedatabaseareunstructuredordoesnotmodelcleanlyasrelaOonal•  JSONcolumnsinrelaOonaltables• QueriescanmixandmatchJSONandcolumndata•  EvoluOonpathforDocumentbasedapplicaOons

OracleConfidenOal–Restricted 19

Page 20: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalDatabases,DocumentDatabasesandMySQL

MySQLJSONSupport

DocumentUseCases

TheXDevAPI

Ge\ngitallworkingtogether

1

2

3

4

20

5

Page 21: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

DocumentOperaOonsviaSQL• Powerful• Allowscomplexqueries• But…sOlldifficulttouse

OracleConfidenOal–Restricted 21

Page 22: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

DocumentOperaOonsviaSQL

CREATE TABLE product (

id VARCHAR(32) GENERATED ALWAYS AS (JSON_EXTRACT(doc, '$.id')) STORED,

doc JSON

);

INSERT INTO product VALUES (1, '{…}');

SELECT * FROM product WHERE JSON_EXTRACT(doc, '$.field') = value;

etc.

OracleConfidenOal–Restricted 22

Page 23: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

TheXDevAPI• AbstracOonoverSQL•  Focusedon4basicCRUDoperaOons(Create,Read,Update,Delete)•  Fluent,NaOveLanguageAPI• NoknowledgeofSQLneeded• XProtocol– CRUDrequestsencodedatprotocollevel– Requestdetails"visible"(vs"opaque"SQLstrings)

OracleConfidenOal–Restricted 23

Page 24: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

CollecOonandSchemaOperaOons• GetahandletoaSchemamydb = session.getSchema("mydb");

• CreateaCollecOonmydb.createCollection("products");

• Geta(local)referencetoaCollecOonproducts = mydb.getCollection("products");

OracleConfidenOal–Restricted 24

Page 25: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

AddDocument

products.add({"name":"bananas", "color":"yellow"}).execute();

OracleConfidenOal–Restricted 25

Page 26: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

FindDocuments

OracleConfidenOal–Restricted 26

products.find("color = 'yellow'").sort(["name"]).execute();

Page 27: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

ModifyDocuments

OracleConfidenOal–Restricted 27

products.modify("product_id = 123").set("color", "red").execute();

Page 28: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RemoveDocuments

OracleConfidenOal–Restricted 28

products.remove("product_id = 123").execute();

Page 29: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

XDevAPISessions• XSession– Stateless– CRUDonly,noSQL– AbstractstheconnecOon

• NodeSession– DirectconnecOontoadatabasenode– AllowsCRUDandSQL

OracleConfidenOal–Restricted 29

Page 30: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

OtherOperaOonsonCollecOons• CreateanIndexdb.post.createIndex("email").field("author.email","text(30)",false)

OracleConfidenOal–Restricted 30

Page 31: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

CRUDOperaOons–NoSQL/DocumentandSQL/RelaOonal

Opera+on Document Rela+onalCreate CollecOon.add() Table.insert()Read CollecOon.find() Table.select()Update CollecOon.modify() Table.update()Delete CollecOon.remove() Table.delete()

31

Page 32: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalDatabases,DocumentDatabasesandMySQL

MySQLJSONSupport

DocumentUseCases

TheXDevAPI

Ge\ngitallworkingtogether

1

2

3

4

32

5

Page 33: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

5.7.12DevelopmentPreviewRelease• MySQL5.7.12withDocumentStoreplugin• MySQLShell1.0.3• Connector/J7.0• Connector/Net7.0• Connector/Node.js1.0

OracleConfidenOal–Restricted 33

Page 34: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQL5.7,Connectors,Drivers,andProtocols

34

MySQL

Plugins

XProtocolPlugin MemcachedPluginCore

MySQLConnectorsandDrivers

XProtocolStdProtocol

Memcacheddriver

XProtocol33060

StdProtocol3306

SQLAPI CRUDandSQLAPIs

MemcacheProtocol

XandStdProtocols

MySQLShell

Page 35: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQLShell

OracleConfidenOal–Restricted 35

Page 36: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQLPluginforVisualStudio

OracleConfidenOal–Restricted 36

Page 37: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

ResourcesTopic Link(s)

MySQLasaDocumentDatabase hgp://dev.mysql.com/doc/refman/5.7/en/document-database.html

MySQLShell hgp://dev.mysql.com/doc/refman/5.7/en/mysql-shell.htmlhgp://dev.mysql.com/doc/refman/5.7/en/mysqlx-shell-tutorial-javascript.htmlhgp://dev.mysql.com/doc/refman/5.7/en/mysqlx-shell-tutorial-python.html

XDevAPI hgp://dev.mysql.com/doc/x-devapi-userguide/en/

XPlugin hgp://dev.mysql.com/doc/refman/5.7/en/x-plugin.html

MySQLJSON hgp://mysqlserverteam.com/tag/json/hgps://dev.mysql.com/doc/refman/5.7/en/json.htmlhgps://dev.mysql.com/doc/refman/5.7/en/json-funcOons.html

Blogs hgp://mysqlserverteam.com/category/docstore/

37

Page 38: MySQL as a Document Store

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

ThankYou!

Page 39: MySQL as a Document Store