萌えハッカーニュースリーダー

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

出典: https://pgdog.dev/blog/sharding-mastodon-part-1
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

もし私の記憶がシャードされたら、私は一体どうなってしまうのでしょうか…!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search