RDBMS:是否可以扩展 RDB?

RDBMS:是否可以扩展 RDB?

是否可以扩展 RDB ? 如果可以,如何实现?

我之所以问这个问题,是因为我曾参加过一次 NoSQL 活动,演讲者多次提到关系数据库的缺点之一是无法扩展。换句话说,我们应该增加更多的内存和存储空间,但我们不能像使用 NoSQL 数据库那样再添加一台计算机。

答案1

是的,在某种程度上。

  • 主-主复制— 理论上可以扩展读写操作,但对于写入来说,它很复杂,并且需要分布式提交机制,例如两阶段提交。这限制了它的实用性。

  • 主从复制— 可以扩展读取操作,但对写入操作毫无帮助。引入复制滞后。

  • 垂直分区— 基本上将不相关的表放在不同的服务器上。 适用于读写,但缺点是您不能轻松地连接来自不同服务器的结果。

  • 水平分区又名分片— 将每个表中的数据均匀分布在所有服务器中。数据的位置由分片键决定。可扩展读写操作,但是通过分片键以外的标准访问数据需要查询所有服务器,在极端情况下需要 map-reduce 类型的基础设施。

如果将垂直和水平分区发挥到极致,最终实际上会得到在 SQL 后端之上构建的 NoSQL 解决方案。

经验法则是,如果你不能在保持完整 ACID 的情况下水平扩展,那么你必须放弃至少一个特性。在可扩展系统中,最常见的是只有最终一致性(即整个系统不能保证始终保持一致,但可以保证最终达到一致状态)。

答案2

有,例如:Oracle RAC、MySQL Sharding、SQL Server HADRON

并非所有应用都适合 NoSQL 范式:例如银行、贸易或会计。

另请参阅http://www.codinghorror.com/blog/2009/06/scaling-up-vs-scaling-out-hidden-costs.html

在我看来,这听起来像是一种偏见,而且这种偏见已经被重复多次了

答案3

是的,可以使用以下方法扩展关系数据库:分片和/或复制

NoSQL 解决方案通常更容易分片/复制。它们通过放宽一致性要求来实现这一点CAP 定理

答案4

可以扩展 RDBMS,但这并不容易,而且需要做出一些妥协(NoSQL 解决方案经常将其作为其基本设计的一部分,称为“功能”)。例如,出于性能原因,您经常被迫放弃跨服务器事务。使用您选择的关系数据库名称搜索“分片”,您可能会找到许多具有不同权衡的解决方案。没有一个是自动的,因为您需要仔细管理哪些数据进入哪个服务器,因为不同表中的数据是有关的

值得一提的是,Facebook 在数千台分片 MySQL 服务器上运行……因此这是可能的。所有 Microsoft Web 资产也在分片 SQL Server 数据库上运行。通常这涉及大量应用程序代码更改(NoSQL 解决方案也会迫使您进行这些更改)。

相关内容