⚠️ 这样做换来的是什么

留着旧版本,最大的好处是【0】。

开始练习 →

快照是什么时候定下来的

一个事务按"快照"读数据,这个快照是【0】定下来的。

开始练习 →

⚠️ 拿着快照读,看不见后来的改动

下面这段先写一个旧值,开一个快照,再写一个新值。打出按快照读到什么、按最新读到什么、这个键留了几版(三段,用 / 隔开)。 这条路线两样工具都在题面里备好了 ① 真的 sqlite3(页这一层是能内省出来的) mk(rows, idx,

开始练习 →

读的人一次都没被挡住

下面这段在写入的同时读了 5 次。打出读被挡住了几次和这个键留了几版(用 / 隔开)。 这条路线两样工具都在题面里备好了 ① 真的 sqlite3(页这一层是能内省出来的) mk(rows, idx, w) → 现造一个库:rows 行、

开始练习 →

自己写:让读的人看见旧值

把 TODO 补完:写一个旧值、开快照、再写新值,打出按快照读到的那个值。 这条路线两样工具都在题面里备好了 ① 真的 sqlite3(页这一层是能内省出来的) mk(rows, idx, w) → 现造一个库:rows 行、每行 w 个

开始练习 →

自己写:数一数留了几版

把 TODO 补完:给同一个键连写 4 次,打出它留了几版和最新那一版是什么(用 / 隔开)。 这条路线两样工具都在题面里备好了 ① 真的 sqlite3(页这一层是能内省出来的) mk(rows, idx, w) → 现造一个库:row

开始练习 →

自己写:把 MVCC 的两笔账一起算

把 TODO 补完,打出按快照读到什么、按最新读到什么、留了几版、读被挡了几次(四段,用 / 隔开;写 3 次,快照开在第 1 次之后)。 这条路线两样工具都在题面里备好了 ① 真的 sqlite3(页这一层是能内省出来的) mk(row

开始练习 →

"读两次结果一样"是怎么做到的

一个事务里读两次同一行,结果一样。这靠的是【0】。

开始练习 →

⚠️ 写和写之间还要不要锁

有了多版本之后,两个事务同时改同一行时【0】。

开始练习 →

⚠️ 同一个事务里读两次,结果一样

下面这段开一个快照,中间别人改了两次,然后按快照读了两次。打出第一次读到什么、第二次读到什么、期间被挡了几次(三段,用 / 隔开)。 这条路线两样工具都在题面里备好了 ① 真的 sqlite3(页这一层是能内省出来的) mk(rows,

开始练习 →