我是 Azure 表的新手,读过很多文章,但鉴于其基本原理,希望对上述内容有所保证。
我有与此类似的数据:
CustomerId, GUID
TripId, GUID
JourneyStep, GUID
Time, DataTime
AverageSpeed, int
根据我所读到的内容,CustomerId
是一个好的 PartitionKey 吗?我遇到困难的地方是 CustomerId
和 TripId
的组合不能形成唯一的行。我将 TripId
作为行键的理由是因为每个查询都将是基于 CustomerId
和 TripId
的数据集。
仅就上下文而言,CustomerId
显然是唯一的,TripId
代表车辆的一次旅程,而在该旅程中,JourneyStep
代表一次旅程该行程中的单位可能是 10 步或 1000。
目的是将数据聚合到更多表中,每个级别用于不同的目的。在最聚合的层面上,客户将获得一些分数。
数据量显然会很大,因此需要从一开始就考虑查询性能。
更新:
根据要求,该解决方案适用于车辆远程信息处理,因此请想象一下您自己在自己的汽车中。 Blackbox 将数据发送到服务器,然后服务器将其传递到 Azure 表。在关系数据库术语中,我将有一个客户表和一个带有返回客户表的外键的行程表。
tripId
由黑盒自动生成。从查询的角度来看,TripId
不需要按日期时间存储,但从查询性能的角度来看可能是相关的。
查询将分为两部分:
显示每个客户的单个旅程的 map ,因此先按客户筛选,然后按行程筛选,然后将每一行(旅程步骤)迭代到 map 。
对于每个客户,我会对每次行程进行评分,然后检索上个月的行程来汇总分数。我确实有 SQL 数据库来通过客户记录等丰富数据,但对于批量数据(行程数据),我希望使用 Azure 表。
第二个查询的聚合可能会存储在一个单独的表中,因此,如果有人在一个月内进行了 10 次旅行,我将运行第二个查询,对每次旅行进行评分,然后为该月的所有旅行生成一个分数,存储这两个答案,因此可能会存储一个旅行汇总表和一个每月汇总表。
最佳答案
分区键的特点是它代表一个逻辑分组;例如,您不能插入跨多个分区键的数据。同样,具有相同分区的行可能存储在同一服务器上,从而可以快速检索给定分区键的所有数据。
因此,查看您的域并找出您可能使用的聚合非常重要。
如果我正确理解您的域模型,我实际上会很想使用 TripId 作为分区键,使用 JourneyStep 作为行键。 您将需要单独拥有一个表,列出属于给定客户的所有行程 ID - 这很有意义,因为您可能想在这样的表中存储一些数据,例如“行程名称”等。
关于Azure 表 - 分区键和行键 - 正确选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20785329/