分片 RDBMS (SQL) 数据库
Sharding a RDBMS (SQL) database
我正在阅读有关分片的内容,并且我在某些上下文中理解了它。但是我读到的大多数 material 都说分片(水平扩展)RDBMS 是一项具有挑战性的任务。但是我不明白为什么 NO-SQL 容易分片而 RDBMS 很难分片?
我的理解是:一些 NO-SQL 提供了内置的分片支持,这使得分片变得容易。但是,如果 NO-SQL 不提供内置的分片支持,那么 SQL/NO-SQL 中的分片开销与必须在应用层中实现是一样的。
我的理解是否正确,还是我遗漏了什么?
我认为从用户的角度来看,SQL 与 NO-SQL 数据库相比,分片并不是特别“难”。毕竟,复杂的东西都是“在幕后”完成的,所以用户界面非常相似。
分片意味着给定 table 的行被单独存储——通常在不同节点上的本地存储中。问题是让它们保持最新状态。
一个关键区别是 SQL 对数据强制执行 ACID 属性,特别是“一致性”。这意味着查询仅在事务完全完成或根本没有完成后才能看到数据库。
NO-SQL 数据库通常实现最终一致性。也就是说,给定的事务可能需要一些时间(通常以秒到一分钟为单位),然后事务才能在所有分片上完成。
考虑查询在每个分片中删除一行的情况。 SQL 数据库将看到所有行已删除或 none。 NO-SQL 数据库可能 return 中间结果。
NO-SQL 的优点是大型数据库通常是仅追加的,事务只影响一个分片——因此最终一致性非常好。
SQL数据库的优点是保证了一致性(好吧,在某些数据库中你可以fiddle通过设置来削弱它)。但是,等待所有分片同意交易已完成的成本更高。
我会注意到在某些情况下 SQL 数据库具有巨大的 应用程序 优势——因为应用程序不需要处理可能不一致的数据。
我正在阅读有关分片的内容,并且我在某些上下文中理解了它。但是我读到的大多数 material 都说分片(水平扩展)RDBMS 是一项具有挑战性的任务。但是我不明白为什么 NO-SQL 容易分片而 RDBMS 很难分片?
我的理解是:一些 NO-SQL 提供了内置的分片支持,这使得分片变得容易。但是,如果 NO-SQL 不提供内置的分片支持,那么 SQL/NO-SQL 中的分片开销与必须在应用层中实现是一样的。
我的理解是否正确,还是我遗漏了什么?
我认为从用户的角度来看,SQL 与 NO-SQL 数据库相比,分片并不是特别“难”。毕竟,复杂的东西都是“在幕后”完成的,所以用户界面非常相似。
分片意味着给定 table 的行被单独存储——通常在不同节点上的本地存储中。问题是让它们保持最新状态。
一个关键区别是 SQL 对数据强制执行 ACID 属性,特别是“一致性”。这意味着查询仅在事务完全完成或根本没有完成后才能看到数据库。
NO-SQL 数据库通常实现最终一致性。也就是说,给定的事务可能需要一些时间(通常以秒到一分钟为单位),然后事务才能在所有分片上完成。
考虑查询在每个分片中删除一行的情况。 SQL 数据库将看到所有行已删除或 none。 NO-SQL 数据库可能 return 中间结果。
NO-SQL 的优点是大型数据库通常是仅追加的,事务只影响一个分片——因此最终一致性非常好。
SQL数据库的优点是保证了一致性(好吧,在某些数据库中你可以fiddle通过设置来削弱它)。但是,等待所有分片同意交易已完成的成本更高。
我会注意到在某些情况下 SQL 数据库具有巨大的 应用程序 优势——因为应用程序不需要处理可能不一致的数据。