【问题标题】:Sharding a RDBMS (SQL) database对 RDBMS (SQL) 数据库进行分片
【发布时间】:2021-03-10 23:11:38
【问题描述】:

我正在阅读有关分片的信息,并且在某些上下文中理解了它。但我读过的大部分资料都说,分片(水平扩展)RDBMS 是一项具有挑战性的任务。但我不明白为什么 NO-SQL 容易分片而 RDBMS 很难分片?

我的理解是:一些 NO-SQL 提供了内置的分片支持,这使得分片变得容易。但如果 NO-SQL 不提供内置的分片支持,那么 SQL/NO-SQL 中的分片开销与必须在应用层实现是一样的。

我的理解是正确的还是我遗漏了什么?

【问题讨论】:

    标签: sql database nosql sharding system-design


    【解决方案1】:

    从用户的角度来看,我不认为分片在 SQL 和 NO-SQL 数据库中特别“难”。毕竟,复杂的东西都是“在后台”完成的,所以用户界面非常相似。

    分片意味着给定表的行被分开存储——通常在不同节点的本地存储中。问题是让它们保持最新状态。

    一个关键的区别是 SQL 对数据强制执行 ACID 属性,特别是“一致性”。这意味着查询仅在事务完全完成或根本不完成后才能看到数据库。

    NO-SQL 数据库通常实现最终一致性。也就是说,一个给定的事务可能需要一些时间(通常以秒到一分钟为单位)才能在所有分片上完成事务。

    考虑查询正在删除每个分片中的一行的情况。 SQL 数据库将看到所有已删除的行或没有。 NO-SQL 数据库可能会返回中间结果。

    NO-SQL 的优势在于大型数据库通常是只追加的,事务只影响一个分片——因此最终的一致性非常好。

    SQL 数据库的优点是可以保证一致性(嗯,在某些数据库中,您可以调整设置来削弱它)。但是,等待所有分片同意交易已完成的成本更高。

    我会注意到,在某些情况下,SQL 数据库具有巨大的应用程序优势——因为应用程序不需要处理可能不一致的数据。

    【讨论】:

    • 但是在delete的例子中,no-sql会从每个shard中删除行然后返回。每个shard的删除可能需要一些时间来反映同一个shard的不同区域是否正确。跨度>
    • @rahulsharma 。 . .但是其他查询可能会看到部分删除的数据——也就是说,在某些分片中行被删除但在其他分片中没有被删除的数据。这就是“最终一致性”的含义。这不是关于delete 操作本身,而是关于数据 的样子。
    猜你喜欢
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 2017-02-15
    • 2019-12-19
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多