【问题标题】:Use the same PartitionKey and RowKey使用相同的 PartitionKey 和 RowKey
【发布时间】:2013-10-29 23:54:09
【问题描述】:

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

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

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

你怎么看?

【问题讨论】:

    标签: azure primary-key azure-table-storage


    【解决方案1】:

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

    这里有几点需要注意:

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

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

    【讨论】:

    • 如果我理解你的意思,最好有一个通用 ID(例如 guid)作为分区键,然后行键将包含我的唯一客户 ID,在这种情况下,我仍然可以通过partionkey + rowkey 获取客户,还可以使用批量?
    • 我不建议只保留一个 PartitionKey(例如 Users),因为这会破坏分区的全部目的。假设您有 100000 个用户,并且您将 PartitionKey 设置为 Users 并将 RowKey 设置为唯一 ID。当您搜索用户时,表服务将不得不扫描这 100000 条记录以找到匹配的用户 ID。在这种情况下,最好将唯一 id 保留为 PartitionKey。 HTH。
    • 不,我只是说您应该知道批处理仅适用于来自同一分区的实体。正如 Gaurav 指出的那样,如果将所有内容都放在同一个分区中,您将对系统的可扩展性产生巨大影响,变得更糟。只要您始终知道分区键,您对每个分区键的单个客户的建议是可行的。
    • 我同意最好使用分区键将您的客户分组。每个分区不应该只有一个客户,因为这会阻止您进行更有效的批处理操作。 (而且您也不应该只有一个分区来容纳所有客户,因为这会将您的可扩展性限制在每秒大约 2000 个事务。)这里有一篇文章,其中包含有关分区键和行键如何工作的更多信息:msdn.microsoft.com/en-us/magazine/ff796231.aspx
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 2012-09-03
      相关资源
      最近更新 更多