为什么MongoDB这么快

为什么MongoDB这么快,mongodb,Mongodb,我向我的同事展示了MongoDB与SQL 2008的性能基准,虽然他认为MongoDB更快,但他不明白这是怎么可能的。他的逻辑是,SQL已经存在了几十年,有一些最聪明的人在使用它,MongoDB怎么能做到这一点;一个相对较新的孩子在表演上会如此出色吗?我无法提供一个可靠的技术性答案,我希望你们能提供帮助。SQL需要做很多事情,Mongo只需要将数据放到磁盘上(几乎)MongoDB不像传统的关系数据库。它是基于XML或文档的,提供了弱的一致性保证,并且不必像SQL那样保证一致性 Mongo不符合A

我向我的同事展示了MongoDB与SQL 2008的性能基准,虽然他认为MongoDB更快,但他不明白这是怎么可能的。他的逻辑是,SQL已经存在了几十年,有一些最聪明的人在使用它,MongoDB怎么能做到这一点;一个相对较新的孩子在表演上会如此出色吗?我无法提供一个可靠的技术性答案,我希望你们能提供帮助。

SQL需要做很多事情,Mongo只需要将数据放到磁盘上(几乎)

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

Mongo不符合ACID标准,因此它不需要处理几乎同样多的“积垢”,以确保您尝试输入DB的内容可以稍后再次返回


如果您不介意为了速度而丢失一些功能和可能丢失的数据,那么Mongo是个不错的选择。如果您绝对需要保证数据完整性和/或有复杂的连接要求,那么请避免使用Mongo类型的系统,如瘟疫。

正如前面所述,MongoDB不是创建的,不应与SQL数据库相同。SQL(和其他基于关系的数据库)存储关系数据,即表X中的数据可以设置为与表Y中的信息有直接关系。MongoDB没有这种能力,因此可以降低大量开销。因此,MongoDB通常用于存储列表,而不是关系

再加上它还没有完全符合ACID标准(尽管自首次推出以来它已经取得了长足的进步),这就是速度差异的主要原因

以下是在实际站点上概述的完整事务模型和它们的模型之间的差异

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

  • 无回滚。您的代码必须在没有回滚的情况下运行。在执行第一个数据库之前,请检查所有编程条件 写操作。对写入操作进行排序,以使 重要的操作发生在最后
  • 显式锁定。执行操作时,代码可能会显式锁定对象。因此,应用程序程序员具有 在需要时确保“可序列化”的能力。锁定 该功能将在的alpha后期/beta早期版本中提供 MongoDB
  • 启动时检查数据库。如果数据库异常终止(罕见),数据库检查过程将在启动时自动运行 (类似于fschk)


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

虽然其他答案很有趣,但我要补充的是,MongoDB“如此之快”(至少在基准测试中)的原因之一是
写问题

您可以阅读更多关于不同写入关注点的信息,但基本上您可以在写入数据时定义所需的“安全性”级别

默认级别过去是未确认的,这意味着写入操作刚刚触发,但驱动程序不检查是否成功执行。它速度更快,但可靠性要低得多

他们将其更改为
确认
。但我猜大多数基准测试仍然使用“未确认”模式来获得更好的结果


如果你想看到性能方面的差异,你可以检查一下(有点老了,但它仍然提供了一个想法)。

我还要补充一点,另一个差异是速度方面的差异,而更多的是概念化方面的差异(尽管我相信这可能有助于提高速度,因为加入问题的空间较小)基于文档的存储非常类似于面向对象的思维方式

基于文档的连接可能不是完美的ACID,但我相信MongoDB更容易获得您想要的内容,只需获取整个文档,而不必处理SQL DB的所有连接,同时冒着一些错误连接的风险


向所有SQL死硬粉丝道歉。

MongoDB速度很快™ 因为:

  • 非酸性:可用性优先于一致性
  • 异步插入和更新:它的意思是,MongoDB不会在处理插入查询时立即将数据插入数据库,而是在一定时间后刷新数据。更新也是如此
  • 无连接开销:当他们说MongoDB是一个文档数据库时,他们的意思是,它是一个包含自给自足数据的数据库,所有信息都像真实文档一样嵌入其中
  • MongoDb更快,因为: 1.没有交易; 2.表之间没有关系

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

    根据MongoDB的网站,MongoDB是一个文档数据库,具有您想要的可扩展性和灵活性,以及您需要的查询和索引

    让我们试试看