7

我知道它正在工作,但我想知道这是使用与 PartitionKey 和 RowKey 相同的字符串的好习惯?

这种情况适用于所有项目都是唯一的单个表,Customer其中每一行都包含有关单个客户的信息的表。

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

你怎么看?

4

2 回答 2

17

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

这里有几点需要注意:

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

查看有关选择分区键的如何充分利用 Windows Azure 表的文章。您会在这里看到我所说的大部分内容(我从中学到的地方之一)以及更多内容。

于 2013-10-30T00:25:44.070 回答
2

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

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

于 2014-03-29T01:32:21.577 回答