繁体   English   中英

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

[英]Sharding a RDBMS (SQL) database

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

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

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

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

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

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

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

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

NO-SQL 的优势在于大型数据库通常是只追加的,事务只影响一个分片——所以最终的一致性已经足够好了。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM