为什么MongoDB如此之快?

我正在展示MongoDB vs SQL 2008的同事性能基准,虽然他认为MongoDB速度更快,但是他不明白它的可能性。 他的逻辑是,SQL已经存在了数十年,并且有一些最聪明的人正在使用它,而MongoDB又如何呢? 一个相对较新的小孩在performance上如此优越? 我无法真正提供一个坚实和技术性的答案,我希望你们能够提供帮助。

MongoDB不像传统的关系数据库。 它是基于NoSQL或基于文档的,它提供了弱一致性保证,而不必像SQL一样保证一致性。

MongoDB速度很快,因为它的networking规模!

它是一个有趣的video,值得大家关注,但它确实回答了你的问题 – 大多数像MongoDB这样的noSQL引擎都不健壮,不能适应崩溃和其他中断。 这个安全是他们为了获得速度而牺牲的。

SQL必须做很多事情,Mongo只需要把数据放到磁盘上(差不多)

正如前面提到的,MongoDB没有创build,不应该和SQL数据库一样使用。 SQL(和其他关系型数据库)存储关系数据,也就是说表X中的数据可以与表Y中的信息build立直接关系.MongoDB没有这个能力,因此可以降低很多开销。 因此,为什么MongoDB通常用于存储列表,而不是关系。

加上它并不完全符合ACID标准(虽然自从它首次推出以来已经取得了很大的进步),这是速度差异的主要原因。

以下是完整交易模型与其模型之间在实际网站上概述的差异。

在实践中,MongoDB的非事务模型具有以下含义:

  • 没有回滚 。 您的代码必须无回滚才能运行。 执行第一个数据库写入操作之前,检查所有编程条件。 订购您的写入操作,使最重要的操作最后发生。
  • 显式locking 。 执行操作时,您的代码可能会显式locking对象。 因此,应用程序员有能力在需要时确保“可序列化”。 lockingfunction将在MongoDB的alpha / early beta版本后期发布。
  • 数据库检查启动 。 如果数据库exception终止(罕见),数据库检查过程将在启动时自动运行(类似于fschk)。

虽然其他答案很有意思,但我还是补充说MongoDB“如此之快”的原因之一,至less在基准testing中,是write concern

您可以在这里阅读更多关于不同的写入问题但基本上可以定义您在写入数据时所需的“安全性”级别。

默认级别用于unacknowledged ,这意味着写入操作刚刚被触发,但驱动程序不检查是否成功执行。 速度更快,但不太可靠。

大约一年前他们改变了它acknowledged 。 但我想大多数基准testing仍然使用“未确认”模式来获得更好的结果。

如果你想看看在性能方面的差异,你可以检查这篇文章 (有点老,但它仍然有一个想法)。

MongoDB速度很快,因为:

  1. 不是ACID和可用性优先于一致性。
  2. asynchronous插入和更新:这意味着一旦插入查询被处理,MongoDB就不会将数据插入到数据库中。 更新也是如此。
  3. 没有联接开销:当他们说MongoDB是一个文档数据库时,它们意味着一个数据库,它包含足够的数据,所有的信息都像真实的文档一样被embedded。

Mongo不符合ACID标准,所以它不需要处理几乎所有的“瑕疵”,以确保您试图放入数据库的内容可以稍后再回来。

如果你不介意丢失一些function,可能会丢失数据以换取速度,那么Mongo就是很好的select。 如果你绝对需要保证数据的完整性和/或有复杂的join需求,那么就避免像鼠疫这样的Mongo型系统。

我还会补充一点,另外一个区别就是速度和概念化(尽pipe我相信速度可能有所帮助,因为联接问题的空间不大),但是基于文档的存储与面向对象的思维非常相似

基于文档的可能不是完美的ACID,但是我相信MongoDB通过获取整个文档更容易得到你想要的,而不是搞乱SQL DB的所有连接,冒着一些不好的连接风险。

对任何SQL顽固粉丝道歉

MongoDb更快,因为:1.没有交易; 2.表格之间没有关系;

如果您将尝试在SQL服务器上执行相同的逻辑,例如:1.不要使用带锁的select; 2.表格之间没有关系; SQL Server和MongoDB之间的速度差距不会太大。 只有一个地方肯定会更快,写入和更新logging,因为SQL插入和更新表中的队列和事务,在MondoDB它asynchronous发生。 在我的预测中,我无法在SQL SERVER和MongoDB之间获得速度上的巨大差异,因为两个项目之间的业务逻辑非常相似。 MongoDb上的实际速度增益可以通过出价数据或大型内容pipe理引擎获得,例如新闻报道,在线商店等等。再次,对MongoDB的优化以及对SQL Server的良好优化都可以使这些数据库几乎相同。