2

我知道这个问题已经被问过很多次了,但我没有得到任何令人满意的答案。

我读过很多博客,其中大多数都说 RDBMS 不能水平扩展。处理它的唯一方法是购买更大的机器。

然后我读到了为什么它们不能水平缩放。人们说是因为他们根据 ACID 属性提供了可靠、成熟的服务。我的论点是我们不能删除 RDBMS 来为特定表提供 ACID 属性。这是它不能水平扩展的唯一原因,我们必须考虑 NoSQL 数据库。

提出的第二个论点是 NoSQL 数据库将数据存储为一个单元,而 RDBMS 将数据存储在多个表中。因此,一条数据可能在一个系统中,而它所引用的另一条数据可能在另一个系统中。因此分布式扩展 RDBMS 变得困难。我对他们的问题是,如果情况需要,为什么我们不能将所有相关数据存储在一个表中,而是将其分散到多个表中。如果 NoSQL 可以将数据作为单个单元存储在单个集合中,为什么 RDBMS 不能将数据作为单个单元存储在单个表中。(例如,为什么必须将订单拆分为订单表、客户表和付款表。为什么不能将它们合并到一个表中,就像 NoSQL 存储的方式一样)

这也允许开发人员在无需将内存结构转换为关系结构的情况下进行开发。

简而言之,我们能否让 RDBMS 像 NoSQL 数据库一样运行并使其水平扩展?

4

1 回答 1

2

首先-“水平缩放”是什么意思?

对我来说——水平扩展是我们在 MPP(大规模并行处理)数据库中所做的——比如 Vertica、Teradata、DB2 Parallel Edition、NonStop SQL 等:你有一个非常大的表,你可以将它均匀地分布在你的所有节点上MPP 集群,通常基于主键的哈希值或类似的东西。这也是 Hadoop 和所有其他 Map-Reduce 架构所做的(虽然通常效率较低,至少目前如此)。

(只是编辑澄清):如果您的集群中有 10 个节点,那么您的大表都分布在每个节点上的十分之一的数据。现在,缩放将是添加,例如,10 个节点,然后重新分配数据,以便每个表在每个节点上都有 1/20 的数据。并且 MPP 数据库是线性扩展的;这意味着通过将节点数量增加一倍,在数据量相同的情况下,查询现在运行速度将提高一倍。

你的意思似乎不同——我很好奇你的意思。

至于 RDBMS 必须将所有内容拆分为几个表:

RDBMS 中的“R”代表“关系”。在讨论所有这些之前,您应该阅读有关关系代数的基本教程。关系只是一组可以用相同属性描述的对象。这样,所有对象都具有相同的属性/列/字段。一旦违反了这条规则,它就不再是关系/表了。

我强烈建议你在开始使用 SQL 之前就接受关系理论和关系数据库的培训。

这是一个巨大的世界,您将有机会探索。这一切都归结为集合论以及布尔和关系代数。你可以用它做很多事情......

你的问题就像问为什么自行车有两个轮子一样。

还是我错过了什么?

理智的马可

于 2017-01-14T12:35:32.580 回答