MongoDB 性能 - 拥有多个数据库

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

UPDATE: Also follow this google-group discussion.

最佳答案

Our application needs 5 collections in a db. When we add clients to our application we would like to maintain separate db for each customer. For example, if we have 500 customers, we would have 500 dbs and 2500 collections (each db has 5 collection). This way we can separate each customer data.

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

My concern is, will it lead to any performance problems?

不,实际上它会有所帮助,因为一个客户的数据库级锁非常严重的锁争用(如果在您的场景中可能的话)不会影响另一个客户的性能(如果他们竞争同一个客户,它仍然可能)/O 带宽,但如果您使用 --directoryperdb 选项,那么您可以将这些数据库放置在单独的物理设备上。

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

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

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

https://stackoverflow.com/questions/16916903/

相关文章:

python - 文档中的 Mongoengine creation_time 属性

regex - MongoDB,通过正则表达式对索引字段的查询性能

mongodb - 如何使用 MongoDB 进行报告?

mongodb - 在 MongoDB shell 查询中获取 "data from collect

c# - 序列化 Mongo ObjectId 时出现 JSON.NET 转换错误

mongodb - Mongoose - 在 ObjectId 数组上使用 Populate

mongodb - $unwind 聚合框架中的对象

mongodb - 无法使用 --db 创建备份 mongodump。身份验证失败

mongodb - 图形数据库与文档数据库与三重存储

ruby - 获取 MongoDB 中列的最高值