多租户数据库。每个租户一个集合或一个db?

时间:2014-08-05 14:26:48

标签: multi-tenant document-oriented-db

对于使用面向文档的数据库的Web应用程序的多租户架构,我可以看到两个可以想到的选项:

  • 每个租户拥有一个数据库,并且这些集合在逻辑上将不同类型的对象分开。
  • 每个租户拥有一个集合,并且所有用户数据都存储在一个数据库中,每条记录上都有一些标记或对象类型标识符。

是否有任何研究或有关于这两个选项及其之间的差异的文件?

为什么设计允许多个用户存储大量不同类型数据的Web应用程序的人会选择一个而不是另一个?

除了速度/效率问题之外,还有其他任何可以影响决定的事情吗?

编辑我知道某些术语可能是特定于数据库的,因此对于所有想知道我都特别指的是MongoDB。

1 个答案:

答案 0 :(得分:0)

我不想要租户特定的收藏品。在我的应用程序中,我通常使用硬编码集合名称,就像我使用SQL表时硬编码表名一样。这里有一个comments集合,用于存储博客的所有评论。我不想处理像comments_tenant_1comments_tenant_2这样的集合名称,因为1)感觉容易出错,2)会使应用程序代码更复杂(集合名称必须用函数替换)计算集合名称)。 3)单个数据库中的集合数量可能会增长很多,这会使所有集合的列表看起来令人生畏,而且MongoDB也不是为了拥有很多集合而构建的(请参阅下面的评论中的链接) ,David B发布的,https://docs.mongohq.com/use-cases/multi-tenant.html)。

但是,数据库名称不与应用程序数据结构耦合,您可以授予数据库权限(但不能授予单个集合)。因此每个租户一个数据库可能是合理的。可以是所有租户的单个数据库中的每个文档tenant_id字段(请参阅上述链接)。