SQL与noSQL(速度)的比较

93

当人们比较SQL和NoSQL,并得出各自的优劣时,我从未听到有人谈论速度。

执行SQL查询一般不是比执行NoSQL查询更快吗?

我的意思是,对于我来说,这将是一个非常明显的结论,因为如果您知道您的数据库结构,您应该始终能够更快地找到所需内容。

但人们似乎从未提到过这一点,所以我想知道我的结论是对还是错。


1
相关答案:https://dev59.com/Emgu5IYBdhLWcg3wj3v5#11244674 - Darren Cook
5个回答

96

那些倾向使用NoSQL的人们之所以使用它,是因为它恰好适合他们的使用场景。由于与正常的关系型数据库表关系和约束以及数据的ACID性分离,因此很容易使其运行更快。

以Twitter为例,它使用NoSQL是因为用户在网站上只做很有限的事情,或者说只有一个 - 发推文。而且并发性可以被认为不存在,因为(1)没有人可以修改你的推文,(2)你通常不会同时从多个设备发布推文。


6
Twitter使用NoSQL技术(数据集群采用Hadoop,社交媒体采用图形NoSQL数据库FlockDB),但要明确一点,Twitter严重依赖关系型数据库MySQL。谷歌正在使用混合关系型和NoSQL的内部解决方案以取得最佳效果(“F1”http://research.google.com/pubs/pub41344.html)。 - Tom Stickel
1
是的,将Hadoop与MySQL混合使用有利于将“NoSQL”定义为“Not Only SQL”。但另一方面,许多“NoSQL”存储开始实现SQL作为一种语言,这有利于Mark Madsen在他的数据库历史记录中的解释:“不,SQL”。 - Lukas Eder

63

noSQL系统的定义非常广泛,它是一种不使用SQL或不是关系型数据库管理系统(RDBMS)的数据库。因此,简单地回答您的问题是:“这要根据情况而定。”

有些noSQL系统基本上只是持久化的键/值存储(例如Project Voldemort)。如果您的查询类型是“查找给定键的值”,这样的系统将(或者至少应该)比RDBMS更快,因为它只需要具备更小的特性集。

另一种流行的noSQL系统是文档数据库(例如CouchDB)。这些数据库没有预定义的数据结构。它们的速度优势在于高度依赖于去规范化以及创建适合您将在其上运行的查询的数据布局。例如,对于博客,您可以将博客文章与其评论保存在一个文档中。这减少了联接和查找的需要,使您的查询速度更快,但它也可能会降低您进行查询的灵活性。


11

正如爱因斯坦所说,速度是相对的。

如果您需要存储类似购物车的主/从简单应用程序,您需要在SQL应用程序中执行多个插入语句,并且在执行查询以获取购买时,您将获得一组数据信息。如果您使用NoSQL,并且使用得当,则可以在一个简单的“记录”(如果使用NoSQL数据库的术语,例如djondb,则为文档)中拥有所有单个订单的数据。

因此,我真的认为应用程序的性能可以通过实现单个要求所需做的事情的数量来衡量。如果您需要执行多个插入操作来存储订单,并且在像djondb这样的数据库中仅需要一个简单的插入操作,则在NoSQL世界中性能将快10倍,仅仅是因为您使用了10倍少的调用到数据库层,就是这样。

为了说明我的观点,让我链接一篇我写过的关于NoSQL和SQL数据模型方法之间差异的例子:https://web.archive.org/web/20160510045647/http://djondb.com/blog/nosql-masterdetail-sample/,我知道这是一个自我参考,但基本上我写它是为了回答这个问题,我发现这是一个关系型数据库管理系统的人最具挑战性的问题,它总是解释为什么NoSQL与SQL世界如此不同,以及为什么它将随时实现更好的性能,不是因为我们使用“nasa”技术,而是因为NoSQL将让开发人员做更少的事情...并获得更多,更少的代码=更大的性能。


看起来那个链接已经失效了。我们能否用互联网档案馆上该页面的链接替换它? - shaunakde

3
答案是:这取决于具体情况。一般而言,NoSQL数据库(没有“查询”)的目标是可扩展性。关系型数据库通常在某些点上有一些硬性限制(我说的是百万和千万行),传统手段(复制、集群、分区)无法再进行更多的扩展,您需要更多的东西因为您的需求不断增长。或者即使您设法扩展,整体设置也相当复杂。或者您可以扩展读取,但不能扩展写入。

查询依赖于服务器的特定实现、您正在执行的查询类型、表中的列等等...请记住,查询只是关系型数据库的其中一部分。


-16

关系型数据库(如SQL)查询1000个人的数据需要2000毫秒,而图形数据库(如neo4j)只需要2毫秒。如果创建更多节点(1000000个),速度稳定在2毫秒。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接