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