Implement put(key, value) -> version using a global monotonically increasing version, get(key, version=None) returning the value as of that version (latest if None), and delete(key) -> version.
02Key insight
Append-only per-key version chains with a global commit counter: a read at version v binary-searches the newest entry <= v. Deletes are tombstone versions, so readers at older versions still see the old value (snapshot isolation for reads).
Concurrent write transactions? Snapshot isolation: read at start_ts, buffer writes, at commit check first-committer-wins (any key written by another txn with commit_ts > start_ts aborts), then stamp commit_ts.