我正在设计一个 Multi-Tenancy 基于Web的SaaS应用程序,该应用程序将托管在Windows Azure上并使用表存储。
到目前为止,我发现的唯一限制是:
我正在决定如何为多个客户最佳地划分存储空间:
选项1:为每个客户提供自己的存储帐户。考虑5个帐户的默认限制,可能性不大。
选项2:为每个客户提供自己的表集。用客户标识符为表名加上前缀,例如将Books表拆分为“CustA_Books”,“CustB_Books”等。
选项3:有一组表,但在分区键前面加上前缀以分割客户。因此,一个带有分区键“CustA_Fiction”,“CustA_NonFiction”,“CustB_Fiction”,“CustB_NonFiction”等的“Books”表。
选项2和3的优缺点是什么?单个帐户中的表数量是否受到限制,可能会影响选项2?
最佳答案
您可以在Windows Azure中创建的表数没有限制。您唯一的限制是您已经列出的限制。好吧...我想,如果您认为实体属性的大小始终小于或等于64KB,或者考虑批处理选项(100个实体或4MB,以较小者为准),则还有其他限制。
无论如何,这里要记住的是您的PartitionKey将成为您所做的最重要的事情。如果您在其中创建带有客户名称的PK,则会获得一些不错的分区好处。不利的一面是,如果将客户数据混合在同一张表中,将使您很难删除数据(如果您需要删除客户)。因此,您可以将该表用作另一个分区级别。您创建的PK的作用域仅限于您在其下创建的表。
在这里,我将考虑是否需要批量删除数据,或者是否需要跨客户(租户)查询数据。对于第一个来说,每个客户使用单独的表是很有意义的,因此删除是一项操作,而最多是每100个实体1个。但是,如果需要跨租户查询,则在有多个表(这将需要多个查询)时,很难将这些数据连接起来。
在所有条件都相同的情况下,如果租户功能不存在重叠,我将使用这些表作为分区的另一个级别,如果要删除租户,我的生活会更轻松。所以,我想这是选项2。
高温超导
关于azure - Windows Azure表存储帐户的限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5809625/