⚠️ 这样做换来的是什么
留着旧版本,最大的好处是【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,