【发布时间】:2017-05-29 16:01:05
【问题描述】:
我知道这个问题已经被问过很多次了,但我没有得到任何令人满意的答案。
我阅读了很多博客,其中大多数都说 RDBMS 无法水平扩展。处理它的唯一方法是购买更大的机器。
然后我读到了为什么它们不能水平缩放。人们说是因为他们根据 ACID 属性提供了可靠、成熟的服务。我的论点是我们不能删除 RDBMS 来为特定表提供 ACID 属性。这就是它不能水平扩展的唯一原因,我们必须考虑 NoSQL 数据库。
提出的第二个论点是 NoSQL 数据库将数据存储为一个单元,而 RDBMS 将数据存储在多个表中。因此,一条数据可能在一个系统中,而它所引用的另一条数据可能在另一个系统中。因此分布式扩展 RDBMS 变得困难。我对他们的问题是,如果情况需要,为什么我们不能将所有相关数据存储在一个表中,而是将其分散到多个表中。如果 NoSQL 可以将数据作为单个单元存储在单个集合中,为什么 RDBMS 不能将数据作为单个单元存储在单个表中。 (例如,为什么必须将订单拆分为订单表、客户表和付款表。为什么不能像 NoSQL 那样将它们合并到一个表中)
这也使开发人员无需将内存结构转换为关系结构即可进行开发。
简而言之,我们能否让 RDBMS 像 NoSQL 数据库一样运行并使其水平扩展?
【问题讨论】:
-
是的,把所有东西都粘成一个blob——不过祝你好运。
-
Teradata 是一种商业分布式 RDBMS,从 80 年代初开始运行。如果它存在,它可能是可能的。
-
如果不重复您阅读的博客,很难回答。 ACID 迫使您检查很多事情(您应该尝试做一些示例,它可能会使它更清晰!)并且 rdbms 严重依赖它,如果数据是非结构化的并且分散在各处,这会使它变得复杂(但并非不可能,集群和例如 json 存在)。如果您删除(其中一些)这些检查,您可以例如将所有内容存储在您想要的位置,甚至具有离线节点。如果 google 搜索结果或 facebook 列表很快,但不是 100% 准确,你可以接受它。如果您的银行也有同样的想法,您可能会抱怨。
-
您可以随意设计您的数据库。事实上,您甚至可以使用支持关系模型的软件来使用非关系模型。
标签: mysql sql horizontal-scaling rdbms nosql