2011-04-27 37 views
7

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

我到目前为止发现的唯一的限制是:每个实体

  • 100个存储帐户每股认购

    • 5存储账户TB最大
    • 1 MB

    我决定如何为多个客户最佳分配我的存储空间:

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

    选项2:给每个客户自己的一组表。将客户标识符前缀为表格名称,例如书籍表格分为“CustA_Books”,“CustB_Books”等。

    选项3:有一组表格,但是以分区键为前缀来分割客户。因此,一个带有“CustA_Fiction”,“CustA_NonFiction”,“CustB_Fiction”,“CustB_NonFiction”等分区键的“书籍”表格。

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

  • +0

    另一个重要的限制是每个帐户的操作次数/秒,我认为每个帐户每秒最多5,000个实体/消息/斑点。从http://blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/windows-azure-storage-abstractions-and-their-scalability-targets.aspx – 2011-06-30 02:07:23

    +2

    请注意,表名不能有'_'字符(不像选项2的例子)。只允许使用字母数字。 – Youngjae 2014-04-11 04:20:33

    回答

    10

    对于可以在Windows Azure中创建的表的数量没有限制。你唯一的限制是你已经列出的限制。那么......如果你认为实体属性的大小始终是64KB或更小,或者如果考虑批量选项(100个实体或4MB,无论哪个更小),我想还有其他限制。

    无论如何,这里要记住的是你的PartitionKey将会是你所做的最重要的事情。如果您创建一个包含客户名称的PK,您将获得一些很好的分区优势。这样做的缺点是,如果您将客户数据混合在同一个表中,那么删除数据会让您更难(如果您需要删除客户)。因此,您可以使用该表作为另一个分区级别。你创建的PK的范围是你创建它的表。

    我在这里会考虑的是,如果您需要批量删除数据或者您需要跨客户(租户)查询数据。对于第一个,每个客户使用单独的表格是很有意义的,所以删除是一个操作,相比于每100个实体至多1个。但是,如果您需要在租户之间进行查询,那么当您有多个表时(这将需要多个查询),加入此数据会更加困难。

    所有的事情都是平等的,如果在租户功能中没有重叠,我会使用这些表作为另一个分区级别,如果我想要删除租户,我的生活将变得更加简单。所以,我想这是选项2

    HTH

    +0

    哦,我还应该添加它是每个订阅20个存储帐户,而不是5. – dunnry 2011-04-27 23:21:32

    +0

    谢谢。我认为选项2会运作良好。我只是不确定关于桌子数量的限制。 – 2011-04-28 13:22:08

    +0

    [现在它是每个订阅100个存储帐户](http://msdn.microsoft.com/en-us/library/azure/gg433040.aspx) – Gabrielius 2015-01-18 14:22:10

    2

    我强烈建议选择2

    我们也走这条路,因为它增加了一个不错的水平或联盟的客户数据。正如回答评论所述,管理添加/删除客户更容易。我们注意到的另一个好处是客户数据的“复制能力”。通过这种方法,将客户特定数据移动到其他存储帐户或开发环境进行测试而不会影响整个地段更容易。

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

    1

    另一种替代方案: 想象一下,您有N个存储帐户,每个订阅限制为100个存储帐户。每个存储帐户都有一个每个客户的表。

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

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

    要记住命名多个存储帐户的其他事情之一。避免按照字典顺序对帐户进行命名,这会导致它们从Azure后端的同一分区服务器提供服务,并违反推荐的可伸缩性最佳实践。如果您有N个存储帐户。为每个存储帐户名称加上一个3位数的散列,以便它们均匀分布。