我知道这个问题已被问了好几次,但我没有得到任何令人满意的答案。
我已阅读过很多博客,其中大多数人都说RDBMS无法横向扩展。解决这个问题的唯一方法是购买更大的机器。
然后我读了为什么它们不能水平缩放。人们说,因为它们根据ACID属性提供可靠,成熟的服务。我的论点是,我们不能删除RDBMS来为特定表提供ACID属性。这是它不能横向扩展的唯一原因,我们必须考虑NoSQL数据库。
提出的第二个参数是NoSQL数据库将数据存储为单个单元,而RDBMS将数据存储在多个表中。因此,一条数据可以在一个系统中,而另一条数据可以在另一个系统中。因此,分布式扩展RDBMS变得困难。我向他们提出的问题是,为什么我们不能将所有相关数据存储在一个表中,而是在情况需要时将其分散到多个表中。如果NoSQL可以将数据作为单个单元存储在单个集合中,为什么RDBMS不能将数据作为单个单元存储在单个表中。 (例如,为什么必须将订单拆分为订单表,客户表和付款表。为什么不能将它们分成单个表,NoSQL将存储的方式)
这也允许开发人员在不必将内存结构转换为关系结构的情况下进行开发。
简而言之,我们是否可以使RDBMS像NoSQL数据库一样运行并使其水平扩展?
答案 0 :(得分:2)
首先 - 你的意思是'横向缩放'?
对我来说 - 水平扩展是我们在MPP(大规模并行处理)数据库中所做的事情 - 比如Vertica,Teradata,DB2 Parallel Edition,NonStop SQL等:你有一个非常大的表,你可以在所有数据库中均匀分配MPP集群的节点,通常基于主键的哈希值或类似的东西。这就是Hadoop和所有其他Map-Reduce架构所做的事情(虽然通常效率较低,至少目前如此)。
(只是编辑以澄清):如果您的群集中有10个节点,那么您的大表都将被分发,以便在每个节点上拥有十分之一的数据。现在,缩放将添加例如10个节点,并重新分配数据,以便每个表在每个节点上具有1/20的数据。 MPP数据库线性扩展;这意味着通过将节点数量加倍,使用相同的数据量,查询现在可以快速运行两倍。
你似乎意味着不同的东西 - 我对你的意思很好奇。
至于RDBMS必须将所有内容分成几个表:
' R'在RDBMS中代表关系'。在进入所有这些讨论之前,您应该阅读关系代数的基本教程。关系只是一组可以用相同属性描述的对象。这样,所有对象都具有相同的属性/列/字段。一旦违反此规则,它就不再是关系/表格了。
我强烈建议您在开始使用SQL之前接受关系理论和关系数据库的培训。
这是一个自己的大世界,你将有机会探索。这一切归结为设定理论和布尔和关系代数。你可以用它做很多事情......
这里的问题就像问自行车为什么有两个轮子一样。
或者我错过了什么?
Marco the Sane