对 RDBMS (SQL) 数据库进行分片

问题描述 投票:0回答:2

我正在阅读有关分片的内容,并且我在一定的背景下理解了它。但我读到的大部分材料都说分片(水平扩展)RDBMS 是一项具有挑战性的任务。但我不明白为什么NO-SQL很容易分片而RDBMS很难分片?

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

我的理解正确还是我错过了什么?

sql database nosql sharding system-design
2个回答
3
投票

从用户的角度来看,我不认为 SQL 数据库与 NO-SQL 数据库中的分片特别“困难”。毕竟,复杂的事情都是在“幕后”完成的,因此用户界面非常相似。

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

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

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

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

NO-SQL 的优点是大型数据库通常是仅追加的,并且事务仅影响一个分片——因此最终一致性已经足够好了。

SQL数据库的优点是保证一致性(好吧,在某些数据库中你可以通过设置来削弱它)。然而,等待所有分片同意交易完成的成本更高。

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


0
投票

SQL DB 在分片(数据库水平扩展)的情况下不支持 ACID/事务。 同时,NOSQL DB 提供了对分片的内置支持。

但是,有 SQL DB、MY SQL 集群和 citus(用于 postgres)在分片的情况下提供对 ACID/事务的支持。

© www.soinside.com 2019 - 2024. All rights reserved.