守护独立性与约束保持快照隔离
1. 快照隔离概述
1.1 事务模型
在快照隔离(SI)中,事务对数据对象进行读写操作。每个事务都有开始时间和结束时间,结束时其写入操作会提交到数据库。若一个事务的开始时间处于另一个事务的开始和结束时间之间,则这两个事务是并发的。
在 SI 里,事务 T 总是在事务开始时获取的数据库私有副本(即快照)上操作。运行期间,它看不到其他事务的更新,其他事务也看不到它的更新。当 T 结束时,其更新必须提交到全局数据库,提交遵循“先提交者获胜”(FCW)规则。若与 T 并发且已提交的其他事务 T’ 写入了 T 也写入的数据对象 Γ,则 T 不允许提交。
1.2 实际中的变体
在实际应用中,情况比上述模型复杂,主要有两个原因:
- 冲突解决规则 :实际中常用“先更新者获胜”(FUW)规则。若并发事务 T’ 写入了 T 后续要写入的数据对象 Γ,则 T 会被阻塞,直到 T’ 提交(此时 T 中止)或 T’ 中止(此时 T 可继续)。尽管 FCW 和 FUW 实现不同,但冲突定义相同,即并发事务不能同时写入同一数据对象,且无写冲突时结果相同。因此,研究冲突和约束违反时,可使用 FUW 代替 FCW。
- 约束执行 :在大多数 SQL 实现中,主键和唯一性约束会立即执行,除非声明检查可延迟。外键约束通常也会立即执行。在更基础的研究中,这些“实现细节”会被忽略。完整性约束不仅包括常见的数据库依赖(如键和外键依赖),还包括触发器和应用程序中指定的规则。
超级会员免费看
订阅专栏 解锁全文
18

被折叠的 条评论
为什么被折叠?



