次の方法で共有


Azure Cosmos DB for PostgreSQL で高スループット トランザクション アプリをモデル化する

適用対象: Azure Cosmos DB for PostgreSQL (PostgreSQL の Citus データベース拡張機能を利用)

シャード キーとしての共通フィルター

高スループット トランザクション アプリケーションのシャード キーを選択するには、次のガイドラインに従います。

  • ポイント検索に使用され、ほとんどの作成、読み取り、更新、削除操作に存在する列を選択します。
  • データにおける自然なディメンション、またはアプリケーションの中心的な部分である列を選択します。 例:
    • IoT ワークロードでは、device_id が適切な分散列です。

適切なシャード キーの選択により、ネットワーク ホップが最適化される一方で、メモリとコンピューティングを効率的に利用してミリ秒単位の待機時間を実現できます。

高スループット アプリに最適なデータ モデル

デバイスからテレメトリ (時系列データ) をキャプチャする IoT アプリのサンプル データ モデルの例を次に示します。 テレメトリをキャプチャするための 2 つのテーブル devicesevents があります。 他のテーブルも存在する可能性がありますが、この例では扱っていません。

イベントとデバイス テーブル、およびイベントのパーティションの図。

高スループット アプリを構築するときは、常に、何らかの最適化を念頭に置いてください。

  • アプリの中心となる共通の列と、アプリが主にクエリを実行する列に大きなテーブルを分散します。 上記の IoT アプリの例では、device_id がその列であり、イベントとデバイス テーブルを併置します。
  • 残りの小さなテーブルは参照テーブルにすることができます。
  • IoT アプリには時間ディメンションがあるため、時間に基づいて分散テーブルをパーティション分割します。 Azure Cosmos DB for PostgreSQL のネイティブの時系列機能を使用して、パーティションを作成および保守できます。
    • パーティション分割は、時間フィルターを使用してクエリのデータを効率的にフィルター処理するのに役立ちます。
    • DROP または DELETE コマンドを使用して、古いデータの期限切れ処理も高速化します。
    • この例のイベント テーブルは、月によってパーティション分割されます。
  • JSONB データ型を使用して半構造化データを格納します。 デバイス テレメトリ データは通常、構造化されておらず、すべてのデバイスに独自のメトリックがあります。
    • この例では、イベント テーブルに detail 列があり、これは JSONB です。
  • IoT アプリに地理空間機能が必要な場合は、Azure Cosmos DB for PostgreSQL がネイティブでサポートする PostGIS 拡張機能を使用できます。

次のステップ

これで、スケーラブルなアプリのデータ モデリングの調査が完了しました。 次の手順では、選択したプログラミング言語を使用してデータベースに接続してクエリを実行します。