【发布时间】:2014-05-27 04:15:11
【问题描述】:
我是 Azure 表的新手,并且阅读了很多文章,但鉴于其基本原理,我希望对上述内容有所保证。
我有类似这样的数据:
CustomerId, GUID
TripId, GUID
JourneyStep, GUID
Time, DataTime
AverageSpeed, int
根据我的阅读,CustomerId 是一个好的 PartitionKey 吗?我被卡住的地方是CustomerId 和TripId 的组合,它们不会构成唯一的行。我之所以将TripId 作为行键是因为每个查询都是基于CustomerId 和TripId 的数据集。
就上下文而言,CustomerId 显然是独一无二的,TripId 代表车辆中的一个旅程,而在该旅程中,JourneyStep 代表该旅程中的一个单位,可能是 10 步或 1000 步。
目的是将数据聚合到更多的表中,每个级别用于不同的目的。在最汇总的级别上,客户将获得一些分数。
数据量显然会很大,因此需要从一开始就考虑查询性能。
更新:
根据要求,该解决方案适用于 Vehicle Telematics,因此请在您自己的汽车中思考自己。 Blackbox 将数据传送到服务器,然后将其传递到 Azure Tables。在关系数据库术语中,我将有一个客户表和一个带有返回客户表的外键的行程表。
tripId 是由黑盒自动生成的。从查询的角度来看,TripId 不需要按日期时间存储,但从查询性能的角度来看可能是相关的。
查询将分为两部分:
为每个客户显示单个旅程的地图,因此按客户和行程过滤,然后将每一行(旅程步骤)迭代到地图。
我将对每个客户的每次行程进行评分,然后检索例如上个月的行程以汇总分数。我确实有 SQL 数据库来丰富客户记录等数据,但对于体积数据(行程数据),我希望使用 Azure 表。
第二个查询的汇总可能会存储在一个单独的表中,因此如果有人在一个月内进行了 10 次旅行,我将运行第二个查询,该查询将对每次旅行进行评分,然后为该月的所有旅行生成一个分数,然后存储这两个答案,因此可能是一张旅行汇总表和一张每月汇总表。
【问题讨论】:
-
对于特定的
CustomerId,TripId是唯一的吗? -
Gaurav,否 - 一位客户将有多次旅行。唯一唯一的组合是 CustomerId 和 Time,但从查询的角度来看,很少使用。 'CustomerId 和 TripId 的组合不构成唯一行'
-
那么很遗憾你不能使用 TripId 作为 RowKey。在一个分区内,RowKey 必须是唯一的。
-
啊,这就是我所担心的。如果我对唯一的 RowID 使用时间,那么在每个查询都包含 TripID 的情况下,查询性能的最佳方法是什么?我可以在 TripId 上附加一些东西来制作一个唯一的行键,但我想在非常查询中将它们拆分出来。