如何实现多租户MongoDB

3
我希望实现一个MongoDB系统,其中包含3个主要集合(People、Surveys、Responses)和一些次要集合(查找等)。然而,该系统将是多租户的,因此我需要为每个租户设置一组集合。我的问题是,我应该为每个租户单独设置数据库,还是使用单个数据库?如果使用单个数据库,我的集合名称应该采用以下方式:tenantname_people、tenantname_surveys等,或者有更好的结构/命名集合的方法?我喜欢单个数据库的方法,因为我可以拥有一个租户集合,其中包含每个租户及其用户等详细信息,这对支持很有帮助。我将有相当多的索引,并且我会考虑到命名空间的24k限制。24k似乎很高,但这些问题可能会影响您。任何有用的评论将不胜感激。谢谢。

2个回答

3
我建议每个租户使用单独的数据库。这样做还可以帮助你进行分片。如果想要增加命名空间限制,可以使用--nssize参数。

--nssize文档在这里(http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections)。需要注意的是24k限制是每个数据库。如果您为每个租户有一个单独的数据库,则可以避开此要求。 - Gates VP

-1

明确地说,单独的数据库是适当的方式,这样您就可以轻松应用复制并创建租户的冗余版本。当您想要扩展服务时,单个数据库会给您带来麻烦。

您需要做的是拥有一个租户ID和一个单一用户数据库,这是一个管理数据库,您可以在其中存储用户和租户的信息。


4
不是绝对的——每个数据库都会预先分配文件空间,您的数据库将会很快增长(请参见此处:http://www.mongodb.org/display/DOCS/Excessive+Disk+Space)。使用具备复制功能的服务器级硬件,这样的成本会迅速累加。我个人认为最好选择单一数据库,并关注命名空间限制(serverdensity.com可以帮助您完成这项工作)。 - tonyhb
1
考虑使用集合(http://www.mongodb.org/display/DOCS/Collections)而不是完全分离的数据库。 - Milovan Zogovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接