This is my second attempt to build a distributed key-value store. The latest version of the first attempt lives in abandoned and will not be continued. Lots of lessons were learned and I'm going to really try not to produce a mess this time, and come up with something adequate.
- Implement simple memtable rotation and add tests, before moving to event loop'ed approach
- monotonic clock for timestamp
- code style document (function, class, file, dir naming), code organization
- 'max_entries_' needed in memtable?
- Common 'error' object with error_codes shared for all files
- Shared linked-list allactor per-engine. Memtables allocate a whole node from it.
- Update build section with mandatory and optional steps. Optimize the build duration. Build tests only when DBUILD_TESTS is set, same for benchmarks.
- Keep CMake clean. -Wsign-conversion breaks simd.h build. Introduce per-profile flags, so that these '-O3 -g -fno-omit-frame-pointer' go into RelWithDebugInfo
- One arena per engine OR <arena, memtable> pairs?
- Separate 'engine' dir for engine/flush related stuff
- Put/get/delete/scan inside engine interface
- Memory leak tracing allocator
- Shared arena between memtable and skiplist
- Support tombstones
- Engine/DB: A fat struct keeping arenas, memtables, sequence number, wal, etc... together
- Memtable rotation: active and imm memtables