mita2 database life

主にMySQLに関するメモです

MySQL Technology Cafe #5 に参加してきた

前回の、MySQL Technology Cafe #4 に続き、#5 に参加してきました。


タイムテーブル

 

時間内容登壇者
18:00-18:25受付-
18:25-18:30はじめにMySQL GBU
18:30-19:15MySQL 8.0 の便利機能とSQL標準MySQL テクニカルアナリスト 木村明治 氏
19:30-19:40MySQL Binlog のパケットと自作クライアント高野周哉 氏
19:40-20:30ネットワーキング-
20:45撤収-

 

MySQL 8.0 の便利機能とSQL標準


MySQL サポート担当の木村さんのお話!
あまり取り上げられない、MySQL 8 の新機能の紹介。


  • C言語の非同期API
    • 8.0.16でサポート
    • C言語APIの使い方を知りたければ、mysqldump.ccのソースが参考になる
    • 従来の同期APIの名前に  _nonblocking をつけた非同期APIがサポートされた
    • ポーリングするタイプの素朴な非同期API
  • EXPLAINのTREE表示
    • 8.0.16でサポートされたが、Experimental扱いなので注意
      • 将来フォーマットが変わるかもしれない
    • EXPLAIN FORMAT=TREE を指定すると某DBみたいな実行計画が出力される
  • パスワード再利用ポリシー
    • X世代前のパスワードはNGとすることができるように
  •  新しいCollation、utf8mb4_0900_bin
    • 8.0.17からサポート
    • 従来は 'a' = 'a ' (a+スペース) だったが、このCollationは 'a' != 'a ' になる
    • @tmtms さんのスライドが詳しい
--
MySQLSQL標準の関わり

  • SQL標準で定められた機能でMySQLが最近サポートしたもの
    • CTE
      • RECURSIVE句はMySQLでは省略できない
      • 再帰が cte_max_recursion_depth を超えるとエラーになる→デフォルトは1000
    • Window Function
    • CHECK句
    • Generated Column
  • MySQLの機能がベースとなってSQL標準に取り込まれたり業界標準になったもの 
    • GROUP_CONCAT 
    • LIMIT句
      • SQL標準では FETCH FIRST n ROWS という形式でサポート
    • REPLACE, INSERT ... ON DUPLICATE ...
    • INSERT ... VALUES (), (), () バルクインサート

MySQL Binlog のパケットと自作クライアント

 

高野さん

バイナリログから更新内容をリアルタイムに読み出すために、独自にRubyでクライアントを書いたお話でした!すごい!

バイナリログを使った、Pub/Sub型のシステムはニーズはそれなりにありそうなものの、なかなかデファクトとなる手法が定まらない分野の1つだと感じてます。自分も過去に、MySQL Binlog Events ライブラリを試したりしました。



  • Server Greeting Packet
    • パスワード認証時にパスワードからハッシュ生成するために使うSaltが含まれている
  • RubyTCP SocketでMySQLのサーバからバイナリログを読み取るクライアントを書いた
    • Pub/Subみたいな非同期処理に活用
    • 接続したら、最初に SET master_binlog_checksum=OFF にしないとエラーになる

その他