我们的应用程序需要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索引来判断是否有任何文档过期以及直接定位文档.
我强烈建议不要在一个数据库中使用多个集合解决方案,因为它不允许您对负载进行分区,也不提供安全性,也不容易在应用程序端处理.
| 归档时间: |
|
| 查看次数: |
16069 次 |
| 最近记录: |