mongodb上的数据库级锁?

mongodb上的数据库级锁?,mongodb,nosql,Mongodb,Nosql,我一定是弄错了。我正在考虑在我的项目中使用mongodb,但我读到: 它说mongodb使用数据库级读写器锁 MySQL InnoDB使用行级锁定。好吧,从理论上讲,这不是意味着mongodb在并发访问方面比MySQL慢2级吗?是的,你完全正确,目前mongodb实现了独占的每数据库写入锁,从并发性角度看,这比MySQL的MyISAM存储引擎的每表写入锁更糟糕 发件人: 从版本2.2开始,MongoDB在每个数据库上实现锁 大多数读写操作的基础 在2.2版本之前,情况更糟,因为他们对整个mon

我一定是弄错了。我正在考虑在我的项目中使用mongodb,但我读到:

它说mongodb使用数据库级读写器锁


MySQL InnoDB使用行级锁定。好吧,从理论上讲,这不是意味着mongodb在并发访问方面比MySQL慢2级吗?

是的,你完全正确,目前mongodb实现了独占的每数据库写入锁,从并发性角度看,这比MySQL的MyISAM存储引擎的每表写入锁更糟糕

发件人:

从版本2.2开始,MongoDB在每个数据库上实现锁 大多数读写操作的基础

在2.2版本之前,情况更糟,因为他们对整个
mongod
实例使用一个全局锁


p.S.:此外,MongoDB使用内存映射文件,这些文件映射到虚拟内存(而不是物理RAM),并每秒将数据刷新到磁盘(无日志记录)。使用预写日志(日志)时,数据也不持久,因为组提交是在特定的时间间隔内执行的。因此,我们接收的数据既不持久,也不在内存中存储

如果您查找readers-writer锁,您会发现它是一种与MySQL在使用短语“行级锁定”时所指的数据库锁完全不同的动物类型

保护共享内存访问,因此寿命极短(微秒级)。由于在MongoDB中,操作仅在文档级别上是原子的,因此这些锁(在传统数据库中,它们是并被使用的)仅在单个文档在内存中更新时才被保留

在提交或回滚正在进行的事务之前,通常会存在常规的“数据库锁”。因为RDBMS事务可以跨多个表跨多个操作,所以这些锁通常寿命更长,因此必须更细粒度,以允许其他工作并发进行

从理论上讲,mongodb的并发访问速度不是比MySQL慢2级吗

不,事实并非如此,根据您的具体工作负载,可能会快得多,也可能快得多,也可能慢得多——这完全取决于您正在执行的操作类型、可用的物理资源、数据结构以及应用程序的需要


在MongoDB中向数据库写入大量数据的应用程序往往主要受到可用磁盘IO吞吐量的限制。只有当可用磁盘带宽超过应用程序对数据库的写入量时,您才会看到并发性成为MongoDB的一个因素。对于关系数据库,由于锁的生命周期较长,即使写入的数据总量相对较小,并发性也会更早成为一个因素。

锁的性能不比MySQLs差,因为MongoDBs锁是互斥锁,你的私人秘书在普通问题上同样被误导了misconception@Sammaye你能更详细地解释一下区别吗?对于ne来说,它没有一个单独的锁,事实上,它与锁的唯一相似之处在于,它在操作实际写入数据文件时持有锁,而MySQL在事务期间持有一个单独的锁,这就是ACID中的I,也是MySQL和其他SQL技术需要行级别的原因之一locking@Sammaye我不确定你是否明白,也许你可以提供一些链接来进行更详细的解释。我真的必须更深入地理解这个话题!。。很抱歉忘记了这个conva,我有一个很愚蠢的通用链接,但这里有一个线程可以帮助解释它,但它是有点裸露:,我从谷歌上的多篇文章基本上是通过搜索不同的知识