主要观点:在构建数据库系统时,为实现高可用性、低延迟和高扩展性,将数据分为多个分片和副本并允许并发查询。通过比较版本控制(Versioning)和协调(Coordination)两种方式,阐述版本控制的优势。
关键信息:
- 构建数据库系统的架构图,展示数据分片和副本等。
- 运行并发事务,如
T1
和T2
的操作,引出协调问题。 - 介绍锁定方式的两个实际问题,如阻塞写者影响并发和吞吐量,以及在分布式架构中难以确定单一的锁位置。
- 引入 David P. Reed 1979 年关于版本的工作,通过创建新的版本让事务在不同时间看到不同的数据,避免事务之间的阻塞,提高系统的可扩展性、吞吐量和性能一致性。
- 讨论如何选择版本和跟踪版本,如在 Aurora DSQL 中使用物理时钟选择版本,避免读取之间的协调,并通过简单方式避免跟踪运行事务的版本相关的协调问题。
重要细节:
- 事务的执行顺序和锁的获取与释放过程,如
T1
在A
处获取id = 1
的共享锁,T2
在更新行时阻塞。 - 不同隔离级别下事务的可见性,如
READ COMMITTED
、REPEATABLE READ
等隔离级别对事务读取数据的影响。 - 关于跟踪版本的两个不变量,即必须保留每个现有行的至少一个版本和运行事务使用的版本,以及在不同系统(如 OLTP 和 OLAP 系统)中处理版本的不同方式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。