3/04/2025

MVCC的实现

 InnoDB 的 MVCC(多版本并发控制)主要用于实现非锁定读取,即在读取数据时无需加共享锁,从而提高并发性能。其核心原理包括两个部分:

  1. Read View:
    当事务启动时,InnoDB 为该事务构建一个 Read View,它记录了当前所有活跃事务的状态以及最小的事务 ID。之后,事务在读取数据时,只能看到在自己启动前已提交的数据版本,这样就能确保读到的一致性“快照”。

  2. Undo Log:
    每当事务对数据行进行修改时,InnoDB 会在 undo log 中记录该行的旧版本数据。当其他事务需要读取这行数据时,如果发现数据已被更新且当前版本对它不可见,系统会通过 undo log 回溯到适合当前事务 Read View 的旧版本,从而实现一致性读。

通过这两者的配合,InnoDB 即使在数据被频繁修改的情况下,也能保证每个事务读取到的数据是稳定一致的“历史快照”,从而避免幻读等并发问题。

Go: slice作为函数参数的解包

  在 Go 语言里, ... 跟在 slice 后面 ,是 “解包(unpack)”操作 ,它的作用是 把一个切片的元素逐个展开,作为可变参数传入函数 ,而不是把整个切片当作一个单独的参数。 📌 典型场景: append 追加切片 s1 := []int{1, 2,...