HyperPebblesDB
This is a fork of PebblesDB, a write-optimized key-value store built with FLSM (Fragmented Log-Structured Merge Tree) data structure. FLSM is a modification of the standard log-structured merge tree data structure which aims at achieving higher write throughput and lower write amplification without compromising on read throughput.
HyperPebblesDB is part of LevelDB family, and thus it is API-compatible with LevelDB and HyperLevelDB. Please read full paper on PebblesDB and corresponding slides for further details.
Features not in PebblesDB
- Continuous code integration using Travis-CI
- New
emptyGuardsoption indb_benchthat gives detailed SSTables distribution under each guard across all levels db_benchenables "fillseq" and "fillrandom" even when using existing databasedb_benchsupport "ycsb" option by reading a trace file generated from the YCSB benchmark (check "scripts/trace_gen.sh" for details)- Support guard-based parallel compaction, which can be turn on/off with
options.parallel_guard_compaction - Support Succinct Range Filter (SuRF) as an alternative to bloom filter. Check SuRF paper for details
- Better internal documentation
- Verified portability on both Mac & Linux using g++-5
Dependencies
HyperPebblesDB is fully-tested on Linux. It requires libsnappy and libtool.
- To install on Linux, please use
sudo apt-get install libsnappy-dev libtool. - For MacOSX, use
brew install snappyand instead ofldconfig, useupdate_dyld_shared_cache.
HyperPebblesDB was built, compiled, and tested with g++-4.7, g++-4.9, and g++-5. It may not work with other versions of g++ and other C++ compilers.
Installation
$ cd HyperPebblesDB/
$ autoreconf -i
$ ./configure
$ make
$ make install
$ldconfig
Caveat
- HyperPebblesDB is not fully-compatible with RocksDB. It lacks of features list under Features Not in LevelDB.