As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center获取指导。




已关闭8年。





我读过一些文章说,像MySQL这样的RDBMS不能很好地扩展,但是像MongoDB这样的NoSQL可以很好地分片。
我想知道RDBMS提供的哪些功能使其无法很好地分片。

最佳答案

大多数RDBMS系统都保证所谓的ACID properties。这些特性大多数都归结为一致性。对数据的每次修改都会将数据库从一种一致状态转移到另一种一致状态。

例如,如果您在单个事务中更新多个记录,则数据库将确保只要事务尚未完成,所涉及的记录就不会被其他查询修改。因此,在事务期间,可能会锁定多个表以进行修改。如果这些表分散在多个分片/服务器上,则将花费更多时间来获取适当的锁,更新数据并释放锁。

CAP theorem指出分布式(即可伸缩)系统不能同时保证以下所有属性:


一致性
可用性
分区容限


RDBMS系统保证一致性。分片使系统可以进行分区。从定理可以得出,系统不能因此保证可用性。这就是为什么标准RDBMS不能很好地扩展的原因:它不能保证可用性。如果您无法访问数据库,那么数据库有什么用呢?

NoSQL数据库为了提高可用性而降低了一致性。这就是为什么它们在可伸缩性方面更好。

我并不是说RDBMS系统根本无法扩展,但是难度更大。 This article概述了一些可能的分片方案,以及您可能遇到的问题。大多数方法都会牺牲一致性,这是RDBMS系统最重要的功能之一,并且会阻止其扩展。

关于nosql - 为什么NoSQL说传统的RDBMS不擅长可扩展性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3423193/

10-11 03:06