5

我刚刚遇到了 NoSQL 系统,它们具有所有天赐的优势。其中之一似乎是毫不费力的水平缩放。我的问题是,为什么像 MySQL 或 SQL Server 这样的经典 RDBMS 不能进行水平扩展?还是无法达到与 NoSQL 系统相同的程度?

4

3 回答 3

0

有很多原因。这是一个:

水平扩展通常通过分片来实现——给定的实体存储在集群中的一个主机上,由该实体的某些功能决定。如果可能的话,跨分片的连接效率极低。传统的 RDBMS 依赖于可以并置的数据,这通常会阻碍有效的分片。

于 2013-11-12T09:32:04.843 回答
0

水平缩放有两种观点:

1) 你的数据太多,一个 RDBMS 节点负担不起 => 分片

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

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

案例 2)并不难,有集群选项,或者您可以使用 JTA 在 Java 中制作自己的“集群”方法,看看这篇文章它基于JEPLayer但可以使用其他持久性 ORM

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

于 2013-12-06T16:41:48.090 回答
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,但要研究情况并找到最佳选择。

于 2013-11-12T19:27:04.063 回答