mongodb并发和锁的问题总结

MongoDB 允许多个客户端读写相同的数据。为了确保一致性,MongoDB 使用锁定和并发控制 来防止客户端同时修改相同的数据。对单个文档的写入要么完整发生,要么根本不发生,并且客户端始终看到一致的数据。

1、MongoDB 如何管理并发?

MongoDB 使用读写锁,允许并发读者共享访问资源,例如数据库或集合。

WiredTiger 使用乐观并发控制。 WiredTiger 仅在全局、数据库和集合级别使用意图锁。当存储引擎检测到两个操作之间的冲突时,会引发写入冲突,导致 MongoDB 透明地重试该操作。

2、MongoDB 使用什么类型的锁定?

MongoDB 使用多粒度锁定,允许操作锁定在全局、数据库或集合级别,并允许各个存储引擎在集合级别以下(例如,在 WiredTiger 中的文档级别)实现自己的并发控制。

除了用于读取的共享 (S) 锁定模式和用于写入操作的独占 (X) 锁定模式之外,意向共享 (IS) 和意向独占 (IX) 模式表示使用更细粒度的锁读取或写入资源的意向. 当以特定粒度锁定时,所有更高级别都使用意向锁锁定。

例如,当锁定一个集合用于写入(使用模式 X)时,相应的数据库锁和全局锁都必须以意向排他 (IX) 模式锁定。单个数据库可以同时在 IS 和 IX 模式下加锁,但排他(X)锁不能与任何其他模式共存,共享(S)锁只能与意向共享(IS)锁共存。

锁是公平的,读写的锁请求按顺序排队。但是,为了优化吞吐量,当一个锁请求被授予时,所有其他兼容的锁请求将同时被授予࿰

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MongoDB是一种开源的NoSQL数据库,它使用文档存储数据,而不是传统的关系型数据库中的表。它具有高可用性、可扩展性和灵活性等优点,因此在大数据和云计算领域得到广泛应用。 以下是一些可能在MongoDB面试中被问到的问题及其回答: 1. 什么是MongoDB? 答:MongoDB是一种开源的NoSQL数据库,它使用文档存储数据,而不是传统的关系型数据库中的表。它具有高可用性、可扩展性和灵活性等优点,因此在大数据和云计算领域得到广泛应用。 2. MongoDB的优点是什么? 答:MongoDB具有以下优点: - 高可用性:MongoDB支持主从复制和分片,可以保证数据的高可用性和可靠性。 - 可扩展性:MongoDB可以通过添加更多的节点来扩展数据库的容量和性能。 - 灵活性:MongoDB使用文档存储数据,可以存储不同结构的数据,非常灵活。 - 高性能:MongoDB使用内存映射技术,可以快速读取数据。 - 开源免费:MongoDB是开源的,可以免费使用。 3. MongoDB的数据模型是什么? 答:MongoDB使用文档存储数据,文档是一个键值对的集合,类似于JSON格式。每个文档都有一个唯一的_id字段,用于标识该文档。文档可以包含嵌套文档和数组等复杂数据类型。 4. MongoDB的查询语言是什么? 答:MongoDB使用基于JSON的查询语言,称为MongoDB查询语言(MQL)。MQL支持各种查询操作,如等于、不等于、大于、小于、范围查询、正则表达式查询等。 5. MongoDB的索引是什么? 答:MongoDB支持各种类型的索引,包括单字段索引、复合索引、全文索引、地理空间索引等。索引可以提高查询性能和数据访问速度。 6. MongoDB的主从复制是什么? 答:MongoDB的主从复制是一种数据复制技术,用于提高数据的可用性和可靠性。主节点负责写入数据,从节点负责读取数据。主节点将写入的数据复制到从节点,从节点可以用于读取数据和备份数据。 7. MongoDB的分片是什么? 答:MongoDB的分片是一种数据分布技术,用于扩展数据库的容量和性能。分片将数据分布到多个节点上,每个节点负责存储一部分数据。客户端可以通过路由节点访问分片集群,路由节点负责将请求路由到正确的节点上。 8. MongoDB的事务是什么? 答:MongoDB的事务是一种数据操作技术,用于保证数据的一致性和完整性。事务可以将多个操作组合成一个原子操作,要么全部执行成功,要么全部回滚。MongoDB的事务支持多文档事务和分布式事务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据知道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值