MongoDB将写入锁定到什么级别?(或者:“每个连接”是什么意思;
在mongodb文档中,它说: 从版本2.2开始,MongoDB在每个数据库的基础上为大多数读写操作实现锁。一些全局操作(通常是涉及多个数据库的短期操作)仍然需要全局“实例”范围的锁。在版本2.2之前,每个mongod实例只有一个“全局”锁 这是否意味着在我有,比方说,3个连接的情况下mongodb://localhost/test 来自网络上运行的不同应用程序-一次只能写入一个应用程序?或者只是每个连接MongoDB将写入锁定到什么级别?(或者:“每个连接”是什么意思;,mongodb,concurrency,locking,Mongodb,Concurrency,Locking,在mongodb文档中,它说: 从版本2.2开始,MongoDB在每个数据库的基础上为大多数读写操作实现锁。一些全局操作(通常是涉及多个数据库的短期操作)仍然需要全局“实例”范围的锁。在版本2.2之前,每个mongod实例只有一个“全局”锁 这是否意味着在我有,比方说,3个连接的情况下mongodb://localhost/test 来自网络上运行的不同应用程序-一次只能写入一个应用程序?或者只是每个连接 IOW:是每个连接,还是整个/test数据库在写入时被锁定?不是每个连接,而是每个mong
IOW:是每个连接,还是整个/test数据库在写入时被锁定?不是每个连接,而是每个
mongod
。换句话说,锁将存在于该服务器上所有连接到test
数据库的连接中
它也是一个读/写锁,所以如果发生写入,那么读取必须等待,否则MongoDB怎么知道它是一致读取
但是,我应该提到,MongoDB锁与您获得的SQL/普通事务锁非常不同,通常在平均更新之间锁会保持大约一微秒。MongoDB锁不同
MongoDB中的锁定与RDBMS中的锁定不同,因此需要进行一些解释。在早期版本的MongoDB中,只有一个全局读写器闩锁。从MongoDB 2.2开始,每个数据库都有一个读写器闩锁
读者和作者
闩锁是多读卡器、单写卡器,并且是写卡器贪婪型。这意味着:
- 一个数据库上可以有无限数量的同时读卡器
- 在任何一个数据库中的任何集合上,一次只能有一个writer(稍后将对此进行详细介绍)
- 作家排斥读者
- 所谓“writer greedy”,我的意思是,一旦一个写入请求进入,所有读卡器都会被阻塞,直到写入完成(稍后将对此进行详细介绍)
- 所有需要该闩锁的后续读卡器都将阻塞
- 该编写器将等待当前所有读卡器完成
- 写入程序将获取写闩锁,执行其工作,然后释放写闩锁
- 所有排队的读卡器现在都将继续
- 锁(实际上是锁存)由MongoDB内核持有的时间只有更新单个文档所需的时间
- 如果有多个连接进入MongoDB,并且每个连接都在执行一系列写入操作,则每个数据库的锁存时间仅为完成写入所需的时间
- 执行写入(更新/插入/删除)的多个连接都将交错
据我所知,目前容量最高的MongoDB群集每秒执行200万次写入操作。Mongo3.0现在支持集合级锁定 除此之外,现在Mongo还创建了一个允许创建存储引擎的API。Mongo 3.0附带了两个存储引擎:
我知道这个问题已经很老了,但仍然有一些人感到困惑
从MongoDB 3.0开始,WiredTiger存储引擎(使用文档级并发性)在64位版本中可用 WiredTiger对写入操作使用文档级并发控制