BloomStore Instance (for each Partition)
- RAM: Active Bloom Buffer (Bloom Filter + Table)
- SSD: Log Structured Bloom Buffers
BloomStore Methods:
-
Get(
k
)- Skim the active bloom buffer for key
k
. - Skim the chain of bloom buffers on SSD
Q: Layout like:
or
(Bloom Filter)*N + (Table)*N
or(Bloom Filter + Table)*N
where((Bloom Filter)*K + (Table)*K)*M
(Bloom Filter)*K
can be held in memory? (It looks like the first one to me) - Return latest possible value for key
k
.
- Skim the active bloom buffer for key
-
Put(
k
,v
)- Update active bloom filter.
- Append to kv pairs.
- If active buffer is full, flush it to SSD.
- BloomFilter and KVPairs
- Dump and Load (should be easy)
- Get BloomStore working
You can build this project with the following commands:
cmake -S . -B build
cmake --build bulid
These commands will generate 3 artifacts:
- ./build/main (executable, simple benchmarking)
- ./build/test (executable, unit tests)
- ./build/libbloomstore.so (shared library, bloomstore implementation)
I tried to replicate the linux workload in the original article .