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