mysqlのnosql機能 - mysql json & http plugin for mysql

30
Copyright © 201, Oracle and/or its affiliates. All rights reserved. | HTTP Plugin / MySQL JSON Ryusuke Kajiyama / 梶山隆輔 / @RKajiyama MySQL Sales ConsulIng Senior Manager, Asia Pacific & Japan MySQLPostgreSQLユーザーグループ MyNAJPUG)合同DB勉強会 in 東京 MySQL meets NoSQL

Upload: ryusuke-kajiyama

Post on 21-Aug-2015

439 views

Category:

Technology


3 download

TRANSCRIPT

  1. 1. Copyright201,Oracleand/oritsaliates.Allrightsreserved.| HTTPPlugin/MySQLJSON RyusukeKajiyama//@RKajiyama MySQLSalesConsulIngSeniorManager,AsiaPacic&Japan MySQLPostgreSQL MyNAJPUGDB in MySQLmeetsNoSQL
  2. 2. Copyright201Oracleand/oritsaliates.Allrightsreserved.| SAFEHARBORSTATEMENT 2
  3. 3. Copyright201Oracleand/oritsaliates.Allrightsreserved.| Theworld'smostpopularopensourcedatabase 3
  4. 4. Copyright201Oracleand/oritsaliates.Allrightsreserved.| 4 20MySQL20 15MySQL15 10Innobase10 55 AYearofAnniversaries!
  5. 5. Copyright201Oracleand/oritsaliates.Allrightsreserved.| MySQL & Oracle,RedHat,CentOS Fedora Ubuntu,Debian SUSE DevOps MySQLDatabase MySQLWorkbench MySQLConnector/ODBC MySQLConnector/Python MySQLConnector/NET MySQLUIliIes 5 MySQL:Yum,APT,NuGET
  6. 6. Copyright201Oracleand/oritsaliates.Allrightsreserved.| GitHubMySQL MySQLGit GitHubforMySQLCommunity hbps://github.com/mysql :hbp://mysqlrelease.com 6
  7. 7. Copyright201Oracleand/oritsaliates.Allrightsreserved.| MySQL5.6 h?p://dev.mysql.com/doc/refman/5.6/ja/index.html 7
  8. 8. Copyright201,Oracleand/oritsaliates.Allrightsreserved.| MySQL
  9. 9. Copyright201Oracleand/oritsaliates.Allrightsreserved.| 9 4.0 /GIS(MyISAM) UPDATE/DELETE OracleMySQL Sun 3.23 MyISAM InnoDB 5.1 5.6 memcachedAPI UNDO GlobalTransacIonID ALTERTABLE 5.5 InnoDB PERFORMANCE_SCHEMA 1.0-3.22 (ISAM,HEAP) Windows/64bit (SJIS/UJIS) 5.0 // XA INFORMATION_SCHEMA 4.1 Unicode CSV,ARCHIVE ndbcluster 19952000200520102015 5.7+ CJK/GIS(InnoDB) NoSQL
  10. 10. Copyright201Oracleand/oritsaliates.Allrightsreserved.| SSD UNDO JSONEXPLAIN MemcachedAPI GlobalTransacIonID Binlog 10 ALTERTABLE SHA256 MySQL5.6
  11. 11. Copyright201Oracleand/oritsaliates.Allrightsreserved.| MySQL5.7ReleaseCandidateAvailable! 11 InnoDB: Online&Bulkload (mulI-source,mulI-threadedslaves) : greaterusercontrol&beberqueryperformance PerformanceSchema MySQLSYSSchema & MySQL5.62 : ,& NEW!JSONSupport(nowinlabs) RC Andmanymorenewfeaturesandenhancements...hbp://mysqlserverteam.com/the-mysql-5-7-7-release-candidate-is-available/
  12. 12. Copyright201Oracleand/oritsaliates.Allrightsreserved.| InnoDB-FullTextSearch(FTS)-ngram 12 InnoDBFullTextSearch(FTS) , N-gramsupportforChineseandKorean,addiIonalMeCabsupportforJapanese CREATETABLE`N_DEMO`(`FTS_N_ID`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`Itle`varchar(100)DEFAULTNULL, PRIMARYKEY(`FTS_N_ID`),FULLTEXTKEY`ngram_idx`(`Itle`)/*!50100WITHPARSER`ngram`*/ )ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=ur8mb4;
  13. 13. Copyright201Oracleand/oritsaliates.Allrightsreserved.| InnoDB-FullTextSearch(FTS)-mecab 13 InnoDBFullTextSearch(FTS) , N-gramsupportforChineseandKorean,addiIonalMeCabsupportforJapanese CREATETABLE`M_DEMO`(`FTS_M_ID`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`Itle`varchar(100)DEFAULTNULL, PRIMARYKEY(`FTS_M_ID`),FULLTEXTKEY`mecab_idx`(`Itle`)/*!50100WITHPARSER`mecab`*/ )ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=ur8mb4;
  14. 14. Copyright201Oracleand/oritsaliates.Allrightsreserved.| MySQLLabs 14
  15. 15. Copyright201Oracleand/oritsaliates.Allrightsreserved.| MySQLLabs MySQLMySQLCluster MySQL5.6memcachedAPI MySQLCluster7.2memcachedAPI MySQL5.6PerformanceSchema MySQL5.6Intra-schemaMulIThreadSlave MySQL5.6OnlineAlterTable MySQL5.7MulISourceReplicaIon MySQL5.7NewOpImizerCostModel 15
  16. 16. Copyright201Oracleand/oritsaliates.Allrightsreserved.| ( OpImisIcStateMachine / InnoDB GTID PERFORMANCE_SCHEMA MySQL5.7: ApplicaIon MySQLMasters ReplicaIon Plugin API MySQL Server GroupComms (Corosync) 16 labs.mysql.com
  17. 17. Copyright201Oracleand/oritsaliates.Allrightsreserved.| HTTPPluginforMySQL MySQLHTTP(S) UTF8JSON 3 SQL CRUD-Key-Value JSON-Document Formoredetails; hbp://www.slideshare.net/nixnutz/hbp-plugin-for-mysql-39598656 17
  18. 18. Copyright201Oracleand/oritsaliates.Allrightsreserved.| HTTPPluginforMySQL SQLCRUDJSON URLhbp[s]://server:port/sql/hbp[s]://server:port/crud/hbp[s]://server:port/doc/ SQLCRUDCRUD JSON* SQLYesNoNo HTTPGETGET,PUT.DELETEGET,PUT.DELETE YesNoYes YesYesYes UTF-8UTF-8UTF-8 YesYesYes 18
  19. 19. Copyright201Oracleand/oritsaliates.Allrightsreserved.| HTTPPluginforMySQL TheSQLendpointandJSON 19 shell> curl -X GET --user scott:tiger --url 'http://127.0.0.1:8080/sql/world/ SELECT+ID,Name+FROM+City+WHERE+Name=%27Tokyo%27' [ { "meta":[ {"type":,"catalog":"def","database":"world","table":"City","org_table":"ci ty","column":"ID","org_column":"ID","charset":63,"length":11,"flags": 16899,"decimals":0}, {"type": 254,"catalog":"def","database":"world","table":"City","org_table":"city","column ":"Name","org_column":"Name","charset":33,"length":105,"flags":1,"decimals":0} ], "data":[ ["1532","Tokyo"] ], "status":[{"server_status":34,"warning_count":0 } ]
  20. 20. Copyright201Oracleand/oritsaliates.Allrightsreserved.| HTTPPluginforMySQL-IniIalversion HTTPBasicAuthenIcaIonforSSLandNon-SSL Noquerycachesupport Nocommercialthreadpoolpluginsupport NotallMySQLpluggableauthmethodssupported Unlimited:allSQLstatements Unlimited:everythingtheserverreturns 20 shell> curl --user basic_auth_user:basic_auth_passwd --url "http://.../sql/db/SELECT+col_float+FROM+sql_types"
  21. 21. Copyright201Oracleand/oritsaliates.Allrightsreserved.| HTTPPluginforMySQL GET=SELECT 21 shell> curl ... --url "http://../crud/db/sql_types/1" { "id" : "1", "col_char" : "CHAR(127)" , "col_null" : null, "col_date" : "2014-12-23", "col_decimal" : "123.45", "col_float" : "0.9999", "col_bigint" : "9223372036854775807" } shell> curl ... --url 'http://../crud/db/simple/' { "errno" : 2000, "error" : "The request URL must include a primary key value }
  22. 22. Copyright201Oracleand/oritsaliates.Allrightsreserved.| MySQLBinlogEvents BinlogAPI C++ 2"transport" TCPTransport&FileTransport API hbp://mysqlhighavailability.com/author/nehakumari/ 22
  23. 23. Copyright201Oracleand/oritsaliates.Allrightsreserved.| MySQL5.7:JSON JSON JSON SQL GeneratedColumns() InnoDBSTOREDVIRTUALGeneratedColumns hbp://mysqlserverteam.com/json-labs-release-overview/ 23
  24. 24. Copyright201Oracleand/oritsaliates.Allrightsreserved.| MySQL5.7:JSON 24 mysql> CREATE TABLE employees (data JSON); Query OK, 0 rows affected (0,01 sec) mysql> INSERT INTO employees VALUES ('{"id": 1, "name": "Jane"}'); Query OK, 1 row affected (0,00 sec) mysql> INSERT INTO employees VALUES ('{"id": 2, "name": "Joe"}'); Query OK, 1 row affected (0,00 sec) mysql> select * from employees; +---------------------------+ | data | +---------------------------+ | {"id": 1, "name": "Jane"} | | {"id": 2, "name": "Joe"} | +---------------------------+ 2 rows in set (0,00 sec)
  25. 25. Copyright201Oracleand/oritsaliates.Allrightsreserved.| MySQL5.7:JSON DocumentValidaIon oninsertonly EcientAccess 25 mysql> INSERT INTO employees VALUES ('some random text'); ERROR 3130 (22032): Invalid JSON text: "Expect a value here." at position 0 in value (or column) 'some random text'. mysql> select jsn_extract(data, '$.name') from employees; +-----------------------------+ | jsn_extract(data, '$.name') | +-----------------------------+ | "Jane" | | "Joe" | +-----------------------------+ 2 rows in set (0,00 sec)
  26. 26. Copyright201Oracleand/oritsaliates.Allrightsreserved.| jsn_array() BuildaJSONarrayfromlistofexpressions jsn_object() BuildsJSONobjectsfromavariablelengthlist ofkey/valuepairs jsn_insert() Adds'missing'datatoJSONdocuments jsn_remove() RemovesabributesfromexisIngJSON documents jsn_set() SetsabributeswithinJSONdocuments jsn_replace() Replaces(butdoesn'tadd)abributeswithin JSONdocuments jsn_append() Addsavaluetotheendofanarray jsn_merge() Mergestwoarrays jsn_extract() ReturnsavaluenestedinsideofaJSON document 26 JSONFuncIonsforCreaIng&ManipulaIng JSONDocuments
  27. 27. Copyright201Oracleand/oritsaliates.Allrightsreserved.| jsn_search() SearchforvalueswithinJSONdocumentsand returntheirlocaIons jsn_contains() Checksforaspecicelementandvalue jsn_contains_path() Determineifaspecicelementispresentina documentinaspecicposiIon jsn_valid() CheckifdocumentisavalidJSONdocument jsn_type() Findthetypeofavaluewithinadocument jsn_keys() ReturnsarraysofthekeynamesfortheJSON documents jsn_length() NumberofelementsinJSONdocument jsn_depth() LevelofnesInginJSONdocument jsn_unquote() HelpsmovefromJSONtootherMySQLtypes jsn_quote() HelpsmovefromotherMySQLtypestoJSON 27 QueryandSearchJSONFuncIons
  28. 28. Copyright201Oracleand/oritsaliates.Allrightsreserved.| GeneratedColumns VirtualGeneratedColumn Generatedontheywhenthecolumnisread Canbeindexed StoredGeneratedColumn Generatedwhenthereferencedcolumniswribento Canbeindexed mysql> ALTER TABLE employees ADD name VARCHAR(100) GENERATED ALWAYS AS(jsn_extract(info, '$.name')) VIRTUAL; mysql> ALTER TABLE employees ADD INDEX(name); hbp://mysqlserverteam.com/ 28 DiggingintoyourDocuments labs.mysql.com
  29. 29. Copyright201Oracleand/oritsaliates.Allrightsreserved.| JOIN / 29 ?
  30. 30. Copyright201Oracleand/oritsaliates.Allrightsreserved.| Theworld'smostpopularopensourcedatabase 30