当前位置:  开发笔记 > 编程语言 > 正文

MongoDB中针对多租户数据库的推荐方法是什么?

如何解决《MongoDB中针对多租户数据库的推荐方法是什么?》经验,为你挑选了2个好方法。

我正在考虑使用MongoDB创建一个多租户应用程序.关于我还有多少租户,我没有任何猜测,但我希望能够扩展到成千上万.

我可以想到三个策略:

    同一集合中的所有租户,使用特定于租户的字段来确保安全

    1单个共享数据库中每个租户的收集

    每个租户1个数据库

我头脑中的声音暗示我选择2.

任何想法和影响,任何人?



1> 小智..:

我有同样的问题要解决,也考虑变种.由于我有多年创建SaaS多租户应用程序的经验,我还将根据我以前使用关系数据库的经验选择第二个选项.

在进行研究的过程中,我在mongodb支持网站上发现了这篇文章(自从它消失后又回来了):https://web.archive.org/web/20140812091703/http: //support.mongohq.com/use-cases/multi -tenant.html

这些家伙表示不惜任何代价避免第二种选择,据我所知,这并不是特别针对mongodb.我的印象是,由于数据库设计的具体细节,这适用于我研究的大多数NoSQL dbs(CoachDB,Cassandra,CouchBase Server等).

集合(或桶或者它们在不同的DB中调用它们)与RDBMS中的安全模式不同,尽管它们表现为文档的容器,它们对于应用良好的租户分离是无用的.我找不到可以根据集合应用安全限制的NoSQL数据库.

当然,您可以使用基于mongodb角色的安全性来限制对数据库/服务器级别的访问.(http://docs.mongodb.org/manual/core/authorization/)

我会建议第一个选项:

您有足够的时间和资源来处理此方案的设计,实施和测试的复杂性.

如果您不希望在数据库中为不同的租户在结构和功能上有太大差异.

您的应用程序设计将允许租户在运行时仅进行最少的自定义.

如果您想优化空间并最大限度地减少硬件资源的使用.

如果你有数以千计的租户.

如果您想快速扩展并且成本很高.

如果您不打算根据租户备份数据(为每个租户保留单独的备份).即使在这种情况下也可以做到这一点,但努力将是巨大的.

如果符合以下情况我会选择变体3:

你将有一小部分租户(几百个).

业务的细节要求您能够支持不同租户的数据库结构的巨大差异(例如,与第三方系统的集成,数据的导入 - 导出).

您的应用程序设计将允许客户(租户)在应用程序运行时(添加模块,自定义字段等)中进行重大更改.

如果您有足够的资源可以快速扩展新的硬件节点.

如果您需要为每个租户保留数据的版本/备份.恢复也很容易.

有法律/监管限制迫使您将不同的租户保留在不同的数据库(甚至是数据中心).

如果您想充分利用mongodb的开箱即用安全功能,如角色.

租户之间的规模差异很大(你有很多小租户,很少有很大的租户).

如果您发布有关您的应用程序的其他详细信息,也许我可以给您更详细的建议.


我想原来的链接已经死了,去了存档链接:https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi-tenant.html

2> Braintapper..:

我在这个链接的评论中找到了一个很好的答案:

http://blog.boxedice.com/2010/02/28/notes-from-a-production-mongodb-deployment/

基本上选项#2似乎是最好的方式.

引自David Mytton的评论:

由于MongoDB分配其数据文件的方式,我们决定不为每个客户建立数据库.每个数据库都使用它自己的一组文件:

数据库的第一个文件是dbname.0,然后是dbname.1等.dbname.0将是64MB,dbname.1 128MB等,最多2GB.一旦文件大小达到2GB,每个连续文件也是2GB.

因此,如果存在的最后一个数据文件是1GB,那么如果最近到达该文件可能是90%为空.

从手册.

当用户注册试用并开始工作时,即使整个数据文件没有使用,我们也会得到越来越多的数据库,其大小至少为2GB.我们发现这使用了大量的磁盘空间,而所有客户都拥有多个数据库,可以使用磁盘空间来实现最高效率.

作为标准,分片将在每个集合的基础上呈现出一个问题,即集合永远不会达到开始分片的最小大小,就像我们的很多(例如仅存储用户登录详细信息的集合)的情况一样.但是,我们已经要求这也可以在每个数据库级别上完成.见 http://jira.mongodb.org/browse/SHARDING-41

使用大量集合没有性能权衡.请参阅 http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有