memo, an elastic and resilient key-value store
The memo project combines a value store (where you manipulate blocks and addresses) and a key-value store (where you manipulate arbitrary data and arbitrary keys).
memo is supported by Docker and is used as backend by the Infinit Storage Platform project.
What is the difference between the value store and the key-value store
The key-value store uses the value store to provide a higher-level interface like common key-value stores (etcd, ZooKeeper, etc.), where arbitrary data can be stored under an arbitrary name.
The value store is the lowest brick of the architecture, providing the fundamental object named
blocks, declined in a few flavors. Those blocks are cryptographically protected, their addresses are chosen randomly to guarantee a homogeneous distribution, optimize data placement, fault tolerance and more. All operations are atomic. The main drawback being the responsability of keeping blocks addresses is transfered to the caller.
For more details you can consult When shoould I use the value store against the key-value store.
How to get memo
To download the source code and build memo by yourself, get it from GitHub.
git clone https://github.com/infinit/memo --recursive # Clone memo and its submodules.
Note: If you cloned it using the GitHub "clone" button, do not forget to run
git submodule update --init --recursive!
How to build memo
memo uses Elle, Infinit's core library.
memo uses Drake and has it as a submodule.
How to compile
For a detailed procedure, visit our wiki: How to build.
First you need to install Python dependencies.
sudo pip3 install -r requirements.txt
Note: If you don't want dependencies to be installed system-wide, you should consider using virtualenv.
Change directory to
_build/<architecture> where you can find a generic Drake configuration script.
cd _build/linux64 ./drake //build -j 4 # Build everything (using 4 jobs).
cd _build/osx ./drake //build -j 4 # Build everything (using 4 jobs).
This will result on