MST
星途 面试题库

面试题:MongoDB中如何控制事务锁粒度以提升并发性能

在MongoDB场景下,阐述你对事务锁粒度控制的理解,以及列举至少两种通过控制锁粒度来提升并发性能的方法,并说明原理。
18.2万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

对事务锁粒度控制的理解

在 MongoDB 中,事务锁粒度控制决定了在事务执行期间,数据库资源被锁定的范围。较粗的锁粒度意味着锁定较大范围的资源(例如整个集合、数据库),这虽然简单但会导致其他事务在锁释放前无法访问这些资源,从而降低并发性能。较细的锁粒度则是锁定更小范围的资源(如单个文档),这样可以让更多事务并发执行,但管理锁的开销会增加。

提升并发性能的方法及原理

  1. 文档级锁
    • 方法:MongoDB 在支持多文档事务前,主要采用文档级锁。在写入操作时,只锁定要操作的单个文档。
    • 原理:当多个事务并发操作不同文档时,由于锁的范围小,它们不会相互阻塞,能够同时执行,极大提升了并发性能。例如多个事务分别更新不同用户的文档,互不干扰。
  2. 读操作优化
    • 方法:使用 readConcern 选项,例如设置为 local,读操作可以在本地副本集成员上执行而不需要等待同步复制完成。同时,对于无事务的读操作,MongoDB 通常采用快照读,不阻塞写操作。
    • 原理:通过减少读操作等待锁的时间,使得读操作可以与写操作并发进行。快照读保证了读操作不会被写锁阻塞,读操作可以基于某个时间点的数据库快照进行,从而提升整体并发性能。