Skip to content

infinit/memo

Repository files navigation

memo, an elastic and resilient key-value store

Logo - Memo

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

Requirements

Core library

memo uses Elle, Infinit's core library.

Build system

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.

GNU/Linux

cd _build/linux64
./drake //build -j 4 # Build everything (using 4 jobs).

macOS

cd _build/osx
./drake //build -j 4 # Build everything (using 4 jobs).

This will result on bin/memo.

Maintainers