【问题标题】:Why Relational database cannot be scaled horizontally为什么关系数据库不能水平扩展
【发布时间】: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


【解决方案1】:

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

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

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

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

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

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

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

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

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

还是我错过了什么?

理智的马可

【讨论】:

  • 嗨@mar​​cothesane。您的回答表明关系数据可以横向扩展。水平方向是指添加更多节点。但是大多数文档都说 RDBMS 旨在在单个节点上运行。你可以在这里阅读couchbase.com/nosql-resources/why-nosql。这是 couchdb 的官方文档。我想知道为什么这些 NoSQL 数据库声称 RDMBS 不能扩展到多个节点。
  • “RDBMS”是一个足够宽泛的术语,可以避免诉讼
  • 嗨 Anliket。好吧,你能从那里得到什么误导性信息似乎很奇怪。 Oracle、DB2 UDB 标准、SQL Server 标准等数据库确实是运行在一台(通常是大型)机器上的数据库。但是,例如,Oracle Exadata 可以在许多节点上运行。 Teradata、DB2 Parallel Edition、SQL Server Parallel DW 等数据库,尤其是我最喜欢的 Vertica,都在 MPP(大规模并行处理)、无共享集群上运行。最小的集群通常是 3 个节点,如果添加节点,它们会线性扩展。只需在 MPP 上谷歌,看看你发现了什么。
  • 嗨@mar​​cothesane,我认为某些MPP 示例是特定于OLAP 的RDBMS。此列表中是否有任何 OLTP MPP 数据库?恕我直言,NoSQL 方法在 Web 场景中的原始性能方面具有优势,因为它强制您以确保从同一服务器检索所有信息的方式对特定用户/文档/任何内容的所有数据进行分组。这也可以在 MPP RDBMS 上实现(具有包含所有信息的单个表或使所有相关表共享一个公共共享哈希键):但是,这意味着您正在 RDBMS 上模拟 NoSQL 方法(使用利弊)
  • 在 NoSQL 这样的平台上:我同意“如果你有一把锤子,你的整个世界就是钉子”不是一个好的态度;因此,我不会将高度结构化且同样结构化的数据放入任何非关系数据中,并且我将始终将结构不一致或根本不结构化的数据以及非原子数据(如 BLOB 或 CLOB)放入某些东西中更面向对象。这就是像 NoSQL 这样的平台的用武之地。法拉利和路虎都是好车。驾驶路虎不会在霍根海姆环赛道取胜;你不会开着法拉利涉水过河。
猜你喜欢
  • 1970-01-01
  • 2011-10-03
  • 2010-09-07
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多