Elliptics

Elliptics network is a fault-tolerant distributed key/value database system. With default key generation policy it implements has table object storage. Comparing to traditional database systems, it is more likely to be a distributed network framework to make servers working together.

History

Elliptics was initially created in 2007 as part of POHMELFS. Later in 2009 seperated from that project and became a consistent distributed storage system later. As of 2014, Elliptics is used in Yandex Map, Disk, Music, Photos and some infrastructure.

Query Interface

Custom API

The API is designed to support C, C++ and Python. The document for Elliptics is broken and now only Python API document can be fetched.

Logging

Physical Logging

Elliptics uses replication to ensure data availability form the beginning of its design. To use replication features, a group of servers are bound together by admin and make the replications every time.

For the implementation of the logging, it's using the blackhole logging library for writing logs. The blackhole library is an attribute-based logger with maximum performance optimization. Elliptics uses blackhole library and can output to File/Syslog/Socket.

Isolation Levels

Repeatable Read

There are two types of Isolation using in Elliptics: Process and CGroup.

And Elliptics uses eventual consistency model to maintain data replicas, which means the data in a group may not maintain the same at any time, but they will eventually be synced with others sometimes in the future.

Storage Architecture

Hybrid

Storage architecture is named as Backends in Elliptics. Elliptics has three low-level backends: filesystem (where written objects are stored as files), Eblob (fast append-only storage) and Smack (small compressible objects stored in sorted tables).

Moreiver, Elliptics implemented both the generic storage protocol and its own specific protocol. Therefore, data stored in other services can be routed to Elliptics. For example, Elliptics can connect to MySQL servers and trigger some special commands to read/write data into Elliptics.

Data Model

Key/Value

It mainly supports key-value data model.

Query Compilation

Code Generation