传统RDBMS中的水平扩展

时间:2013-11-12 09:24:01

标签: nosql rdbms horizontal-scaling

我刚刚遇到了NoSQL系统,他们拥有众所周知的优势。其中一个似乎是毫不费力的横向缩放。我的问题是,为什么不能像MySQL或SQL Server这样的经典RDBMS能够进行水平扩展?或者无法像NoSQL系统那样做到这一点?

3 个答案:

答案 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)

水平缩放有两个观点:

1)您有太多数据而且一个RDBMS节点无法承受它=>分片

2)您希望扩展到许多并发用户=>复制

案例1)很难,因为传统的JOIN不起作用

案例2)并不是那么难,有集群选项,或者您可以使用JTA在Java中制作自己的“集群”方法,请查看article它基于JEPLayer但是可以使用其他持久性ORM来代替

当然你的问题可能是1)和2)的总和