当人们比较SQL和noSQL,并总结每个人的优点和缺点时,我从未听过任何人谈论的是速度。
执行SQL查询通常更快比执行noSQL查询?
我的意思是,对我来说这将是一个非常明显的结论,因为如果你知道数据库的结构,你应该总能找到更快的东西。
但是人们似乎从来没有提到这一点,所以我想知道我的结论是对还是错。
答案 0 :(得分:72)
倾向于使用noSQL的人特别使用它,因为它适合他们的用例。脱离正常的RDBMS表关系和约束,以及ACID数据,很容易让它运行得更快。
考虑使用NoSQL的Twitter,因为用户只在网站上做了非常有限的事情,或者确切地说是一条推文。并发性可以被认为是不存在的,因为(1)没有其他人可以修改你的推文,(2)你通常不会同时从多个设备发推文。
答案 1 :(得分:48)
noSQL系统的定义非常广泛 - 不使用SQL /的数据库不是RDBMS。 因此,对你的问题的答案简而言之:“这取决于”。
有些noSQL系统基本上只是持久性键/值存储(如Project Voldemort)。如果您的查询类型为“查找给定密钥的值”,那么这样的系统将(或者至少应该)比RDBMS更快,因为它只需要更小功能集。
另一种流行的noSQL系统是文档数据库(如CouchDB)。 这些数据库没有预定义的数据结构。 它们的速度优势在很大程度上依赖于非规范化并创建一个数据布局,该布局是根据您将在其上运行的查询量身定制的。例如,对于博客,您可以将博客文章及其评论保存在文档中。这减少了对连接和查找的需求,使您的查询更快,但也可能降低您的查询灵活性。
答案 2 :(得分:7)
正如爱因斯坦所说,速度是相对的。
如果您需要存储主/详细简单应用程序(如购物车),则需要在SQL应用程序中执行多个Insert语句,当您进行查询时,您还将获得一组数据信息购买,如果您正在使用NoSQL,并且您正在使用它,那么您将在一个简单的“记录”中获得单个订单的所有数据(如果您使用像djondb这样的NoSQL数据库的条款,则为文档)。 / p>
所以,我真的认为应用程序的性能可以通过实现单个需求所需的事情来衡量,如果你需要做几个Insert来存储订单而你只需要一个简单的Insert在像djondb这样的数据库中,NoSQL世界的性能将提高10倍,仅仅是因为你使用的数据库层调用次数减少了10倍,就是这样。
为了说明我的观点,让我链接一个我前段时间写过的关于NoSQL和SQL数据模型方法之间差异的例子:http://djondb.com/blog/?p=4,我知道这是一个自我引用,但基本上我写的是为了解决这个问题我发现这是RDBMS人员可能遇到的最具挑战性的问题,它总是一个很好的方法来解释为什么NoSQL与SQL世界如此不同,以及为什么它会随时获得更好的性能,而不是因为我们使用“nasa”技术,这是因为NoSQL将让开发人员做得更少......并获得更多,更少的代码=更高的性能。
答案 3 :(得分:2)
答案是:这取决于。一般来说,NoSQL DATABASES(没有“查询”)的目标是可伸缩性。 RDBMS通常在某些时候有一些硬限制(我说的是毫秒和几百万行),你不能通过传统的方式扩展(复制,集群,分区),而你需要更多东西,因为你的需求在不断增长。或者即使您设法扩展,整体设置也相当复杂。或者你可以扩展读取,但不能写入。
查询取决于服务器的特定实现,您正在进行的查询类型,表中的列等等......请记住,查询只是RDBMS的一部分。
答案 4 :(得分:-6)