マニアックなイベント に来てますので、メモを残しています。
XProtocol始めました、Haskellで / Naoto Ogawaさん
- 意外とHaskellの人が多いかな、と
- haskellとMySQLで半分半分
- XProtocol
- XDev API
- EBNFの定義がある
- BNFとは? → 文法を定義したもの
- 複数DBサーバのコネクション管理も含む(理解しきれてないけど)
- XPluginをMySQLへインストールする
- Xdev API経由でユーザプログラムが利用
world_x
データベースをサンプルとしてインストールしておくと良いmysqlx.so
を入れるmysqlsh
- XProtocolのドライバが文字列の式を解釈して、XProtocolにしてあげなければならない
- 昔のドライバは、サーバ側でSQLをパースしている
- XProtocolとして生のSQLを投げることは可能
.find
とかを使って、一部だけをSQLにするとかはダメ
- 様々な知識が必要だが、今日は「XProtocolの仕様」と「ProtocolBufferの理解」
- .proto ファイルにも仕様が書かれているので、読んだほうがいい
- .proto ファイルから、ツールを使って各言語のオブジェクトを生成する
- XProtocol
Find
メッセージcollection
スキーマやテーブルcriteria
WHERE句args
バインドgrouping_criteria
having句17
CRUD_FIND
- protobuf は、フィールド名は送っていない。数字のタグのみ
- protoファイルに定義されている
本当はこわいMySQLプロトコル / tmtmsさん
- Rubyで MySQL X Protocol 作ってたけど、今日は古いプロトコルの話
- 参照系: フィールド数でループ。レコードはEOFまで
- クライアントはクエリが更新系か参照系かは知ってない
- サーバから戻ってくるフィールド数を見て、判断する
LOAD DATA LOCAL INFILE
- クエリをサーバが解釈。ファイル名をサーバに教えてもらう(!)
- Proxyでサーバ名を書き換えることができる!
- Proxyはクエリを
LOAD DATA LOCAL INFILE
に書き換えることができる(!!!)
- 対策
- SSL接続
- クライアント側で
LOCAL INFILE
を無効化
XProtocol始めました、Haskellで(後半) / Naoto Ogawaさん
- 結果セット
Row
メッセージ Expr
で表現- LITERAL Scalar V_SINT
- ProtocolBufferのzigzag encoding
-99
は197
となる
- 関数はドライバが文字列をパースして
XProtocol
の表現に - パイプライン
- エラー処理
Error
メッセージとして却ってくる- protoファイル側に書いてある
- XProtocolの注意
- ObjectとErrorが2箇所くらいある
- protoファイルごとに名前空間を変えてみては?
- ドライバの設計
- 型の整合性とか
- 正常であればメッセージがあるケースとか
- ドライバのレイヤの厚さは?
- 依存を少なくしたいとか
- haskellのライブラリ
- XDev APIのEBNFには従ってない
- XProtocolっが正しく吐ければいい
- 展望
- 交渉、ストリーミング、データ型、結果セット分割、などなど
- MySQL5.7で試している
- bindの謎の文字列は、文字列じゃなくていいでしょ
- 「RubyでのXProtocolの実装を再開しようかな」
- このプロトコルはGA?? わからず
- プロトコルオタク的には楽しいけど、一般人の用途は・・・?
この会について
- いつもは短い話を聞く会
- 長くじっくり聞く会として、この会を開いている
- また来てください