【问题标题】:Limitations on Windows Azure Table Storage accountsWindows Azure 表存储帐户的限制
【发布时间】:2011-08-14 03:44:55
【问题描述】:

我正在设计一个基于 Web 的多租户 SaaS 应用程序,该应用程序将托管在 Windows Azure 上并使用表存储。

到目前为止我发现的唯一限制是:

  • 每个订阅 5 个存储帐户
  • 每个存储帐户最多 100 TB
  • 每个实体 1 MB

我正在决定如何为多个客户最好地分区我的存储:

选项 1:为每个客户提供自己的存储帐户。不太可能,考虑到 5 个帐户的默认限制。

选项 2:为每个客户提供自己的一组表格。在表名前加上客户标识符,例如 Books 表拆分为“CustA_Books”、“CustB_Books”等。

选项 3: 有一组表,但在分区键前面加上前缀以拆分客户。所以一个“Books”表,其分区键为“CustA_Fiction”、“CustA_NonFiction”、“CustB_Fiction”、“CustB_NonFiction”等。

选项 2 和 3 的优缺点是什么?可能会影响选项 2 的单个帐户中的表格数量是否有限制?

【问题讨论】:

标签: azure azure-storage


【解决方案1】:

您可以在 Windows Azure 中创建的表的数量没有限制。您唯一的限制是您已经列出的限制。好吧...如果您考虑实体属性的大小始终为 64KB 或更小,或者您考虑批处理选项(100 个实体或 4MB,以较小者为准),我想还有其他限制。

无论如何,这里要记住的是,您的 PartitionKey 将是您制作的最重要的东西。如果您创建一个包含客户名称的 PK,您将获得一些良好的分区优势。这样做的缺点是,如果您将客户数据混合在同一个表中,您会更难删除数据(如果您需要删除客户)。因此,您可以将表用作另一个级别的分区。您创建的 PK 的范围仅限于您在其下创建的表。

我会在这里考虑是否需要批量删除数据,或者是否需要跨客户(租户)查询数据。对于第一个,为每个客户使用单独的表非常有意义,因此删除是一项操作,而最多每 100 个实体执行一次。但是,如果您需要跨租户查询,那么当您有多个表时(这将需要多个查询),连接这些数据会更加困难。

在所有条件相同的情况下,如果租户功能没有重叠,我会将表用作另一个级别的分区,并且如果我想删除租户,我的生活会更轻松。所以,我想这是选项 2。

HTH

【讨论】:

【解决方案2】:

我强烈建议选项 2

我们也采用这条路线,因为它为客户数据添加了一个很好的级别或联合。正如已回答的评论所提到的,管理添加/删除客户更容易。我们注意到的另一个好处是客户数据的“复制能力”。这种方法可以更轻松地将客户特定数据移动到其他存储帐户或开发环境进行测试,而不会影响整个批次。

在 SaaS 世界中,它还使客户能够轻松获得自己数据的副本,这也是许多 SaaS 用户关心的问题。

【讨论】:

    【解决方案3】:

    另一种选择: 假设您有 N 个存储帐户,每个订阅的限制是 100 个存储帐户。每个存储帐户的每个客户都有一个表。

    1. 对于带有分区键的表请求操作,如插入、更新、删除或点查询,计算客户名称+分区键的哈希值,计算其基数N的模数(存储帐户总数),找到确切存储帐户的索引并将请求转发到正确的存储帐户/表。

    2. 适用于没有分区键的读取请求,例如范围查询。然后,您需要将请求广播到所有存储帐户并合并结果。

    在命名多个存储帐户时要特别注意的其他事项之一。避免按字典顺序命名帐户,这将导致它们从 Azure 后端上的同一分区服务器提供服务,并违反其推荐的可伸缩性最佳实践。如果您有 N 个存储帐户。为每个存储帐户名称添加 3 位哈希前缀,以便均匀分布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 2011-11-14
      • 2021-12-23
      相关资源
      最近更新 更多