我刚刚遇到了NoSQL系统,他们拥有众所周知的优势。其中一个似乎是毫不费力的横向缩放。我的问题是,为什么不能像MySQL或SQL Server这样的经典RDBMS能够进行水平扩展?或者无法像NoSQL系统那样做到这一点?
答案 0 :(得分:0)
原因很多。这是一个:
水平缩放通常通过分片实现 - 给定实体存储在群集中的一个主机上,由该实体的某个功能决定。如果可能的话,跨分片的连接效率非常低。传统的RDBMS依赖于可以并置的数据,这通常会阻止有效的分片。
答案 1 :(得分:0)
我从@joews那里得到了一个不同的存根。
某些情况需要全文搜索。或者存储一些高容量的键值数据。一些NoSQL系统,例如Lucene,有几种类型的索引可以并行扫描(想一想)。传统的RDBMS搜索一次只使用一个索引,有时甚至默认为昂贵的全表扫描。
一些公司,如Facebook,已经为实时内容服务分割了MySQL实例。但为了实现这一目标,您可能需要冒险尝试更改MySQL源代码和/或构建系统。你确定你准备好了吗?
其他用例拥有如此多的数据,它只是不适合传统RDBMS的查询模型,这就是Dremel,Apache Drill和Presto等各种系统出现的原因。
所有这一切都说过,请记住NoSQL系统根据它们如何解决着名的CAP定理而分组到桶中的事实。 Martin Fowler给出了我最喜欢的解释:在分布式系统的网络分区存在的情况下,您可以保证数据一致性(不同用户与系统的交互之间没有冲突)或系统可用性(系统可搜索或数据被接受)无论如何)。我强烈建议您观看Martin的NoSQL简介:http://www.youtube.com/watch?v=qI_g07C_Q5I
相反,RDBMS是事务性的,即它们提供全部或全部功能,如ATM机。如果它是您的用例和使用/数据量可接受的东西,请使用它!如果没有,请看NoSQL,但研究景观并找到最佳选择。
答案 2 :(得分:0)