gpt4 book ai didi

具有多个查询点的 Azure 存储表设计

转载 作者:行者123 更新时间:2023-12-02 07:37:31 25 4
gpt4 key购买 nike

我有以下 Azure 存储表。

位置数据表:

PartitionKey: ClientID + VehicleID 
RowKey: GUID
Properties: ClientID, VehicleID, DriverID, Date, GPSPosition

每个客户每年每辆车最多会记录 1,000,000 个实体。每个客户可以拥有数千辆汽车。因此,我决定按 ClientID + VehicleID 进行分区,以便拥有小型且易于管理的分区。当通过 ClientIDVehicleID 查询时,该操作执行得很快,因为我们将搜索范围缩小到一个分区。

问题:

这里的问题是,有时我只需要查询 ClientIDDriverID。由于无法执行部分 PartitionKey 比较,因此需要扫描每个分区。这会降低性能。

我无法拥有包含所有 ClientIDVehicleIDDriverID 的 PartitionKey,因为查询只会查询 VehicleIDDriverID,但不能两者兼而有之。

解决方案 1:

我考虑过在其他地方存储一个代表 VehicleID 和 DriverID 对的值,然后使用 ClientID + VehicleDriverPairID PartitionKey,但这会导致数十万个分区,并且会有很多联合我的代码中分区之间的数据。

解决方案 2:

有一个用于 Client + VehicleID 的分区,另一个用于 Client + DriverID 的分区。这意味着更新表的工作量是原来的两倍(两次更新),但两个查询都会很快。而且还会有冗余数据。

这些解决方案听起来可行吗?其他解决方案?

最佳答案

您应该复制记录,如解决方案 2 中所示。我建议保留一个副本,其中每个记录都位于其自己的分区中,因此也按 VehiculeId 分区,这将使更新所有副本变得更容易,从vehicleid 开始,传播给其他人。

存储数据确实很便宜,查询则很麻烦,除非你预先正确存储它。所以我的建议是:重复!

关于具有多个查询点的 Azure 存储表设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15133968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com