【问题标题】:Choose Azure Table Partition Key base on row count or size根据行数或大小选择 Azure 表分区键
【发布时间】:2014-06-09 21:14:01
【问题描述】:

我正在设计一种散列算法,它将为 azure 表生成分区键。我考虑了两种情况:

  1. 根据行数生成键
  2. 根据数据大小生成密钥

解释:假设我有 300 个实体要插入(请记住,这是一个非关系商店,所以可以说它,10 个客户,50 个销售,240 个销售项目)......为了平衡它们,我将使用 2 个分区键:K1 和 K2。
在“行计数模式”中插入 1 将有 K1,插入 2 将有 k2,插入 3->K1,插入 4->k2 等等。 .. 非常直截了当,并探究大多数人的所作所为...
如果我使用“数据大小”,假设前 50kb 将得到 K1,51-100kb K2, 101-150 K1, 151-200 K2,这可能导致:插入 1、2 和3 使用 K1,插入 4 使用 K2,插入 5 使用 K1,插入 6,7,8,9,10,11,12,13 和 14 使用 K2...

我的问题是:在搜索时,哪些“策略”可以实现最佳吞吐量?

Edti1:
我在这里最担心的是分区和原始性能之间的不平衡。让我们进一步扩展并想象这是一个多租户应用程序。如果我选择Tenant Id 作为分区键,我将不得不解决这样一个事实,即随着租户数据变大,查询性能将比我选择分区键(如Tenant Id + Month of the Sale)下降得更快,因为在第二种情况下,我将能够运行并行查询,例如“tenant1January”、“tenant1February”、“Tenant1Marchar”...

【问题讨论】:

  • 我认为这个问题的答案很大程度上取决于您的应用程序的业务逻辑。最常执行哪些类型的读取?通过什么标准可以找到这些读取的记录?使用 PartitionKey + RowKey 时读取速度最快。当通过不是这两个键之一的字段扫描记录时,读取速度会慢得多。它还可能取决于您拥有的记录数量以及您访问它们的频率。例如,如果您可能有几千条记录,您可能会通过 partitionkey 读取它们并在本地缓存它们。

标签: azure azure-table-storage nosql


【解决方案1】:

为了回答你的具体问题,我不会去。

分区键是设计表存储查询时要考虑的最重要的事情。如果我正确理解了您的 PK 方案,那么要快速获取您正在保存的任何信息,您需要知道它保存了多少其他行,或者所有其他数据的大小。

我会后退一步,想想你想如何获取这些数据,然后想想你想使用什么 PK 和 RK。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2014-02-04
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    相关资源
    最近更新 更多