tombo2-progress’s diary

できるだけ毎日1時間を切り取ってここに晒す。誤字脱字気にしない。日本語が崩壊するのも気にしない。最終的にまとめて本ブログに書く

x protocolはどんな感じか

MySQL 4.1くらいの時からMySQL通信プロトコルにはObsoletedなフィールドが多かったのでX protocolではどうなのか探してみた

https://dev.mysql.com/doc/internals/en/x-protocol-messages-messages.html#x-protocol-messages-message-structure

protocol bufferの構造体?の定義は結構変わっていて、それなりに効率的なものになっていそう。 相変わらずtotal_length[3], message_type[1]の4バイトが先頭にあるのは変わらないようだけど、message_typeを見るとCRUD_FIND, CRUD_INSERT,...というCRUDを表しそうなフィールドが見えるので、queryをそのまま文字列で送るとかっていう非効率なことは指定なさそう。

protocol bufferの定義は現在はX pluginとしてプラグインで提供されていて、コードだと、mysql-server/plugin/x/protocol 以下で見れる。 golangだと公式のSQLドライバーでは対応していないようで、ggるといくつかは出てくる。これとか

protocol bufferを言語側で扱うかよくわかっていないのだけれど、(上記のgo-mysqlx-driverだとmarshalしてる)Rust入門したらこういうところ作ると使われて良さそうと思った。