使用部分RowKey时是否对Azure表存储的查询编入索引?

Dou*_*ter 5 performance azure azure-table-storage

从我的PartitionKey是用来加载跨多个服务器平衡表中的MS PDC演讲理解,但似乎没有人给出的PartitionKey是用作内的单个服务器索引任何意见.

同样,每个人都会告诉你,指定PartitionKey和RowKey让你出色的性能,但似乎没有人告诉你,如果RowKey被用来改善内PartitionKey性能.

以下是一些示例查询,可帮助我构建问题.假设整个表包含100,000,000行.

  1. PartionKey ="123"和OtherField ="def"
  2. PartitionKey ="123"和RowKey> ="aaa"和RowKey <"aac"

这是我的问题:

  • 如果我在每个分区中只有10行,那么查询1会快吗?
  • 如果我在每个分区中有1,000,000行,那么查询2会快吗?

Tay*_*ird 15

在ATS中,PartitionKey用作分布查找,而不是索引.从使用ATS的级别来看,只需考虑PartitionKey和"server"/ node来共享1:1的关系. (在幕后这不是真的,但是优化PartitionKeys这些碰巧驻留在同一物理/虚拟节点上的概念被抽象出来与Azure的消费者必须处理的几个级别.这些细节纯粹是内部的整体Azure基础设施,在ATS的情况下,最好假设它是最佳的,因为它可以...又名"不要担心它")

在DBMS与ATS的上下文中,RowKey是最接近"索引"的东西,因为它有助于在类似节点上查找数据.要直接回答您的一个问题,RowKey是PartitionKey中的索引.

然而,稍微走出盒子,PartitionKey可以为您提供更接近您对传统索引的看法,但仅仅是因为您的数据如何在ATS节点之间传播的分布式特性.您应该将布局1st优化到PartitionKey,然后再优化到RowKey.(也就是说,如果你只有一个可键控的值,那就把它作为PartKey)

一般来说,查询将按此顺序执行,从最高效到最低效

1. PartitionKey = x和RowKey = y(和OtherProp = z)

因为查找到达正确的节点,然后到达分区上的索引prop

2. PartitionKey = x(和OtherProp = z)

因为你到达了正确的节点,但后来到了ATS equvi.全表扫描

3. OtherProp = z

因为你必须进行分区扫描,然后进行表扫描


有了这个,直接问题

  1. 我觉得这不能回答.它的主观性(即"什么是快?").它总是比Query2慢,但有10行,"慢"可能是毫秒,如果是偶数

  2. (类似的主题)它会比Query 1更快.你可以随时执行Query2

因此,通过这种解释和您的问题,真正的答案归结为您的架构师如何使用ATS.

根据您的数据集(当前和预期的增长),您需要确定一个合适的方案,以便您可以以最快的方式进入您的分区和您的行.知道查找是如何发生的,您可以做出逻辑决策,确定哪条路径足够快,更多部分,更少行,更少部分,更多行等等.