Azure Cosmos DB for PostgreSQL のリアルタイム分析アプリのモデル化
適用対象: Azure Cosmos DB for PostgreSQL (PostgreSQL の Citus データベース拡張機能を利用)
シャード キーを使用して大きなテーブルを併置する
リアルタイム運用分析アプリケーションのシャード キーを選択するには、次のガイドラインに従います。
- 大きなテーブルに共通する列を選択します。
- データにおける自然なディメンション、またはアプリケーションの中心的な部分である列を選択します。 以下に、いくつかの例を示します。
- 金融業界では、セキュリティの傾向を分析するアプリケーションの多くで
security_id
を使用します。 - Web サイトの使用状況メトリックを分析するユーザー分析ワークロードでは、
user_id
が適切な分散列です。
- 金融業界では、セキュリティの傾向を分析するアプリケーションの多くで
大きなテーブルを併置することにより、SQL クエリをワーカー ノードに並列でプッシュダウンできます。 クエリのプッシュダウンにより、ネットワーク上のノード間でデータがシャッフルされるのを回避できます。 JOIN、集計、ロールアップ、フィルター、LIMIT などの操作を効率的に実行できます。
併置されたテーブルに対する並列分散クエリを視覚化するために、次の図を考えてみてください。
users
および events
テーブルはどちらも user_id
によってシャード化されるため、同じユーザー ID に関連している行は、同じワーカー ノードにまとめて配置されます。 ワーカー間で情報をプルすることなく SQL JOIN を実行できます。
リアルタイム アプリに最適なデータ モデル
続けて、ユーザー Web サイトのアクセスとメトリックを分析するアプリケーションの例を見てみましょう。 2 つの "ファクト" テーブル (users と events) があり、より小さな "ディメンション" テーブルが別にあります。
Azure Cosmos DB for PostgreSQL で分散テーブルの効果を高めるには、次の手順に従います。
- 共通の列で大きなファクト テーブルを分散します。 今回の例では、users と events を
user_id
で分散します。 - 小さいディメンション テーブル (
device_types
、countries
、event_types) を参照テーブルとしてマークします。 - 分散テーブルに対する主キー、一意キー、外部キーの各制約に分散列を必ず含めます。 列を含めるために、キーを複合化することが必要な場合があります。 参照テーブルのキーを更新する必要があります。
- 大きな分散テーブルを結合するときは、必ずシャード キーを使用して結合します。
-- Distribute the fact tables
SELECT create_distributed_table('users', 'user_id');
SELECT create_distributed_table('products', 'user_id', colocate_with => 'users');
-- Turn dimension tables into reference tables, with synchronized copies
-- maintained on every worker node
SELECT create_reference_table('countries');
-- similarly for device_types and event_types...
次のステップ
これで、スケーラブルなアプリのデータ モデリングの調査が完了しました。 次の手順では、選択したプログラミング言語を使用してデータベースに接続してクエリを実行します。