itochin2の日記(仮)

主に備忘録。Perl、MySQL、Unity、開発管理などについて情報を残していきたい。

Shardingしているdatabaseを跨いでselectとかできるツールを作った

github.com

Shardingって何?なんでこんなツール必要なの?
というのは以下の素晴らしいエントリに全て書かれているので省略。
techblog.kayac.com

この記事は本当に分かりみが深い。
Shardingはとにかくダルくて、これは経験した人じゃないと分からないと思う。

shardingされたレコードを探す時、手動だとこんな感じ。

  • どこのshardにあるの?というのを確認する
  • 確認した情報をもとに、DBに接続する

2段階踏まないとならないのがまず面倒で、更に接続するshardごとにhost違うとこんな有様に。。

mysql -u root -h db01 shard1
mysql -u root -h db02 shard2
mysql -u root -h db03 shard3
:
:

最初は`alias`で乗り切ろうと思ったけど、乗り切れないよこんなの・・・ 😂
そこで、「Shardingしているdatabaseを跨いでselectとかできるツール」の出番です。

MySQL::Sharding::Clientを使わないで作り直した理由

https://github.com/ken39arg/p5-MySQL-Sharding-Client
もうこれがあるのだから、車輪の再開発では?という感じではあるのだけど、

  • コマンドの履歴使いたかった(↑押してidだけ書き換えて実行したい)
  • `exit`でpromptを抜けたかった
  • SELECTだけじゃなくてALTERもやりたい(開発環境で全shardにALTERするのが本当に面倒)
  • perlの環境構築しなくても使える

ツールっていつも使ってるのと同じ感じに使いたくて、
クエリのヒストリーを使いたいというのが最大のモチベーションだった。

作ってみて

  • `go-prompt`はすごいライブラリ。
  • mysqlの表示、文字列は左寄せで数値は右寄せ


失って気づくINNER JOINの大切さ。