当我研究互联网上关系数据库的水平扩展时,我得到的印象是,包括写入缩放和读取缩放的唯一选项是分片,这似乎是一个手动设计过程,涉及复杂的应用程序特定配置和如果你需要改变分片结构,很难维护。
另一方面,NoSQL似乎本身支持水平扩展,但它的缺点是不支持事务,ACID等。
最近流行的另一个概念是NewSQL数据库。这些数据库通过兼容ACID并能够通过自动分片或其他一些创新架构进行水平扩展,有望成为最佳选择。
我的问题是,如果我们将SAN与我们的关系数据库一起使用,是不是在群集中添加了更多的数据库服务器,而更多的磁盘要向SAN实现水平扩展? (添加磁盘将增加总磁盘IOPS和吞吐量以及磁盘空间。)那里的瓶颈是什么,以便我们需要使用NewSQL数据库来实现ACID和水平扩展?
答案 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,如果节点退出,系统会保持运行,但您可能无法获得最新数据。当然,这在银行或计费系统中是一个巨大的禁忌。但在社交媒体应用程序中,这并不重要。
更多例子
从这个网站