3 ms·
LMDB works like this. The MDB_env struct keeps pointers to both meta pages: https://github.com/LMDB/lmdb/blob/30288c72573ceac719627183f1058cad1dd08b74/librarie
by hoytech 3y ago
LMDB works like this. The MDB_env struct keeps pointers to both meta pages:
https://github.com/LMDB/lmdb/blob/30288c72573ceac719627183f1058cad1dd08b74/libraries/liblmdb/mdb.c#L1520 https://github.com/LMDB/lmdb/blob/30288c72573ceac719627183f1...
Which meta-page used is determined by the transaction ID (even IDs use first, odd IDs second).
This is the earliest description I can find of the "shadow paging" concept: https://dl.acm.org/doi/10.1145/320521.320540 https://dl.acm.org/doi/10.1145/320521.320540
And I believe its first implementation was in IBM's System R.
- ww520 3y agoLMDB is the poster child of COW btree implementation. That paper is a good find. Thanks.