关系数据库是否可以水平缩放

问题描述 投票:18回答:4

经过一些谷歌搜索后,我发现:

[C0中的注释:

MySQL Cluster在节点之间自动分片(分区)表,使数据库能够根据低成本商品水平扩展用于读取和写入密集型工作负载的硬件,可同时访问从SQL直接通过NoSQL API。

关系数据库可以横向扩展吗?会以某种方式基于NoSQL数据库吗?

有人有真实的例子吗?

我如何在此类数据库中管理sql请求,事务等?

mysql transactions scalability horizontal-scaling nosql
4个回答
13
投票

我认为答案是肯定的。您必须记住,SQL只是一种数据访问语言。绝对没有理由不能将其扩展到多台计算机和网络分区上。这是一个具有挑战性的问题吗?毫无疑问,这就是为什么软件还处于起步阶段。

现在,我想您想问的是:“我熟悉的标准标准SQL类型关系数据库管理系统中的所有功能都可以开发为以这种方式与多个服务器一起使用吗?”虽然我承认我没有深入研究这个问题,但仍有一些定理说“不,它不能。” mysql docs假设我们不能在同一级别上拥有所有三种品质。

现在,出于所有实际目的,“分片”或“分区”或任何您想称呼的东西都不会消失;与此相反的。这意味着,考虑到CAP定理的适用程度,我们将不得不改变对数据库的思考方式以及与数据库的交互方式(至少在一定程度上)。为了在No-SQL平台上取得成功,许多开发人员已经做出了必要的转变,但还有许多人没有。最终,将开发出足够成熟的模型和足够有效的解决方法,以致您所指的传统SQL数据库或多或少地适用于多台计算机。这已经开始流行了,我想再给它几年,我们将会做到这一点。否则,我们将集体转移思维到不再需要的点,世界将变得更加美好。 :)


10
投票

可能,但是需要大量维护,说明-

数据的垂直缩放(与SQL数据库中的Normalization的同义词)称为按列将数据拆分为多个表,以减少空间冗余。用户表示例-

Consistency-Availability-Partition Theorem

数据的水平缩放(与分片的同义词)称为逐行拆分为多个表,以减少获取数据所需的时间。用户表示例-

enter image description here

这里要注意的重点是,因为我们可以看到SQL数据库中的表被规范化为多个相关数据表。为了在多台机器上分片该表的数据,您需要相应地分片相关的规范化数据,这反过来又会增加维护工作。就像上面的SQL数据库示例一样,

与订单成一对多关系的客户表表格

如果将客户数据的某些行移动到另一台计算机上(称为分片,则还需要将其相关的订单数据移动到同一台计算机上,如果有多个相关表,这将是一件麻烦的事情。

对于NOSQL数据库遵循平面表结构(数据以聚合形式而不是规范化形式存储),分片很方便。


8
投票

感谢您的问答。我试图向这样的人解释这一点:

enter image description here定理而言,您不能同时拥有全部三个。因此,当发生分区(网络或服务器故障)时:

  • 单个服务器上的CAP给您relational database(一致性)。所以当发生C(分区-服务器/网络故障),您无法拥有P(可用性-数据库关闭)

  • A A给您nosql datastore,因此当发生A时,您不能具有P(一个或多个复制分区将不可用同步,直到n / w回来并且它们全部同步为止)。所以只会是C


0
投票

Google Spanner是可以水平扩展的关系数据库的示例。分片和复制是自动完成的,因此无需担心。有关更多信息,请查看此eventually consistent

© www.soinside.com 2019 - 2024. All rights reserved.