据我所知,当我在数据库中写作时,其他人会等待第一个进程尚未完成? 这是真的吗? 如果是真的,也许你知道是否会在mongo中进行多线程处理? 感谢。
答案 0 :(得分:2)
因此,如果这是您关注的问题,mongodb是线程安全的。您不需要在客户端处理多线程的东西。数据库将应用数据库级别锁定(2.4或更早版本)或集合级别锁定(mongo 2.6中的新增功能)。关于它使用何种锁,请参阅MongoDB FAQ about concurrency
从版本2.2开始,MongoDB在每个数据库的基础上实现了大多数读写操作的锁。一些全局操作(通常是涉及多个数据库的短期操作)仍然需要全局“实例”广泛锁定。在2.2之前,每个mongod实例只有一个“全局”锁。
但是,它的线程安全并不意味着您根本不需要担心线程。您可能会发现使用findAndModify
很有用db.collection.findAndModify({
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
});
有时如Atomic Operations主题中所述。
编辑:自3.0以来,MongoDB引入了WiredTiger
存储引擎,现在我们获得了文档级锁定(仅当您使用WiredTiger
时)