【问题标题】:Azure Table Storage Design: Table per Entity and PartitionKeyAzure 表存储设计:每个实体的表和 PartitionKey
【发布时间】:2017-07-13 15:24:28
【问题描述】:

我构建了一个 ATS 应用程序,其中一组中等规模的实体实例(可能 50 到 1000 个实体)属于某个客户。

目前,我得到了以下设计:

  • 每个实体类型都有自己的表。例如。有一个存储所有客户的“客户”表。还有一个存储所有东西的“东西”表。

  • 客户 ID 是实体的分区键。例如。属于客户 ABC 的事物属于分区 ABC。

我主要查询、更新和删除某个客户拥有的实体集。例如。我查询客户拥有的所有“事物”实例。

这是组织行的好方法吗? 为每个客户提供一个存储所有数据的表会更好吗?

提前谢谢你

【问题讨论】:

  • 在表存储中有多种组织数据的方式,可能每种方式都有自己的支持者。它还取决于例如“事物”数据的结构。如果它有类别,这可能是事物表中的一个很棒的分区键。如果它是相对简单的数据,那么您的解决方案就可以了。简而言之:我们需要更多信息来给出答案,但它仍会为您提供主要基于意见的答案。

标签: azure azure-table-storage


【解决方案1】:

您的问题中的 2 种替代设计之间的一个区别是,您在当前解决方案中失去了跨属于特定客户 ID 的整个实体集的批处理操作支持,因为它们分布在不同的表中。您没有提及有关您的要求的大量细节,但您最终可能会出现不一致的情况,例如从客户表中删除客户,但无法从相应的实体表中删除客户实体,因为 azure 表存储仅支持相同的原子批处理操作分区键和在同一个表内。而如果您将所有实体放在同一个表中,客户 ID 为 PK,并且可能是 RK 的类别字段,您可以跨整个分区键运行批处理操作。需要注意的是,这种模式可能会随着时间的推移使您的分区膨胀,并且您可能会遇到其他与性能相关的问题,所以......这个答案更像是信息而不是确定。确定的答案需要查看您的全套需求、数据模型、频繁使用案例、吞吐量目标等。

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 1970-01-01
    • 2012-09-03
    • 2011-08-05
    • 2018-01-01
    • 2016-06-18
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多