什么使关系数据库与水平扩展保持一致?

时间:2018-02-16 11:37:48

标签: relational-database san

当我研究互联网上关系数据库的水平扩展时,我得到的印象是,包括写入缩放和读取缩放的唯一选项是分片,这似乎是一个手动设计过程,涉及复杂的应用程序特定配置和如果你需要改变分片结构,很难维护。

另一方面,NoSQL似乎本身支持水平扩展,但它的缺点是不支持事务,ACID等。

最近流行的另一个概念是NewSQL数据库。这些数据库通过兼容ACID并能够通过自动分片或其他一些创新架构进行水平扩展,有望成为最佳选择。

我的问题是,如果我们将SAN与我们的关系数据库一起使用,是不是在群集中添加了更多的数据库服务器,而更多的磁盘要向SAN实现水平扩展? (添加磁盘将增加总磁盘IOPS和吞吐量以及磁盘空间。)那里的瓶颈是什么,以便我们需要使用NewSQL数据库来实现ACID和水平扩展?

2 个答案:

答案 0 :(得分:1)

关系数据库中的水平扩展很难实现,因为当您在不同的集群节点上拥有表(或同一表的分片)时,连接通常变得非常低效。此外,还存在复制和保持ACID保证的问题,同时确保所有副本都具有新数据。 但是,有一个水平扩展的RDBMS - MySQL Cluster。来自docs

  

MySQL Cluster跨节点自动分片(分区)表,   使数据库能够以低成本水平扩展

     

MySQL群集中的自动分片

     

与其他分片数据库不同,用户不会失去这种能力   执行JOIN操作,牺牲ACID保证或参考   执行查询和事务时的完整性(外键)   跨越碎片。

在我的公司,我们已经使用MySQL Cluster很长一段时间了,它确实运行良好(并且水平扩展)。还有Citus(最近发布的)建立在PostgreSQL的顶部,但还没有亲自尝试过。

答案 1 :(得分:0)

答案是“CAP Theorem

您最多可以拥有2个 C 依赖性, A 可用性或 P artition Tolerance,但通常归结为

(Consistency OR availability) AND Partition Tolerance
  

设计时考虑到传统ACID的数据库系统,例如RDBMS选择一致性而非可用性,而基于BASE理念设计的系统(例如NoSQL运动中常见的)选择可用性而不是一致性。[6]

对于NoSQL,如果节点退出,系统会保持运行,但您可能无法获得最新数据。当然,这在银行或计费系统中是一个巨大的禁忌。但在社交媒体应用程序中,这并不重要。

更多例子

从这个网站