ff36e401b7
Now incremental merge has a new strategy. In stead of doing the same amount of merge work at all levels, we now compute the total merge work load, and do as much as possible on the first level, subtract work done, and delegate to the next level, etc. The effect of this is that we do more IO on fewer files, improving sequential-ness of the workload involved in the incremental merge. |
||
---|---|---|
doc | ||
include | ||
src | ||
test | ||
.gitignore | ||
DESIGN.md | ||
enable-hanoi | ||
LICENSE | ||
Makefile | ||
README.md | ||
rebar | ||
rebar.config | ||
TODO | ||
visualize-hanoi.sh |
Hanoi Key/Value Storage Engine
This Erlang-based storage engine implements a structure somewhat like LSM-trees (Log-Structured Merge Trees, see docs/10.1.1.44.2782.pdf). The notes below describe how this storage engine work; I have not done extensive studies as how it differs from other storage mechanisms, but a brief brows through available online resources on LSM-trees indicates that this storage engine is quite different in several respects.
The storage engine can function as an alternative backend for Basho's Riak/KV.
Here's the bullet list:
- Very fast writes and deletes,
- Reasonably fast reads (N records are stored in log2(N) B-trees),
- Operations-friendly "append-only" storage (allows you to backup live system, and crash-recovery is very simple)
- The cost of evicting stale key/values is amortized into insertion, so you don't need to schedule merge to happen at off-peak hours.
- Supports range queries (and thus eventually Riak 2i.)
- Doesn't need a boat load of RAM
- All in 1000 lines of pure Erlang code
Once we're a bit more stable, we'll provide a Riak backend.
Deploying the hanoi for testing with Riak/KV
You can deploy hanoi
into a Riak devrel cluster using the
enable-hanoi
script. Clone the riak
repo, change your working directory
to it, and then execute the enable-hanoi
script. It adds hanoi
as a
dependency, runs make all devrel
, and then modifies the configuration
settings of the resulting dev nodes to use the hanoi storage backend.
git clone git://github.com/basho/riak.git
cd riak/deps
git clone git://github.com/basho/hanoi.git
cd ..
./deps/hanoi/enable-hanoi
# which doesmake all devrel