次のAzureストレージテーブルがあります。
PositionDataテーブル:
PartitionKey: ClientID + VehicleID
RowKey: GUID
Properties: ClientID, VehicleID, DriverID, Date, GPSPosition
各車両は、クライアントごとに年間最大1,000,000エンティティをログに記録します。各クライアントは数千台の車両を所有する可能性があります。そこで、小さくて管理しやすいパーティションにするために、 ClientID+でパーティション化することにしました。とでVehicleIDクエリを実行する場合、検索を1つのパーティションに絞り込んでいるため、操作は迅速に実行されます。ClientIDVehicleID
問題:
ここでの問題は、とだけClientIDでクエリを実行する必要がある場合があることDriverIDです。部分的なPartitionKey比較を実行することはできないため、すべてのパーティションをスキャンする必要があります。これにより、パフォーマンスが低下します。
すべてのPartitionKeyを使用することはできませんClientID。VehicleIDまたDriverID、クエリはVehicleIDORDriverIDでのみクエリを実行するため、両方でクエリを実行することはできません。
解決策1:
VehicleIDとDriverIDのペアを表す値を他の場所に格納し、次にClientID + VehicleDriverPairIDPartitionKeyを使用することを検討しましたが、その結果、数十万のパーティションが作成され、コード内のパーティション間でデータが大幅に結合されます。
解決策2:
のパーティションClient + VehicleIDとの別のパーティションがありClient + DriverIDます。つまり、テーブルの更新は2倍の作業(2回の更新)ですが、どちらのクエリも高速になります。また、冗長データがあります。
これらのソリューションのいずれかが実行可能に聞こえますか?他の解決策?