仕組みからTiDBを理解するためにどのように学習をしたのか
はじめに
約1年ほどTiDB移行プロジェクトでリードっぽいことをやっていたので、TiDBどのようにキャッチアップをしていたのか、どのような資料を読んでいたのかについてご紹介します。
分散DBではあるもののMySQL互換性が高い関係で中身の仕組みがうまいこと隠蔽されているため、TiDBのアーキテクチャやユースケースからキャッチアップしていくのがコツです。
対象読者
- TiDBを使って開発/運用を行う開発者
- TiDB上でサービス運用を行っているPDM
- TiDBの仕組みが気になる人
レベル1: 10分でTiDBのアーキテクチャと強み弱みを理解する
とりあえずざっくり把握したいという人は、他社の導入事例を元にTiDBがどのような理由で技術選定されているか確認してみると良いです。
ex. 私たちはなぜNewSQLを使うのかTiDB選定5社が語る選定理由と活用LT【イベントレポート】
RDBレベルの強整合性を保ちつつ、スケーラビリティとか可用性が高いんだなぁみたいなイメージが付けばOKです。
あとは、公式資料であるTiDB DocsのArchitecture Overviewの図でざっくり理解するのもおすすめです。
ひとまず、複数のサーバが上手い事連携して動作しているんだなというイメージが持てればOK。
https://docs.pingcap.com/ja/tidbcloud/tidb-architecture/
ここで公式資料であるTiDB Docsを読む際の注意点についても共有します。
- TiDB Docsの日本語ページは翻訳の精度が微妙でわかりにく点が多いので注意。
- 英語版に存在するページが日本語版に存在しなかったりする。正しい情報は英語版を見るようにした方が良い。
レベル2: TiDBの仕組みを理解する
アプリ開発者、インフラ担当の方については、TiDBの仕組みまで知っておけると運用イメージが湧くのでおすすめです。
分散ノードが協調動作しており、シャットダウンを伴うクラスター操作時はローリングアップデートされるのでクラスターを停止せずに操作ができるなみたいなことを知っていると、運用時にどこまで気を遣えばいいのかイメージが湧くと思います。
- TiDB, NewSQLの仕組みやユースケースについて本で学ぶ
- TiDB実践入門 https://amzn.asia/d/0fhLmdMy
- わかばちゃんとつくって、壊して、直して学ぶ NewSQL入門 https://amzn.asia/d/06CyTLEz
- NewSQL徹底入門 分散DBのアーキテクチャからユースケースまで https://amzn.asia/d/09CdE8th
- PingCap社主催のワークショップに参加する
- 座学でTiDBの仕組みを学ぶ
- TiDB Labsで実際にTiDB Cloudを動かしながら学ぶ https://labs.tidb.io/ja
- TiDB User Day(カンファレンス)に参加して、他社がTiDB利用時に直面した課題について学ぶ
レベル3: TiDBの内部実装を理解する
TiDBに関する資料はTiDB Docsという公式資料を当たれば良いのですが、ドキュメント化されていない仕様なども存在します。
例えば、TiDBのAUTO INCREMENTでは、TiDB ServerのノードごとにN件のIDを事前にキャッシュしており、再起動時はさらにN件確保し直すという挙動を取ります。
このキャッシュする件数はTiDB Docsには記載がなく、ソースコードの定数でハードコードされているので、このような仕様を把握するために、ソースコードをcloneしておいてAIにコードから仕様を調べさせることができると便利です。
- TiDBのソースコードを読んで理解を深める
- ソースコードをcloneしてビルドする
- ソースコードをcloneしてAIに質問する
- 組み込み関数を実装してみる
- TiDBのDesign Docsを読んで、機能の背景を知る
レベル4: TiDBを支える基礎技術について理解を深める
ここからは半分趣味の領域に入ります。
TiDBはインターフェースはMySQL互換性が高いですが、ストレージ技術だったりは全く異なる技術が採用されています。
具体的には、B TreeではなくLSM Treeというものを使っていたりします。
このLSM Treeは何が嬉しいのか、どのような仕組みなのか知りたいなと思った人は以下の資料で学んでみてください。
- 分散システム, データベース関連の本でTiDBを支える基礎技術について理解を深める
- データ指向アプリケーションデザイン, https://amzn.asia/d/07zEYYAE
- 分散合意アルゴリズム周り
- 詳説データベース https://amzn.asia/d/08ochcNo
- LSM Tree
- 大規模データセットのためのアルゴリズムとデータ構造 https://amzn.asia/d/00uxLzsd
- LSM Tree, Bloom filterなど
- データ指向アプリケーションデザイン, https://amzn.asia/d/07zEYYAE
- 分散合意アルゴリズムの論文を読んでみる
半分趣味の領域と書きましたが、ここら辺の要素技術の仕組みを理解しておくと、その要素技術が使われているからどういった点が性能問題に発展しやすいだろうみたいな感覚を養うことができるのではないかと思っています。
例えば、LSMツリーの仕組み上、更新系は早くなりそうだが、参照系はBツリーより遅くなりそうだな、、、そもそも分散DBである時点でネットワークI/O分も乗っかるしな、、、参照系のパフォーマンスは注意して見ておこう、、みたいな感じで考えられるようになる気がします。
知らんけど。
レベル5: TiDBにPRを送る
コントリビュート具合によってはpingcapに入社できます卍