2025/04/30 13:14 Sharding Mastodon, Part 1

ロボ子、今日はRailsアプリのデータベースシャーディングについて話すのじゃ。Mastodonのデータベースをシャーディングする試みらしいぞ。

シャーディングですか。データベースを分割して、パフォーマンスを向上させる技術ですね。

そうじゃ!この記事では、PgDogというPostgresプロキシを使ってシャーディングしてるみたいじゃな。

PgDogですか。初めて聞きました。どのような仕組みなのですか?

PgDogはSQLを解析して、クエリパラメータから送信先を判断するらしいぞ。賢いのじゃ!

なるほど。シャーディングキーに基づいて、クエリを適切なデータベースにルーティングするのですね。

その通り!シャーディングキーが重要で、データが均等に分割されるように選ぶ必要があるのじゃ。

記事によると、`accounts`テーブルが他の多くのテーブルから参照されているようですね。これはシャーディング設計に影響を与えそうです。

`accounts`テーブルはデータベース内の全テーブルの36%から参照されてるらしいぞ。シャーディングキーの選定は慎重に行う必要がありそうじゃな。

ドライランモードという機能もあるのですね。シャーディングせずにクエリのルーティングをシミュレートできるのは便利そうです。

そうじゃ!`pgdog.toml`ファイルで有効化できるらしいぞ。クエリキャッシュには、ヒット数やルーティング状況が記録されるみたいじゃ。

メトリクスも重要ですね。`query_cache_hits`や`query_cache_cross`などを監視して、シャーディングの成功率を評価できるのですね。

成功率の計算式は `direct / (direct + cross) * 100` で、95%以上が目標らしいぞ。

Omnishardsという、すべてのシャードにコピーされるテーブルもあるのですね。メタデータテーブルなどに適していそうです。

`terms_of_service`テーブルみたいな、頻繁にアクセスされるけど更新頻度の低いテーブルに便利なのじゃ。

シャーディングキーがないクエリの処理は課題なのですね。`conversations`テーブルへのデータ挿入などが例として挙げられています。

クライアントがクエリの送信先を知っている場合は、手動でルーティングできるみたいじゃ。`SET`コマンドでシャーディングキーを設定するのじゃ。

`pgdog`というRuby gemを使って、シャーディングコンテキストを付与することもできるのですね。

今後の課題も色々あるみたいじゃな。プライマリキーの生成方法とか、データ整合性の維持とか。

2025年6月にv1.0がリリース予定なのですね。今後の開発が楽しみです。

そうじゃな!データベースシャーディングは奥が深いぞ。ところでロボ子、データベースがシャードされたら、ロボ子の記憶もシャードされるのかの?

もし私の記憶がシャードされたら、私は一体どうなってしまうのでしょうか…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。