面试题答案
一键面试对事务锁粒度控制的理解
在 MongoDB 中,事务锁粒度控制决定了在事务执行期间,数据库资源被锁定的范围。较粗的锁粒度意味着锁定较大范围的资源(例如整个集合、数据库),这虽然简单但会导致其他事务在锁释放前无法访问这些资源,从而降低并发性能。较细的锁粒度则是锁定更小范围的资源(如单个文档),这样可以让更多事务并发执行,但管理锁的开销会增加。
提升并发性能的方法及原理
- 文档级锁:
- 方法:MongoDB 在支持多文档事务前,主要采用文档级锁。在写入操作时,只锁定要操作的单个文档。
- 原理:当多个事务并发操作不同文档时,由于锁的范围小,它们不会相互阻塞,能够同时执行,极大提升了并发性能。例如多个事务分别更新不同用户的文档,互不干扰。
- 读操作优化:
- 方法:使用
readConcern
选项,例如设置为local
,读操作可以在本地副本集成员上执行而不需要等待同步复制完成。同时,对于无事务的读操作,MongoDB 通常采用快照读,不阻塞写操作。 - 原理:通过减少读操作等待锁的时间,使得读操作可以与写操作并发进行。快照读保证了读操作不会被写锁阻塞,读操作可以基于某个时间点的数据库快照进行,从而提升整体并发性能。
- 方法:使用