目录
一、MongoDB简介
MongoDB 作为一种非关系型文档数据库,在现代应用中扮演着极其重要的角色,尤其在处理大规模、高并发、灵活数据模型的场景下。MongoDB 具有如下特点:
- MongoDB 拥有丰富的数据模型,而且文档没有固定的模式,这为扩展性提供了便利
- 高可扩展性:MongoDB 设计之初就考虑到了扩展性,支持分片(sharding),可以轻松跨越多台服务器分配数据和处理请求,从而实现水平扩展。这对于处理海量数据等场景只管重要。
- 高性能:MongoDB 支持各种索引,能够加锁数据的查询;采用异步非阻塞 I/O 模型,避免了线程的同步等待,从而实现高效的读写性能;水平扩展能力也能提高性能,通过添加分片可来分散负载,保持高性能;采用预分配数据机制来提高性能,当要写入新数据时,不会等到写入时才去请求磁盘空间,而是提前预留一定空间;同时还支持批量操作,减少交互来提升性能。
- 高可用性:使用副本集来对数据进行冗余保存,当主节点故障时,数据也不会丢失。
MongoDB 作为一个多用户、多线程的 NoSQL 数据库,确保其在高并发访问下数据的一致性和完整性至关重要。如果没有有效的并发控制机制,可能会产生如脏读、不接重复度、幻读等一系列问题。
那如何确保 MongoDB 在并发环境下能够保障数据一致性和完整性呢?那就是 MongoDB 的锁机制。
二、MongoDB锁机制
MongoDB 锁机制是其并发控制的重要组成部分,目的是为了确保多线程多用户访问下数据的完整性和一致性,主要分类两大类:MMAPv1 引擎的锁机制和 WiredTiger 引擎的锁机制。
在使用 MMAPv1 存储引擎的 MongoDB 版本中,全局锁时其主要的并发控制手段。全局锁有两种模式: