第七章:事务 一些作者声称,支持通用的两阶段提交代价太大,会带来性能与可用性的问题。让程序员来处理过度使用事务导致的性能问题,总比缺少事务编程好得多。 —— James Corbett 等人,Spanner:Google 的全球分布式数据库(2012) [TOC] 在数据系统的残酷现实中,很多事情都可能出错: 数据库软件、硬件可能在任意时刻发生故障(包括写操作进行到一半时)。 应用程序可能在任意时刻崩溃(包括一系列操作的中间)。 网络中断可能会意外切断数据库与应用的连接,或数据库之间的连接。 多个客户端可能会同时写入数据库,覆盖彼此的更改。 客户端可能读取到无意义的数据,因为数据只更新了一部分。 客户端之间的竞争条件可能导致令人惊讶的错误。