Mongodb SaaS单数据库与多数据库

Mongodb SaaS单数据库与多数据库,mongodb,database-design,saas,database,Mongodb,Database Design,Saas,Database,我知道这个问题以前已经贴过了,但是没有完全回答。我还认为这仍然取决于问题参数。假设您有一个SaaS服务,拥有大量客户,但每个客户的数据量相对较小,因此使用单个数据库可能是有意义的 如果您的客户长期不在数千人范围内(例如,在一个非常好的场景中为100人),并且从5-6人开始,但这次您每个客户都有大量数据(例如,一个聚合和处理大量数据的商业智能服务),会发生什么情况。给你一个提示,最初每个客户需要处理25-50GB的数据(分析和其他东西),作为一个开始,然后每个客户每年增加大约10GB的数据 如果您

我知道这个问题以前已经贴过了,但是没有完全回答。我还认为这仍然取决于问题参数。假设您有一个SaaS服务,拥有大量客户,但每个客户的数据量相对较小,因此使用单个数据库可能是有意义的

如果您的客户长期不在数千人范围内(例如,在一个非常好的场景中为100人),并且从5-6人开始,但这次您每个客户都有大量数据(例如,一个聚合和处理大量数据的商业智能服务),会发生什么情况。给你一个提示,最初每个客户需要处理25-50GB的数据(分析和其他东西),作为一个开始,然后每个客户每年增加大约10GB的数据

如果您使用的是单个db,那么您可以使用特定字段(当然是索引字段)将数据标记给客户,然后依赖于复制和分片系统,这非常简单,多亏了mongo。我假设(还没有测试,如果您有这种情况,请分享一些见解),在针对索引字段的切分集合中,查询查找时间应该很快。 但是,假设您现在添加了另一个客户,另一个50Gbs(分布在8-10个集合中,因此有数百万个项目/集合)。你必须: 1) 删除索引并重建它们(我想这是最糟糕的,因为系统实际上变得不可用) 2) 不要删除和插入索引(这将永远需要),系统将响应 3) 我认为在副本集中,删除一个节点,删除索引,与新客户一起更新,带回索引,然后让它加入副本集,以便它们可以开始同步

另一方面,如果每个客户有一个db,则可以相对快速地添加或删除,因为系统实际上隔离了其客户,行数仍然在数百万的范围内,但不接近十亿,这很好,而且查找时间明显很快。无论您在这种情况下做什么,在实现方面都要容易得多,也要快得多,因为您总是使用相对较少的数据库。然而,当涉及到维护(复制和分片,因为您将不断为每个客户添加更多数据)时,肯定会产生摩擦 另外,在这种情况下,我可能会假设您必须在单独的机器/实例中物理隔离dbs,因为操作系统限制打开的文件数量,当然,由于多个dbs中同时存在多个连接,因此会有额外的开销

如果我错过了一些东西,请做一些光,但我最感兴趣的是听到其他意见在这方面


谢谢

如果你的客户数量很少,我建议为每位客户收取DB,如果你希望有更多的客户,我建议为每位客户收取DB。(对于数千个数据库,每个数据库都有一些开销是您不希望产生的。)


请注意,您的想法“我认为在副本集中取下一个节点,删除索引,与新客户一起更新,带回索引,然后让它加入副本集中,以便它们可以开始同步。”将不起作用,因为在副本集中,只有主节点可以进行写入。

当您谈论每db的开销时,您指的是tcp连接、更多同时打开的文件还是RAM?如果在每个客户每个集合的场景中,我会做一个后台索引,然后强制从二级数据库读取数据,会怎么样?这是一个好的路径吗?不是打开连接-MongoDB驱动程序不需要为一台服务器内的其他数据库打开其他连接。但是,对于磁盘空间、打开的文件和RAM,还有一些额外的开销。为什么需要强制从二级数据库读取数据?感谢您的响应,我只是想加载主数据库以更快地创建索引……明白了,现在不支持这种做法。一级和二级数据库被设计为在任何时候都尽可能完美地复制彼此,因此不支持仅在其中一个数据库上建立索引。