在这篇文章中,我们将讨论以下内容:
- 数据库隔离级别
- 日志解析命令
- CDC(变更数据捕获)如何工作
数据库隔离级别
数据库隔离允许事务执行时好像没有其他并发事务运行。
下图说明了四种隔离级别。
四种隔离级别
可串行化(Serializable):这是最高的隔离级别。并发事务保证按顺序执行。
可重复读(Repeatable Read):事务期间读取的数据保持与事务开始时相同。
读已提交(Read Committed):数据修改只能在事务提交后被读取。
读未提交(Read Uncommitted):数据修改可以在事务提交前被其他事务读取。
隔离通过 MVCC(多版本一致性控制)和锁来保证。
MVCC 工作原理
下图以可重复读为例演示 MVCC 如何工作:
每行有两个隐藏列:transaction_id 和 roll_pointer。
当事务 A 启动时,创建一个新 Read View,transaction_id=201。不久后,事务 B 启动,创建一个新 Read View,transaction_id=202。
现在事务 A 将余额修改为 200,创建一行新日志,roll_pointer 指向旧行。在事务 A 提交之前,事务 B 读取余额数据。事务 B 发现 transaction_id 201 未提交,它读取下一个已提交记录(transaction_id=200)。
即使事务 A 提交,事务 B 仍然基于事务 B 启动时创建的 Read View 读取数据。所以事务 B 总是读取余额=100 的数据。
日志解析命令
作者分享了一个日志解析命令速查表,这些命令对以下场景有用:
- 在文本文件中搜索模式
- 分析网络数据包
- 从分隔日志中解析字段
- 替换文件中的字符串
- 排序文件
- 通过逐行比较显示文件差异
CDC(变更数据捕获)如何工作
存储在数据库中的数据可能对许多其他数据系统(如分析、AI 等)感兴趣。如果我们有数千个数据系统,我们必须编写数千个转换器吗?
答案是不用。CDC 是一个可以解决这个问题的过程。
CDC 工作流程
- 数据正常写入数据库
- 数据库使用事务日志记录修改
- CDC 软件使用源连接器连接到数据库并读取事务日志
- 源连接器将日志发布到消息队列
- CDC 软件使用其 sink 连接器消费日志
- sink 连接器将日志内容写入目标
所有这些操作除了步骤 1 对用户都是透明的。流行的 CDC 解决方案(如 Debezium)有适用于大多数数据库的连接器,如 MySQL、PostgreSQL、DB2、Oracle 等。我们只需要在两个数据库之间设置 CDC 链接,数据就会自动流到目标。
本文为学习目的的个人翻译,译文仅供参考。
原文链接:What are database isolation levels (Episode 8)。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。