Snapshot Isolation 综述
摘要
Snapshot Isolation对于接触过数据库领域的同学来说,几乎是入门级的知识了。原因有几点:一来,谈到事务的隔离级别,必然会有所谓Read Uncommitted、Read Committed、Repeatable Read、Serializable,以及Snapshot Isolation;二来,主流的数据库,单机如MySQL、MongoDB,分布式如TiDB、OceanBase,几乎都实现了Snapshot Isolation这一隔离级别;三来,且在非形式化的定义中,Snapshot Isolation也很易于理解,易于实现。
但通过最近对Snapshot Isolatino的系统性研究,发现事情并不是这么简单,例如这几个问题:
- Snapshot Isolation中所说的Snapshot指的是什么,需要满足Consistency约束吗?
- SI对时钟系统的必要约束是什么?必须是一个单调递增的中心化时钟吗?
- SI定义写写冲突,是为了解决什么问题?它是一个必要的约束吗?
- 事务隔离和复制一致性是什么关系?能否基于一个非线性一致的复制协议,实现一个SI?
本篇文章将围绕这几个问题,将时间从2019年拉回到1995年那个雷雨交加的夜晚,围观Hal Berenson等人在小木屋里提出的对ANSI SQL isolation level的critique;再跨越历史的长河,纵观诸多学者对Snapshot Isolation的研究,以望寻得对这些问题的解答。
欢迎在评论区写下你对这篇文章的看法。