在这篇文章中,我们将讨论以下内容:

  • 数据库隔离级别
  • 日志解析命令
  • CDC(变更数据捕获)如何工作

数据库隔离级别

数据库隔离允许事务执行时好像没有其他并发事务运行。

下图说明了四种隔离级别。

四种隔离级别

可串行化(Serializable):这是最高的隔离级别。并发事务保证按顺序执行。

可重复读(Repeatable Read):事务期间读取的数据保持与事务开始时相同。

读已提交(Read Committed):数据修改只能在事务提交后被读取。

读未提交(Read Uncommitted):数据修改可以在事务提交前被其他事务读取。

隔离通过 MVCC(多版本一致性控制)和锁来保证。

MVCC 工作原理

下图以可重复读为例演示 MVCC 如何工作:

每行有两个隐藏列:transaction_idroll_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 工作流程

  1. 数据正常写入数据库
  2. 数据库使用事务日志记录修改
  3. CDC 软件使用源连接器连接到数据库并读取事务日志
  4. 源连接器将日志发布到消息队列
  5. CDC 软件使用其 sink 连接器消费日志
  6. sink 连接器将日志内容写入目标

所有这些操作除了步骤 1 对用户都是透明的。流行的 CDC 解决方案(如 Debezium)有适用于大多数数据库的连接器,如 MySQL、PostgreSQL、DB2、Oracle 等。我们只需要在两个数据库之间设置 CDC 链接,数据就会自动流到目标。

本文为学习目的的个人翻译,译文仅供参考。

原文链接:What are database isolation levels (Episode 8)

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。