Mongodb 长光标操作期间的写入操作
我使用MongoDB 2.4和一个DB 我在一个集合(50.000+)中找到所有项目,并将每个项目插入到另一个集合中Mongodb 长光标操作期间的写入操作,mongodb,Mongodb,我使用MongoDB 2.4和一个DB 我在一个集合(50.000+)中找到所有项目,并将每个项目插入到另一个集合中 it = coll1.find() while (it.hasNext()) { coll2.save(it.next()) } 在同一数据库上打开cusor时进行密集写入是否会造成性能问题?否,因为游标不是原子的。每次读取都是它自己的原子事务。这意味着mongo不会遇到确保光标在时间上表示单个快照的问题。这本质上归结为一个问题,即并发性()在创建写密集型负载的同时,能够在
it = coll1.find()
while (it.hasNext()) {
coll2.save(it.next())
}
在同一数据库上打开cusor时进行密集写入是否会造成性能问题?否,因为游标不是原子的。每次读取都是它自己的原子事务。这意味着mongo不会遇到确保光标在时间上表示单个快照的问题。这本质上归结为一个问题,即并发性()在创建写密集型负载的同时,能够在单个数据库级写入程序贪婪锁上执行读操作 MongoDB应该能够在这里很好地处理读锁和写锁,在它认为适合保持性能的特定条件下交织操作并产生当前操作(参见上面提供的链接) 当然,这与SQL不同,SQL中的读写操作是隔离的,因此这意味着MongoDB并发规则实际上破坏了ACID中的I。当然,在SQL中,锁的粒度要大得多,因此通常可以获得相对性能
如果您确实看到性能受到影响,主要是由于IO(阅读需要IO,请记住),那么您可能会发现谨慎的做法是将写操作分为1000组,每批处理后大约需要5秒钟的休息时间,让IO消失。最后一行是问题吗?是的,问题已更新!顺便问一下,你使用的是什么样的数据库引擎?@rpax MongoDB中有不止一个数据库引擎?@Sammaye我想这个问题是在我发表评论后编辑的。或者我是瞎子