Warm tip: This article is reproduced from serverfault.com, please click

其他-分片RDBMS(SQL)数据库

(其他 - Sharding a RDBMS (SQL) database)

发布于 2020-11-28 12:45:27

我正在阅读有关分片的信息,并且在某些情况下也了解它。但是我阅读的大多数材料都表明,分片(水平缩放)RDBMS是一项艰巨的任务。但是我不明白为什么NO-SQL容易分片而RDBMS很难分片?

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

我的理解正确吗?还是我错过了任何事情?

Questioner
rahul sharma
Viewed
0
Gordon Linoff 2020-11-28 20:55:56

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

分片意味着给定表的行分别存储-通常存储在不同节点上的本地存储中。问题在于使它们保持最新状态。

一个主要的区别是SQL在数据上强制使用ACID属性,特别是“一致性”。这意味着查询仅在事务完全完成或根本不完成之后才看到数据库。

NO-SQL数据库通常实现最终的一致性也就是说,在所有分片上完成交易之前,给定的交易可能要花费一些时间(通常以秒为单位,直至一分钟)。

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

NO-SQL的优点在于,大型数据库通常仅是追加操作,而事务仅影响一个分片-因此最终的一致性就足够了。

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

我将指出,在某些情况下,SQL数据库具有巨大的应用程序优势-因为应用程序不需要处理潜在的不一致数据。