MongoDB 2.2相比之前版本,针对每个数据库有一个写锁,而不是全局写锁。因此,如果我将每个集合存储在单独的数据库中,可以有效地实现每个集合的写锁(这将使其看起来像MyISAM的表级锁定)。这种方法是否有缺陷?
锁定的一个关键限制是local
数据库。该数据库包括用于复制的oplog
集合。
如果您正在生产环境中运行,应该使用副本集。如果使用副本集,则需要注意对该数据库的写入锁定效果。
如果这些集合都在等待oplog
,那么将其拆分成10个DB毫无意义。
在大步骤重新编写之前,请确保oplog
不会引起问题。
此外,请注意,MongoDB实现了基于数据库的安全性。如果使用任何安全功能,则现在要创建更多的数据库来保护。
oplog
不是非常熟悉,不过我现在应该明白了。不错的观点。 - loveshoplog
与我的数据库之间的锁争用情况? - expert是的,这样可以行得通。10gen在他们关于锁定的讲座中实际上提供了这个选项。
我可能会将每个集合都隔离开来。大多数数据库似乎有2-5个高活动集合。为了简单起见,最好将低活动集合组合在一个数据库中,将高活动集合放在它们自己的数据库中。