【问题标题】:MongoDB 3.0.4 Replica SET database level lock while inserting, not able to read other collection?MongoDB 3.0.4 Replica SET 数据库级别锁定同时插入,无法读取其他集合?
【发布时间】:2016-01-08 14:38:20
【问题描述】:

我的副本集包括(1 个主服务器、1 个辅助服务器和 1 个恢复服务器),我在主服务器上执行以下操作:

  1. 所有写入和读取都在主节点上执行。
  2. 假设我们有一个由 5 个集合 A、B、C、D 和 E

  3. 我们正在对集合执行写入(导入或更新插入) A,那么它会影响其他收藏吗?像mongodb一样 允许同时对集合 B 和 C 进行读操作吗?

  4. 否则它会对数据库级别执行写锁,因此它会阻止 其他读取操作还可以吗?
  5. 列表项我目前遇到的问题 是,我正在写集合 A 它会给另一个超时 对其他数据库执行 READ 操作?

请提供带有示例的规范,这将很有帮助..

【问题讨论】:

  • 您使用的是 mmapv1 还是wiredtiger 存储引擎? MongoDB 事务在文档级别是原子的,具有有线老虎存储引擎。并发因存储引擎而异..
  • 存储引擎:mmapv1
  • 我们正在使用的mmapv1存储引擎

标签: mongodb concurrency locking replicaset


【解决方案1】:

对于副本集,当 mongodb 在您的情况下写入主数据库 A 上的集合时,它还会将数据写入主数据库的 oplog ,它将数据同步到辅助数据库。这里,oplog 集合是local 数据库的一部分。

因此,mongo 必须同时锁定两个数据库,即collection's 数据库和local 数据库,以保持数据库一致并确保写入操作是原子的,即全部更新或不更新。

不同的 mongoDB 操作持有不同的锁变体。我建议您通过以下链接对锁定机制和并发有一个很好的了解。

https://docs.mongodb.org/manual/faq/concurrency/#mgl-ref

您可以通过发出db.serverStatus().locks 命令来检查锁的状态。它会告诉你 mongod 拥有的不同类型的锁,包括 oplog。

【讨论】:

  • 感谢您的回复,我已经通过此链接,我想确认,如果在数据库级别上存在排他锁,即小 w (w),是否允许对该数据库进行任何读取操作?小 w 和大写 W 有什么区别,例如:“locks”:{“Global”:“w”,“MMAPV1Journal”:“w”,“Database”:“w”,“Collection”:“W”
猜你喜欢
  • 2018-02-12
  • 2014-10-31
  • 1970-01-01
  • 2015-05-29
  • 2020-09-08
  • 2015-05-26
  • 2013-03-16
  • 2013-01-23
  • 1970-01-01
相关资源
最近更新 更多