使用相同的PartitionKey和RowKey

use*_*430 5 azure azure-table-storage

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

这个场景是针对一个表,其中所有项都是唯一的,Customer表中每行都有关于一个客户的信息.

我的意思是,例如,我将获得这个唯一的客户ID,我想用它来获取PartitionKey + RowKey的记录,因此返回将是快速和单个项目.

你怎么看?

Mik*_*eWo 16

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

这里有几点需要注意:

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

有关选择分区键的文章,请查看如何充分利用Windows Azure Tables文章.你会看到我在这里说的大部分内容(我从中学到的地方之一)还有更多.