MongoDB性能 - 拥有多个数据库

use*_*r10 30 database mongodb

我们的应用程序需要db中的5个集合.当我们向客户端添加客户端时,我们希望为每个客户维护单独的数据库.例如,如果我们有500个客户,我们将有500个dbs和2500个集合(每个db有5个集合).这样我们就可以分离每个客户数据.我担心的是,它会导致任何性能问题吗?

更新:另请参阅此谷歌小组讨论.

Asy*_*sky 39

我们的应用程序需要db中的5个集合.当我们向客户端添加客户端时,我们希望为每个客户维护单独的数据库.例如,如果我们有500个客户,我们将有500个dbs和2500个集合(每个db有5个集合).这样我们就可以分离每个客户数据.

好主意啊.除了逻辑分离之外,您还可以使用MongoDB中的数据库级安全性来帮助防止无意中访问其他客户的数据.

我担心的是,它会导致任何性能问题吗?

不,实际上它会有助于数据库级锁定一个客户的极其严重的锁争用(如果在您的方案中可能)不会影响另一个客户的性能(如果他们竞争相同的I/O带宽,它仍然可能但是如果使用--directoryperdb选项,则可以将这些DB放在不同的物理设备上.

分片还可以轻松扩展,因为您甚至不需要对任何集合进行分区 - 您可以跨多个分片循环数据库以允许将负载分配到单独的集群(如果达到该级别).

与另一个答案中的声明相反,TTLMonitor线程不会将文档拉入RAM,除非它们被删除(并添加到空闲列表中).它们使用TTL索引来判断是否有任何文档过期以及直接定位文档.

我强烈建议不要在一个数据库中使用多个集合解决方案,因为它不允许您对负载进行分区,也不提供安全性,也不容易在应用程序端处理.

  • 谁能证实这在 2020 年是否仍然成立? (3认同)