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