Azure 表 - 分区键和行键 - 正确选择

标签 azure azure-table-storage

我是 Azure 表的新手,读过很多文章,但鉴于其基本原理,希望对上述内容有所保证。

我有与此类似的数据:

CustomerId, GUID
TripId, GUID
JourneyStep, GUID
Time, DataTime
AverageSpeed, int

根据我所读到的内容,CustomerId 是一个好的 PartitionKey 吗?我遇到困难的地方是 CustomerIdTripId 的组合不能形成唯一的行。我将 TripId 作为行键的理由是因为每个查询都将是基于 CustomerIdTripId 的数据集。

仅就上下文而言,CustomerId 显然是唯一的,TripId 代表车辆的一次旅程,而在该旅程中,JourneyStep 代表一次旅程该行程中的单位可能是 10 步或 1000。

目的是将数据聚合到更多表中,每个级别用于不同的目的。在最聚合的层面上,客户将获得一些分数。

数据量显然会很大,因此需要从一开始就考虑查询性能。

更新:

根据要求,该解决方案适用于车辆远程信息处理,因此请想象一下您自己在自己的汽车中。 Blackbox 将数据发送到服务器,然后服务器将其传递到 Azure 表。在关系数据库术语中,我将有一个客户表和一个带有返回客户表的外键的行程表。

tripId由黑盒自动生成。从查询的角度来看,TripId 不需要按日期时间存储,但从查询性能的角度来看可能是相关的。

查询将分为两部分:

  1. 显示每个客户的单个旅程的 map ,因此先按客户筛选,然后按行程筛选,然后将每一行(旅程步骤)迭代到 map 。

  2. 对于每个客户,我会对每次行程进行评分,然后检索上个月的行程来汇总分数。我确实有 SQL 数据库来通过客户记录等丰富数据,但对于批量数据(行程数据),我希望使用 Azure 表。

第二个查询的聚合可能会存储在一个单独的表中,因此,如果有人在一个月内进行了 10 次旅行,我将运行第二个查询,对每次旅行进行评分,然后为该月的所有旅行生成一个分数,存储这两个答案,因此可能会存储一个旅行汇总表和一个每月汇总表。

最佳答案

分区键的特点是它代表一个逻辑分组;例如,您不能插入跨多个分区键的数据。同样,具有相同分区的行可能存储在同一服务器上,从而可以快速检索给定分区键的所有数据。

因此,查看您的域并找出您可能使用的聚合非常重要。

如果我正确理解您的域模型,我实际上会很想使用 TripId 作为分区键,使用 JourneyStep 作为行键。 您将需要单独拥有一个表,列出属于给定客户的所有行程 ID - 这很有意义,因为您可能想在这样的表中存储一些数据,例如“行程名称”等。

关于Azure 表 - 分区键和行键 - 正确选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20785329/

相关文章:

azure - 如何将 <clientCache/> 设置应用于 IIS 中的特定扩展?

Azure 应用程序注册不会出现在企业应用程序中

c# - 设置表存储执行查询时网络故障超时

Azure 表存储 - 实体设计最佳实践问题

azure - Azure 表存储查询 PartitionKey/RowKey 列表的速度非常慢

Java:Azure服务总线队列通过 session 接收消息

azure - 持续集成 SSAS 表格并将其部署到 Azure Analysis Services

c# - 从 Azure 数据湖下载文件

c# - Azure存储表-插入批量行并检查它们是否存在

azure - 通过 WebJobs 重新排队或删除 Azure 存储队列中的消息