MySQL as a Document Store

Post on 25-Jan-2017

261 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

Transcript

Copyright©2014Oracleand/oritsaffiliates.Allrightsreserved.|

IntroducingtheMySQLDocumentStore

MarkSwarbrickPrinciplePresalesConsultantUK&Imark.swarbrick@oracle.com

OracleConfidenOal–Internal/Restricted/HighlyRestricted

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

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

2

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

Today’sAgenda

RelaOonalDatabases,DocumentDatabasesandMySQL

MySQLJSONSupport

DocumentUseCases

TheXDevAPI

Ge\ngitallworkingtogether

1

2

3

4

3

5

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalDatabases• DataIntegrity– NormalizaOon– Constraints(foreignkeysetc)

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

•  SQL– Powerful,OpOmizableQueryLanguage– DeclarewhatyouwantandtheDBwillfindoutthemostefficientwaytogetittoyou

OracleConfidenOal–Restricted 4

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

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

OracleConfidenOal–Restricted 5

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

DocumentDatabases

OracleConfidenOal–Restricted 6

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

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

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

DocumentDatabases(Cont.)

OracleConfidenOal–Restricted 7

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

•  Easytolearn,easytouse

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalvsDocumentDatabases

Whynotboth?

OracleConfidenOal–Restricted 8

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalDatabases,DocumentDatabasesandMySQL

MySQLJSONSupport

DocumentUseCases

TheXDevAPI

Ge\ngitallworkingtogether

9

1

2

3

4

5

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

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

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

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

OracleConfidenOal–Restricted 12

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalDatabases,DocumentDatabasesandMySQL

MySQLJSONSupport

DocumentUseCases

TheXDevAPI

Ge\ngitallworkingtogether

13

1

2

3

4

5

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

ExtracOngJSONfromaRelaOonalDBRela+onalIn,Rela+onal+DocumentOut

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

OracleConfidenOal–Restricted 14

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

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

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"},{

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQLasaJSONDocumentContainerDocumentIn,Rela+onal+DocumentOut

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

• WritesontheJSONcolumn• ReadsprimarilyfromtheJSONcolumns

OracleConfidenOal–Restricted 18

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

HybridRelaOonalandJSONRela+onal+DocumentIn,Rela+onal+DocumentOut

• DatabaseismostlyrelaOonal•  SomepartsofthedatabaseareunstructuredordoesnotmodelcleanlyasrelaOonal•  JSONcolumnsinrelaOonaltables• QueriescanmixandmatchJSONandcolumndata•  EvoluOonpathforDocumentbasedapplicaOons

OracleConfidenOal–Restricted 19

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalDatabases,DocumentDatabasesandMySQL

MySQLJSONSupport

DocumentUseCases

TheXDevAPI

Ge\ngitallworkingtogether

1

2

3

4

20

5

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

DocumentOperaOonsviaSQL• Powerful• Allowscomplexqueries• But…sOlldifficulttouse

OracleConfidenOal–Restricted 21

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

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

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

OracleConfidenOal–Restricted 23

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

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

• CreateaCollecOonmydb.createCollection("products");

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

OracleConfidenOal–Restricted 24

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

AddDocument

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

OracleConfidenOal–Restricted 25

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

FindDocuments

OracleConfidenOal–Restricted 26

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

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

ModifyDocuments

OracleConfidenOal–Restricted 27

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

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RemoveDocuments

OracleConfidenOal–Restricted 28

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

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

XDevAPISessions• XSession– Stateless– CRUDonly,noSQL– AbstractstheconnecOon

• NodeSession– DirectconnecOontoadatabasenode– AllowsCRUDandSQL

OracleConfidenOal–Restricted 29

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

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

OracleConfidenOal–Restricted 30

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

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

RelaOonalDatabases,DocumentDatabasesandMySQL

MySQLJSONSupport

DocumentUseCases

TheXDevAPI

Ge\ngitallworkingtogether

1

2

3

4

32

5

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

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQL5.7,Connectors,Drivers,andProtocols

34

MySQL

Plugins

XProtocolPlugin MemcachedPluginCore

MySQLConnectorsandDrivers

XProtocolStdProtocol

Memcacheddriver

XProtocol33060

StdProtocol3306

SQLAPI CRUDandSQLAPIs

MemcacheProtocol

XandStdProtocols

MySQLShell

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQLShell

OracleConfidenOal–Restricted 35

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

MySQLPluginforVisualStudio

OracleConfidenOal–Restricted 36

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

Copyright©2016Oracleand/oritsaffiliates.Allrightsreserved.|

ThankYou!

top related