我有以下 Azure 存储表。
位置数据表:
PartitionKey: ClientID + VehicleID
RowKey: GUID
Properties: ClientID, VehicleID, DriverID, Date, GPSPosition
每辆车每年将为每位客户记录多达 1,000,000 个实体。每个客户可能拥有数千辆汽车。因此,我决定按ClientID
+进行分区,VehicleID
以便拥有更小的、可管理的分区。通过ClientID
and进行查询时VehicleID
,操作执行得很快,因为我们将搜索范围缩小到一个分区。
问题:
这里的问题是,有时我只需要查询ClientID
and DriverID
。因为不可能执行部分 PartitionKey 比较,所以需要扫描每个单独的分区。这会扼杀性能。
我不能有 all 的 PartitionKey ,ClientID
因为查询只会查询OR ,永远不会同时查询。VehicleID
DriverID
VehicleID
DriverID
解决方案 1:
我考虑过将一个值存储在其他地方,它代表一个 VehicleID 和 DriverID 对,然后有一个ClientID + VehicleDriverPairID
PartitionKey,但这会导致数十万个分区,并且在我的代码中分区之间会有很多数据联合。
解决方案 2:
有一个分区Client + VehicleID
和另一个分区Client + DriverID
。这意味着更新表的工作量是两倍(两次更新),但两个查询都会很快。也会有冗余数据。
这些解决方案中的任何一个听起来可行吗?其他解决方案?