The memo elastic and resilient key-value store.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
_build macOS: don't run ubsan by default Jun 20, 2017
benchmark/benchslave-trusty benchmark: Expose all ports required for NFS. Specify NFSv4. Apr 27, 2016
beyond beyond: Ignore any kind of library when inspecting files with PythonC… Sep 11, 2017
bin Update. Jun 15, 2017
bottle @ 27bf0e4 website: Update bottle. Jun 7, 2017
crash-report crash-report: log the generation of reports Jul 31, 2017
debian-packaging/release Update debian post-install script. Jun 8, 2017
docs Cleanup repository root: Sep 7, 2017
elle @ 0321ca5 elle: Update submodule. Sep 11, 2017
licenses Merge master into feature/key-value-store. Jun 7, 2017
prometheus prometheus: Update submodule. Sep 7, 2017
redhat-packaging drakefile: Fix redhat rpm builder. Jun 7, 2017
sendwithus_python @ c78c550 sendwithus: update Jul 11, 2017
share Remove docker related code. Jun 8, 2017
src/memo paxos: Do not start more evict threads once we enter cleanup. Sep 11, 2017
tests Merge feature/paxos-cache-limit into master. Sep 7, 2017
tools Cleanup repository root: Sep 7, 2017
website/tests/key-value-store/grpc Merge master into feature/memoification. Jun 15, 2017
.clang-format elle: update Feb 23, 2017
.clang-tidy elle: update Mar 9, 2017
.dockerignore Restore arm(raspberry) build. Dockerfile for it. Dec 14, 2016
.gitignore prometheus: first stab Apr 16, 2017
.gitlab-ci.yml src.memo: Remove filesystem related leftovers. Sep 7, 2017
.gitmodules modules: use symbolic names Jul 17, 2017
ChangeLog ChangeLog: 0.9.2 Jul 21, 2017
Dockerfile drakefile: Do not require `oset`. Mar 13, 2017
Dockerfile-alpine docker: clean up alpine Jul 24, 2017
Dockerfile-raspberry Restore arm(raspberry) build. Dockerfile for it. Dec 14, 2016
LICENSE Add README and License file. Jun 6, 2017 README: Use memo's requirements.txt. Sep 12, 2017
alpine_socket_header_signedness.patch docker alpine build. Aug 16, 2016
buildenv buildenv: Symlink to elle/buildenv. Dec 22, 2016
drake CI: Add symbolic link to drake. Jan 27, 2016
drakefile src.memo: Remove filesystem related leftovers. Sep 7, 2017
farm Add GitLab continuons integration. Jan 26, 2016
infinit.el emacs: Update project file. Mar 1, 2017
requirements.txt requirements: Downgrade Pillow. Jul 10, 2017

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 --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


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.


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 bin/memo.