为什么MongoDB如此之快

Jus*_*tin 45 mongodb

我展示了MongoDB与SQL 2008的同事性能基准,虽然他认为MongoDB速度更快,但他并不了解它的可行性.他的逻辑是,SQL已经存在了几十年,并且有一些最聪明的人在研究它,以及MongoDB如何; 一个相对较新的孩子在性能上如此优越?我无法真正提供可靠和技术性的答案,我希望你们能提供帮助.

Wil*_*ill 36

MongoDB很快,因为它的网络规模!

它是一个有趣的视频,值得所有人观看,但它确实回答了你的问题 - 大多数像MongoDB这样的noSQL引擎都不健壮,不能应对崩溃和其他中断.这种安全性是他们为提高速度而牺牲的.

  • / dev/null是web规模! (31认同)
  • "分片是秘密酱"...... :) (2认同)

Yic*_*aoz 31

MongoDB不像传统的关系数据库.它是基于noSQL或文档的,它提供弱一致性保证,并且它不必保证像SQL一样的一致性.

  • "熟悉的SQL语句":)这句话是你评论背后的主要思想 - 你不想要改变.进步要求改变. (15认同)
  • @Shehi他试图留下他熟悉的东西并没有什么不妥.首先,所有发现和发明都源于我们熟悉的事物.此外,科学的归纳方法是基于我们熟悉的事情.最后但并非最不重要的是,与学习相关的成本.在没有适当曝光的情况下跳转到技术之间(我说的是至少5年的时间跨度)从长远来看对你没有帮助. (6认同)
  • 好吧,那么为什么不创建一个非稳健的关系数据库,它具有弱一致性保证,非弹性......?它会很快,让我们使用熟悉的SQL语句. (3认同)

Mar*_*ett 14

SQL必须做很多事情,Mongo只需将位丢弃到磁盘上(几乎)

  • 这很奇怪,我打算写更多关于SQL与对象存储的内容,但这个问题消失了? (2认同)

Mik*_* M. 8

正如已经提到的那样,MongoDB不是创建的,不应该像SQL数据库一样使用.SQL(和其他关系数据库)存储关系数据,即表X中的数据可以设置为与表Y中的信息有直接关系.MongoDB没有这种能力,因此可以减少很多开销.因此,为什么MongoDB通常用于存储列表,而不是关系.

再加上它还不是很符合ACID(尽管自从它首次推出以来它已经取得了很大的进步)并且这是速度差异的主要部分.

以下是完整事务模型与其模型之间在实际站点上概述的差异.

实际上,MongoDB的非事务模型具有以下含义:

  • 没有回滚.您的代码必须在没有回滚的情况下运行.在执行第一次数据库写入操作之前,请检查所有编程条件.订购您的写操作,以便最重要的操作最后发生.
  • 显式锁定.您的代码可能在执行操作时显式锁定对象.因此,应用程序员能够在需要时确保"可串行化".锁定功能将在MongoDB的alpha /早期测试版晚期提供.
  • 启动时检查数据库.如果数据库异常终止(罕见),数据库检查过程将在启动时自动运行(类似于fschk).


Ami*_*thi 6

MongoDB 很快™ 因为:

  1. 非 ACID:可用性优先于一致性。
  2. 异步插入和更新:它的意思是,MongoDB 不会在处理插入查询后立即将数据插入数据库,而是在一定时间后刷新数据。更新也是如此。
  3. 无连接开销:当他们说 MongoDB 是一个文档数据库时,他们的意思是,它是一个包含自给自足的数据的数据库,并且所有信息都像真正的文档一样嵌入。


小智 6

MongoDb 更快,因为: 1. 没有事务;2.表之间没有关系;

如果您将尝试在 SQL 服务器上执行完全相同的逻辑,例如: 1. 不要使用带锁的 Select ;2.表之间没有关系;SQL Server 和 MongoDB 的速度差距不会那么大。 只有一个地方肯定会更快,写入和更新记录,因为 SQL 在队列和事务中执行插入和更新表,在 MondoDB 上它是异步发生的。 在我的预测中,我无法在 SQL SERVER 和 MongoDB 之间获得任何大的速度差异,因为两个项目之间的业务逻辑非常相似。在 MongoDb 上真正的速度提升你可以在带有投标数据的分析项目上,或者在大型内容管理引擎上获得,如报纸、在线商店等。同样,没有对 MongoDB 的优化和对 SQL 服务器的良好优化可以使这些数据库几乎相等。


max*_*dec 5

虽然其他答案很有意思,但我想补充一点,MongoDB"速度如此之快"的原因之一,至少在基准测试中是这样的write concern.

您可以在此处阅读有关不同写入问题的更多信息,但基本上您可以在编写数据时定义所需的"安全性"级别.

过去的默认级别unacknowledged,这意味着刚刚触发了写入操作,但驱动程序不检查它是否成功执行.它更快,但不太可靠.

他们大约一年前将它改为acknowledged.但我猜大多数基准测试仍然使用'未确认'模式以获得更好的结果.

如果你想看到性能方面的差异,你可以查看这篇文章(有点旧,但它仍然提出了一个想法).