我们的应用程序在一个数据库中需要 5 个集合。当我们将客户添加到我们的应用程序时,我们希望为每个客户维护单独的数据库。例如,如果我们有 500 个客户,我们将有 500 个 dbs 和 2500 个集合(每个 db 有 5 个集合)。这样我们就可以分离每个客户数据。我担心的是,它会导致任何性能问题吗?
更新:也关注这个google-group discussion。
我们的应用程序在一个数据库中需要 5 个集合。当我们将客户添加到我们的应用程序时,我们希望为每个客户维护单独的数据库。例如,如果我们有 500 个客户,我们将有 500 个 dbs 和 2500 个集合(每个 db 有 5 个集合)。这样我们就可以分离每个客户数据。我担心的是,它会导致任何性能问题吗?
更新:也关注这个google-group discussion。
我们的应用程序在一个数据库中需要 5 个集合。当我们将客户添加到我们的应用程序时,我们希望为每个客户维护单独的数据库。例如,如果我们有 500 个客户,我们将有 500 个 dbs 和 2500 个集合(每个 db 有 5 个集合)。这样我们就可以分离每个客户数据。
好主意啊。除了为您提供的逻辑分离之外,您还可以在 MongoDB 中使用数据库级别的安全性来帮助防止无意中访问其他客户的数据。
我担心的是,它会导致任何性能问题吗?
不,实际上它会有所帮助,因为一个客户的数据库级锁非常严重的锁争用(如果在您的场景中可能的话)不会影响另一个客户的性能(如果他们竞争相同的 I/O 带宽,它仍然可能但是如果您使用 --directoryperdb 选项,那么您可以将这些数据库放置在单独的物理设备上。
分片还将允许轻松扩展,因为您甚至不必对任何集合进行分区 - 您可以跨多个分片循环数据库,以允许将负载分配到单独的集群(如果以及何时达到该级别)。
与另一个答案中的声明相反,TTLMonitor 线程不会将文档拉入 RAM,除非它们被删除(并添加到空闲列表中)。它们使用 TTL 索引来判断是否有任何文档将过期以及直接定位文档。
我强烈建议不要使用一个数据库多集合解决方案,因为它不允许您对负载进行分区,也不能提供安全性,也不能在应用程序端更容易处理。