【发布时间】:2011-03-26 06:58:12
【问题描述】:
我读过一些文章说 MySQL 等 RDBMS 不擅长扩展,但 MongoDB 等 NoSQL 可以很好地分片。 我想知道RDBMS提供的哪个特性使得自己不能很好的分片。
【问题讨论】:
-
你说的是“共享”还是“碎片”?
-
Shard,就像将数据库分片到单独的分区中一样。
标签: nosql rdbms sharding scalable
我读过一些文章说 MySQL 等 RDBMS 不擅长扩展,但 MongoDB 等 NoSQL 可以很好地分片。 我想知道RDBMS提供的哪个特性使得自己不能很好的分片。
【问题讨论】:
标签: nosql rdbms sharding scalable
为什么 NoSQL 帅哥和帅哥不喜欢联接:http://www.dbms2.com/2010/05/01/ryw-read-your-writes-consistency/
【讨论】:
大多数 RDBMS 系统保证所谓的ACID properties。大多数这些属性归结为一致性;对数据的每次修改都会将您的数据库从一种一致状态转移到另一种一致状态。
例如,如果您在单个事务中更新多条记录,只要该事务尚未完成,数据库将确保所涉及的记录不会被其他查询修改。因此在事务期间,可能会锁定多个表进行修改。如果这些表分布在多个分片/服务器上,则需要更多时间来获取适当的锁、更新数据和释放锁。
CAP theorem 声明分布式(即可扩展)系统无法同时保证以下所有属性:
RDBMS 系统保证一致性。分片使系统能够容忍分区。从定理得出,系统因此不能保证可用性。这就是标准 RDBMS 不能很好地扩展的原因:它不能保证可用性。如果你不能访问它,数据库有什么用?
NoSQL 数据库放弃一致性以支持可用性。这就是为什么它们更擅长可扩展性。
我并不是说 RDBMS 系统根本无法扩展,它只是更难。 This article 概述了一些可能的分片方案,以及您可能遇到的问题。大多数方法都牺牲了一致性,这是 RDBMS 系统最重要的特性之一,并且会阻止其扩展。
【讨论】:
涉及多个分片的查询很复杂(例如,不同分片中的表之间的 JOIN)
【讨论】: