Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQL

1,896 views

Published on

2015年6月26日 株式会社DMM.com ラボ 本社・東京事業所にて開催されたMySQL・PostgreSQLユーザーグループ(MyNA・JPUG)合同DB勉強会 in 東京でのMySQLセッションの資料です。JSONデータ型とそれに対応したSQL関数群、およびMySQLサーバにHTTPインターフェースを追加するHTTP Plugin for MySQLの概要をご紹介しています。 #ChugokuDB #mysql_jp #jpug

Published in: Technology
  • Be the first to comment

MySQLのNoSQL機能 - MySQL JSON & HTTP Plugin for MySQL

  1. 1. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   HTTP  Plugin  /  MySQL  JSON   Ryusuke  Kajiyama  /  梶山隆輔  /  @RKajiyama   MySQL  Sales  ConsulIng  Senior  Manager,  Asia  Pacific  &  Japan   MySQL・PostgreSQLユーザーグループ   (MyNA・JPUG)合同DB勉強会 in  東京   MySQL  meets  NoSQL
  2. 2. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   以下の事項は、弊社の⼀一般的な製品の⽅方向性に関する概要を説明するものです。 また、情報提供を唯⼀一の⽬目的とするものであり、いかなる契約にも組み込むことはできません。 以下の事項は、マテリアルやコード、機能を提供することをコミットメントするものではない為 、購買決定を⾏行行う際の判断材料料になさらないで下さい。 オラクル製品に関して記載されている機能の開発、リリースおよび時期については、 弊社の裁量量により決定されます。 SAFE  HARBOR  STATEMENT   2  
  3. 3. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   The  world's  most  popular  open  source  database   世界で最も普及しているオープンソース データベース   3
  4. 4. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   4 20  MySQL公開から20年   15  日本MySQLユーザ会ドメイン登録から15年 10  オラクルによるInnobase買収から10年 5  オラクルによるサン買収から5年  A  Year  of  Anniversaries!
  5. 5. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   •  MySQL製品のシンプルで便利なインス トール&アップグレード方法を提供   •  下記のディストリビューション向け   –  Oracle,  Red  Hat,  CentOS     –  Fedora   –  Ubuntu,  Debian   •  まもなく提供開始予定   –  SUSE   –  構成済みコンテナ   –  利用者の多いDevOpsデプロイツールのサ ポート   •  下記の最新リリースを含む   –  MySQL  Database   –  MySQL  Workbench   –  MySQL  Connector/ODBC   –  MySQL  Connector/Python   –  MySQL  Connector/NET   –  MySQL  UIliIes       5   MySQLコミュニティレポジトリ:  Yum,  APT,  NuGET  
  6. 6. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   GitHubへのMySQLソースコードの掲載   •  MySQL開発チームのGit   –  各ディストリビューションにてより迅速、柔軟に   –  優れたツールの利用が可能に   –  幅広くいコミュニティとの交流   •  GitHub  for  MySQL  Community   –  コミュニティや関連プロジェクトへのより簡単かつ高速なソースコードの提供   –  ベータ版のレポジトリ: hbps://github.com/mysql   –  詳細:  hbp://mysqlrelease.com   6  
  7. 7. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   MySQL  5.6  リファレンスマニュアル日本語版 h?p://dev.mysql.com/doc/refman/5.6/ja/index.html 7
  8. 8. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   MySQL  製品ロードマップ      
  9. 9. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   9 4.0   全文検索/GIS  (MyISAM)   複数テーブルUPDATE/DELETE   組み込みライブラリ型サーバ Oracle  MySQL   Sun   3.23   MyISAM   InnoDB   レプリケーション   5.1   プラグガブル・    ストレージエンジン・    アーキテクチャ パーティショニング   タスクスケジューラ 5.6   memcached  API   UNDO表領域   Global  TransacIon  ID   マルチスレッドスレーブ   オンラインALTER  TABLE   トランスポータブル表領域   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   1995 2000 2005 2010 2015 5.7+   新コストモデル オプティマイザ   ロスレス レプリケーション   マルチソース レプリケーション   グループ レプリケーション   全文検索CJK対応/GIS  (InnoDB)   セキュリティ強化   データディクショナリ   NoSQLオプション      
  10. 10. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   •  性能   – ミューテックスの分割   – 参照専用トランザクション   – SSDへの最適化   – UNDO表領域   – サブクエリ高速化   – JSON  EXPLAIN   – Memcached  API   •  可用性 – Global  TransacIon  ID   – 自動フェールオーバー   – マルチスレッド・スレーブ   – Binlog  グループ・コミット   – 行ベース・レプリケーショ ン最適化   – クラッシュセーフ・   スレーブ   – チェックサム 10 •  運用効率   – オンラインALTER  TABLE   – バッファプールのダンプ   およびインポート   – トランスポータブル   表領域   – セキュリティ強化   •  パスワードポリシー   •  SHA256   •  パスワード失効   MySQL5.6での機能拡張
  11. 11. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   MySQL  5.7  Release  Candidate  Available!   11   InnoDBの機能拡張:     Online&Bulk  load  オペレーション高速化   レプリケーションの改善    (mulI-­‐source,  mulI-­‐threaded  slaves等)   新しいオプティマイザコストモデル:   greater  user  control  &  beber  query  performance   Performance  Schema改善   MySQL  SYS  Schema改善   パフォーマンス  &  拡張性   管理性   MySQL  5.6比2倍の速度   セキュリティの向上:     より安全な初期化,  セットアップ&管理   NEW!  JSONのSupport  (now  in  labs)   RC   And  many  more  new  features  and  enhancements...  hbp://mysqlserverteam.com/the-­‐mysql-­‐5-­‐7-­‐7-­‐release-­‐candidate-­‐is-­‐available/    
  12. 12. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   InnoDB  -­‐  Full  Text  Search  (FTS)  -­‐  ngram 12 InnoDB  Full  Text  Search  (FTS)  にて 中国語,  韓国語,日本語をサポート   N-­‐gram  support  for  Chinese  and  Korean,  addiIonal  MeCab  support  for  Japanese   CREATE  TABLE  `N_DEMO`  (  `FTS_N_ID`  bigint(20)  unsigned  NOT  NULL  AUTO_INCREMENT,  `Itle`  varchar(100)  DEFAULT  NULL,       PRIMARY  KEY  (`FTS_N_ID`),  FULLTEXT  KEY  `ngram_idx`  (`Itle`)  /*!50100  WITH  PARSER  `ngram`  */     )  ENGINE=InnoDB  AUTO_INCREMENT=1  DEFAULT  CHARSET=ur8mb4;  
  13. 13. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   InnoDB  -­‐  Full  Text  Search  (FTS)  -­‐  mecab 13 InnoDB  Full  Text  Search  (FTS)  にて 中国語,  韓国語,日本語をサポート   N-­‐gram  support  for  Chinese  and  Korean,  addiIonal  MeCab  support  for  Japanese   CREATE  TABLE  `M_DEMO`  (  `FTS_M_ID`  bigint(20)  unsigned  NOT  NULL  AUTO_INCREMENT,  `Itle`  varchar(100)  DEFAULT  NULL,       PRIMARY  KEY  (`FTS_M_ID`),    FULLTEXT  KEY  `mecab_idx`  (`Itle`)  /*!50100  WITH  PARSER  `mecab`  */     )  ENGINE=InnoDB  AUTO_INCREMENT=1  DEFAULT  CHARSET=ur8mb4;  
  14. 14. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   MySQL  Labs 14
  15. 15. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   MySQL  Labs •  先進的な機能や実験的な仕様のをいち早く公開   – コミュニティからのフィードバックをいただく   •  将来的にはMySQLサーバやMySQL  Cluster本体への統合を期待   – MySQL  5.6  memcached  API   – MySQL  Cluster  7.2  memcached  API   – MySQL  5.6  Performance  Schema   – MySQL  5.6  Intra-­‐schema  MulI  Thread  Slave   – MySQL  5.6  Online  Alter  Table   – MySQL  5.7  MulI  Source  ReplicaIon   – MySQL  5.7  New  OpImizer  Cost  Model 15
  16. 16. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   •  シェアード・ナッシング型”疑似”同期レプリケーション   •  更新はマルチ・マスタ型でどこでも可能   –  矛盾の検知と解決(トランザクションのロールバック   –  “OpImisIc  State  Machine”  レプリケーション   •  グループメンバーの管理と障害検知を自動化   –  サーバのフェールオーバー不要   –  構成の拡張/縮小の柔軟性   –  単一障害点無し   –  自動再構成   •  既存構成との統合   –  InnoDB   –  GTIDベースのレプリケーション   –  PERFORMANCE_SCHEMA   MySQL  5.7:  グループレプリケーション   ApplicaIon   MySQL  Masters   ReplicaIon     Plugin   API   MySQL   Server   Group  Comms   (Corosync)   16   labs.mysql.com  
  17. 17. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   HTTP  Plugin  for  MySQL   •  MySQLサーバへのHTTP(S)エンドポイントを提供するプラグイン   •  結果をUTF8でエンコードされたJSONフォーマットにシリアライズ   •  3種類のユーザエンドポイント   – SQL   – CRUD  -­‐  Key-­‐Value   – JSON  -­‐  Document   •  For  more  details;   hbp://www.slideshare.net/nixnutz/hbp-­‐plugin-­‐for-­‐mysql-­‐39598656   17  
  18. 18. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   HTTP  Plugin  for  MySQL  –  エンドポイント エンドポイント SQL CRUD JSON  ドキュメント URLプリフィックス hbp[s]://server:port/sql/ hbp[s]://server:port/crud/ hbp[s]://server:port/doc/ データ操作 全SQL文利用可能 主キーによるCRUD 主キーによるCRUD データ格納先 通常のテーブル 通常のテーブル テーブルのJSON列* SQL文利用可能 Yes No No HTTPメソッド GET GET,  PUT.  DELETE GET,  PUT.  DELETE   結果セットのメタデータ Yes No Yes トランザクション Yes Yes Yes 文字コード UTF-­‐8 UTF-­‐8 UTF-­‐8 ベーシック認証 Yes Yes Yes 18
  19. 19. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   HTTP  Plugin  for  MySQL The  SQL  endpoint  and  JSON   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. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   HTTP  Plugin  for  MySQL  -­‐  IniIal  version   •  HTTP  Basic  AuthenIcaIon  for  SSL  and  Non-­‐SSL     •  No  query  cache  support     •  No  commercial  thread  pool  plugin  support     •  Not  all  MySQL  pluggable  auth  methods  supported     •  Unlimited:  all  SQL  statements     •  Unlimited:  everything  the  server  returns     20   shell> curl --user basic_auth_user:basic_auth_passwd --url "http://.../sql/db/SELECT+col_float+FROM+sql_types"
  21. 21. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   HTTP  Plugin  for  MySQL 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. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   MySQL  Binlog  Events 従来の名称は Binlog  API •  バイナリログを読むためのC++ライブラリ   •  マスタ上のバイナリログかファイルを直接読み込み   – 2タイプの"transport"   – TCP  Transport  &  File  Transport   •  バイナリログの各イベントをデコード   – イベントをデコードするコードを含む   •  イベントドリブンAPI   hbp://mysqlhighavailability.com/author/nehakumari/   22
  23. 23. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   MySQL  5.7:  JSON   •  参照が中心となる処理に最適化   •  ネイティブJSONデータ型   – バイナリフォーマットで格納され、処理や格納効率の向上を図る   •  ビルトインJSON関数群   – ドキュメントを効率的に検索、格納、更新、各種操作   – SQLでドキュメントのデータを簡単に操作   •  Generated  Columns(生成列)を使ってドキュメントのインデックスを作成     – InnoDBはSTOREDとVIRTUALの各タイプのGenerated  Columnsを利用可能   – 関数インデックスに該当するインデックスを用意   •  hbp://mysqlserverteam.com/json-­‐labs-­‐release-­‐overview/   23  
  24. 24. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   MySQL  5.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. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   MySQL  5.7:  JSON •  Document  ValidaIon   – on  insert  only     •  Efficient  Access   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. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   •  jsn_array() –  Build  a  JSON  array  from  list  of  expressions   •  jsn_object() –  Builds  JSON  objects  from  a  variable  length  list   of  key/value  pairs   •  jsn_insert() –  Adds  'missing'  data  to  JSON  documents   •  jsn_remove() –  Removes  abributes  from  exisIng  JSON   documents   •  jsn_set() –  Sets  abributes  within  JSON  documents   •  jsn_replace() –  Replaces  (but  doesn't  add)  abributes  within   JSON  documents   •  jsn_append() –  Adds  a  value  to  the  end  of  an  array   •  jsn_merge() –  Merges  two  arrays     •  jsn_extract() –  Returns  a  value  nested  inside  of  a  JSON   document   26   JSON  FuncIons  for  CreaIng  &  ManipulaIng    JSON  Documents  
  27. 27. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   •  jsn_search() –  Search  for  values  within  JSON  documents  and   return  their  locaIons   •  jsn_contains() –  Checks  for  a  specific  element  and  value   •  jsn_contains_path() –  Determine  if  a  specific  element  is  present  in  a   document  in  a  specific  posiIon   •  jsn_valid() –  Check  if  document  is  a  valid  JSON  document   •  jsn_type() –  Find  the  type  of  a  value  within  a  document   •  jsn_keys() –  Returns  arrays  of  the  key  names  for  the  JSON   documents   •  jsn_length() –  Number  of  elements  in  JSON  document   •  jsn_depth() –  Level  of  nesIng  in  JSON  document   •  jsn_unquote() –  Helps  move  from  JSON  to  other  MySQL  types   •  jsn_quote() –  Helps  move  from  other  MySQL  types  to  JSON   27   Query  and  Search  JSON  FuncIons  
  28. 28. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   Generated  Columns   •  Virtual  Generated  Column   – Generated  on  the  fly  when  the  column  is  read   – Can  be  indexed   •  Stored  Generated  Column   – Generated  when  the  referenced  column  is  wriben  to   – Can  be  indexed   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   Digging  into  your  Documents   labs.mysql.com  
  29. 29. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   •  コストやストレージを削減し、アプリ ケーション開発を簡単に   – ドキュメント間でのJOIN   – ドキュメント間での外部キー制約   – 同一トランザクション内で複数のドキュ メントの更新   •  全てのデータを活用可能に   – 単一のクエリ/トランザクションでドキュ メント内のデータとデーブルのデータを 参照更新   29   また新しいドキュメントデータベースが増える?  
  30. 30. Copyright  ©  2015  Oracle  and/or  its  affiliates.  All  rights  reserved.    |   The  world's  most  popular  open  source  database   世界で最も普及しているオープンソース データベース   30

×