最近我读了很多关于noSQL DBMS的文章。我理解CAP定理、ACID规则、基本规则和基本理论。但是没有找到任何关于为什么noSQL比关系型数据库更容易扩展的资源(例如,在需要大量数据库服务器的系统中)?我猜保留约束和外键会消耗资源,而且当DBMS是分布式的时候,它会复杂得多。但我希望有更多的东西。
有人能解释一下noSQL/SQL是如何影响可伸缩性的吗?
发布于 2013-04-09 04:28:27
这真的取决于你的问题,每种数据库类型都有自己的优势,而且SQL和noSQL在伸缩性上都不一样。这完全取决于你拥有的数据,如果你的数据本质上是关系型的,那么SQL可能更好,如果你的数据是基于文档的(没有定义的模式),那么noSQL可能更好。我们在我们的产品中使用了这两种类型的数据库,我们有许多不同的数据,一些适合SQL,另一些适合noSQL。
你在考虑什么样的规模?并行访问、处理大量查询还是处理非常大的数据?你的问题非常宽泛,如果不知道你要解决的问题,回答起来有点困难。
发布于 2013-04-09 05:54:57
SQL/noSQL的性能不是在概念级别上测量的。事实上,当关系模型(比SQL更准确地说)出现时,它被认为是低效的,然后它接管了世界。在计算机科学中,评估的是特定算法(使用特定结构)的时间复杂度。
在任何类型的数据库中,都使用具有多个操作(插入、删除、搜索)的多个数据结构。即使对于相同的数据结构,相同的操作也可能使用不同的算法,从而提供不同的性能。不同的RDBMSes可能使用不同的数据结构/算法或变体。
对于有不同类型(http://en.wikipedia.org/wiki/NoSQL)的noSQL数据库来说,这一点甚至更加有效。
因此,我认为在这么高的水平上比较性能是没有意义的。您需要查看具体的算法,并根据您的问题的需要进行选择。
还可以考虑一些人成功地在关系数据库管理系统中实现了具有大量数据的无模式模型意义上的noSQL:http://backchannel.org/blog/friendfeed-schemaless-mysql
最后,可能是更主观的观点,具体地说,我只知道当您必须更改模式时,性能才会有所不同。当表很大时,大多数RDBMs都很难进行更改。这并不是说它们在概念上有问题,或者不如noSQL。这不是问题,因为设计过去被认为是稳定的。
RDBMSes已经开始适应了,参见eg。MariaDB中的动态列:https://kb.askmonty.org/en/dynamic-columns/
https://stackoverflow.com/questions/15888267
复制相似问题