【问题标题】:Why NoSQL say traditional RDBMS is not good at scalable [closed]为什么 NoSQL 说传统的 RDBMS 不擅长扩展 [关闭]
【发布时间】:2011-03-26 06:58:12
【问题描述】:

我读过一些文章说 MySQL 等 RDBMS 不擅长扩展,但 MongoDB 等 NoSQL 可以很好地分片。 我想知道RDBMS提供的哪个特性使得自己不能很好的分片。

【问题讨论】:

  • 你说的是“共享”还是“碎片”?
  • Shard,就像将数据库分片到单独的分区中一样。

标签: nosql rdbms sharding scalable


【解决方案1】:

为什么 NoSQL 帅哥和帅哥不喜欢联接:http://www.dbms2.com/2010/05/01/ryw-read-your-writes-consistency/

【讨论】:

    【解决方案2】:

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

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

    CAP theorem 声明分布式(即可扩展)系统无法同时保证以下所有属性:

    • 一致性
    • 可用性
    • 分区容错

    RDBMS 系统保证一致性。分片使系统能够容忍分区。从定理得出,系统因此不能保证可用性。这就是标准 RDBMS 不能很好地扩展的原因:它不能保证可用性。如果你不能访问它,数据库有什么用?

    NoSQL 数据库放弃一致性以支持可用性。这就是为什么它们更擅长可扩展性。

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

    【讨论】:

    • 根据维基百科。 “请注意,CAP 定理中定义的一致性与 ACID 数据库事务中保证的一致性完全不同。” dba.stackexchange.com/questions/31260/…
    • CAP 定理中的一致性与 ACID 中的一致性完全不同。
    • @jackklompus,请详细说明为什么它们不同?
    • @NielsvanderRest 当然。在 CAP 定理中,一致性是指“每次读取都会收到最近的写入或错误”。在 ACID 中,一致性是指“一个事务只能将数据库从一个有效状态带入另一个有效状态,保持数据库不变量”。
    • @NielsvanderRest 来自 Martin Keppman 的设计数据密集型应用程序,您可以 see
    【解决方案3】:

    涉及多个分片的查询很复杂(例如,不同分片中的表之间的 JOIN)

    【讨论】:

    • 如果我在 RDBMS 中从不使用 join 怎么办?RDBMS 会容易分片吗?如果是这样,似乎没有必要实现一个名为 NoSQL 的新数据库。
    • RDBMS 旨在成为“关系”数据库的管理系统。数据之间的关系通过表之间的 JOIN 表现出来。如果您不使用 JOIN,则意味着您的数据库不是关系型数据库,因此您可以移动作为键/值存储的 NoSQL。
    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2015-06-23
    相关资源
    最近更新 更多