使用相同的PartitionKey和RowKey

时间:2013-10-29 23:54:10

标签: azure azure-table-storage

我知道它有效但我想知道这是一个与PartitionKey和RowKey具有相同字符串的好习惯吗?

这个方案是针对一个单独的表,其中所有项都是唯一的,Customer表,其中每一行都有关于一个客户的信息。

我的意思是,例如,我将获得这个唯一的客户ID,我想用它来获取PartitionKey + RowKey的记录,这样返回的速度就会很快,而且只有一个项目。

您怎么看?

2 个答案:

答案 0 :(得分:16)

这肯定会让您的客户快速查找。 RowKey可以是一个空字符串,因此如果您为每个客户都有一个唯一的分区,那么从技术上讲,您不必使PartitionKey和Rowkey匹配。

这里需要注意几点:

  • 您放弃批量添加客户或批量更新客户。由于只能批处理同一分区中的实体,因此如果您有单个实体分区方案,则不会有批处理。鉴于你上面概述的内容,我认为这不会打扰你。
  • 针对partitionKey的任何类型的范围查询(例如1到200之间的所有客户)最终可能跨越多个分区服务器,这使得查询效率非常低。再说一次,如果你只是一次看一个客户,而不是成群结队,你应该没问题。可能想要考虑那种情况,你必须在你的系统中向每个客户添加一个属性,以及如果必要的话你将如何处理(具有一组已知客户ID的多线程更新程序可能就好了,但是你应该至少考虑一下。)
  • 尝试避免仅附加模式。这意味着如果您的客户ID是连续的,那么当您添加它们时,它们最初将位于同一个分区服务器上。只有在它们的一部分变热之后,才会将它们移到另一台服务器上。最好对ID进行哈希处理并将其用作PartitionKey,如果你开始真正对它们进行攻击,它将使它们分散在多个分区服务器上。根据您的负载,您可能实际上看不到这一点。

查看有关选择分区键的How to get most out of Windows Azure Tables文章。你会看到我在这里说的大部分内容(我从中学到的地方之一)还有更多。

答案 1 :(得分:1)

使用一致的字符串ID,“0”作为RowKey具有与双PK相同的唯一性结果。 PK + 0 = PK + PK。

实用的解决方案是考虑最常见的查询过程。您可以使用PartitionKey中的zip / pocode - 然后使用RowKey中的客户GUID。如果您的客户群遍布全国各地。 PartitionKey不需要PrimaryKey ...