Azure Table 存储密钥延迟变化很大

Azure Table Storage key latency very variable

我们在查询我们的 Azure Table 存储数据时看到一些非常可变的延迟。我们有许多项目,每个项目都获取按天细分的时间序列数据,如下所示:

分区键:{DATA_TYPE}_{YYYMMdd} - 4 种不同的数据类型,总共约 2 年的数据

行键:{DataObjectId} - 每天大约 3-4,000 条记录。

记录本身是一个 JSON 编码的 dateTime 对象数组,每 15 分钟展开一次。

所以我想检索过去几天特定对象的时间序列数据,所以我构建了以下查询:

string.Format("(PartitionKey ge '{0}') and (PartitionKey le '{1}') and     (RowKey eq '{2}')", lowDate, highDate, DataObjectId);

如上所述,我们现在有超过 2-3 年的记录。

总的来说,查询时间相当快,为 600-800 毫秒,但是有一两次我们得到几个值,从这些分区检索数据似乎需要很长时间。即一个或两个查询花费了 50 秒加到 return 数据。

我们不知道系统负载过大。事实上,令人沮丧的是,我们在门户中发现的所有图表都表明没有真正的问题。

想到的一些建议:

1.) add year component first making the partition keys immediately more selective.

然而,最令人沮丧的是执行查询所花费的时间的变化。

Azure 门户中的 Azure 存储延迟平均约为 117.2 毫秒,报告的最大值为 294 毫秒。我将其解释为网络延迟。

当然可以收到任何建议。最让人头疼的是执行时间变化如此之大。在极少数情况下,我们看到我们的应用程序诉诸于使用延续令牌,因为查询已花费 5 秒以上才能完成。

https://msdn.microsoft.com/en-us/library/azure/dd179421.aspx

已经看了一段时间了。

我还没有找到为什么跨分区查询会遭受如此多变的延迟的答案。我原以为它可以很好地处理索引。

然而,解决方案似乎是简单地从 6 个不同的分区请求数据。因此,所有查询都利用了 Partitionkey 和 rowkey 索引。实施后,我们的查询开始更快地返回。

仍然想了解为什么跨分区查询看起来如此缓慢,但我只能假设查询导致了 table 具有可变延迟的扫描。