在某些情况下,读写操作可以产生锁定。
长时间运行的读写操作(例如查询,更新和删除)在许多条件下都会产生。 MongoDB 操作还可以在写入操作中的单个文档修改之间产生锁定,这些修改会影响多个文档,例如使用 multi 参数的 update() 。
对于支持文档级并发控制的存储引擎,例如 WiredTiger ,在访问存储时不需要屈服,因为意图锁保存在全局,数据库和集合级别,不会阻止其他读者和编写者。但是,操作会定期产生,例如:
避免长期存储事务,因为这些可能需要在内存中保存大量数据 ;
作为中断点,以便你可以杀死长时间运行 ;
允许需要对集合进行独占访问的操作,例如索引 / 集合删除和创建。
MongoDB 的 MMAPv1 存储引擎使用基于其访问模式的启发式方法来预测在执行读取之前数据是否可能存在于物理内存中。如果 MongoDB 预测数据不在物理内存中,则当 MongoDB 将数据加载到内存中时,操作将产生锁定。一旦数据在内存中可用,操作将重新获取锁以完成操作。
收起