一尘不染

为什么MongoDB比SQL DB快得多的任何详细和特定原因?

sql

好的,关于MongoDB为什么这么快有疑问

我很欣赏这些答案,但是它们很笼统。是的,我知道:

  • MongoDB是基于文档的,那么为什么基于文档可以提高速度呢?
  • MongoDB是noSQL,但是为什么noSQL意味着更高的性能?
  • SQL在一致性,ACID等方面比MongoDB要做的事情要多得多,但是我相信MongoDB还在做类似的事情来保持数据安全,维护索引等,对吗?

好吧,我写这个问题只是为了找出答案

  1. *MongoDB高性能的 *具体原因 是什么?
  2. SQL到底 做什么的,而MongoDB却没有,所以它获得了很高的性能?
  3. 如果面试官(MongoDB和SQL专家)问您"Why MongoDB is so fast",您将如何回答?显然,仅仅回答:"because MongoDB is noSQL"还不够。

谢谢


阅读 189

收藏
2021-03-17

共1个答案

一尘不染

首先,让我们将苹果与苹果进行比较: MongoDB的读取和写入就像是在RDBMS中没有主键的表上通过主键进行的单个读取和写入。

因此,让我们精确地进行基准测试:http : //mysqlha.blogspot.de/2010/09/mysql-versus-
mongodb-yet-another-silly.html

事实证明,在完全相同的原始操作的公平比较中,速度差异并不大。 实际上,MySQL稍快一些。 我会说,它们是等效的。

为什么?因为实际上,在该特定基准测试中,两个系统都在做类似的事情。通过主键搜索返回单行实际上并没有那么多工作。这是一个非常快的操作。我怀疑跨进程通信开销是其中很大的一部分。

我的猜测是,MySQL中经过更优化的代码比MongoDB的系统开销要少一些(没有逻辑锁,也可能还有其他一些小东西)。

这得出一个有趣的结论: 您可以将MySQL像文档数据库一样使用,并从中获得出色的性能。


如果面试官说:“我们不在乎文档或样式,我们只需要一个更快的数据库,您认为我们应该使用MySQL还是MongoDB?”,我该怎么回答?

我建议暂时忽略性能,并查看两个系统的相对强度。对于MongoDB,诸如扩展(扩展)和复制之类的事情已经浮现在脑海。对于MySQL,还有很多功能,例如丰富的查询,并发模型,更好的工具和成熟度等等。

基本上,您可以以功能换取性能。愿意这样做吗?这是通常无法做出的选择。如果您不惜一切代价选择性能,请在添加其他技术之前先考虑对MySQL进行调整。


当客户端通过主键检索单个行/文档时,将发生以下情况。我将注释这两个系统之间的差异:

  1. 客户端构建一个二进制命令(相同)
  2. 客户端通过TCP发送(相同)
  3. 服务器解析命令(相同)
  4. 服务器从缓存访问查询计划(仅SQL,不是MongoDB,不是HandlerSocket)
  5. 服务器要求B-Tree组件访问行(相同)
  6. 服务器对通往该行的B树路径进行物理只读锁定(相同)
  7. 服务器对行进行逻辑锁定(仅SQL,不是MongoDB,不是HandlerSocket)
  8. 服务器对行进行序列化并通过TCP发送(相同)
  9. 客户端反序列化(相同)

对于典型的基于SQL的RDBMS,只有两个附加步骤。 这就是为什么没有真正区别的原因。

2021-03-17