DBDB.io The Encyclopedia of Database Systems · Est. 2017
Database of Databases

Database Entry

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.

Source Code
https://github.com/reverbrain/elliptics[02]
Developer
Country of Origin
RU
Start Year
2009
Project Types
Commercial, Open Source
Written in
C++, Python
Supported Languages
C, C++, Python
Operating System
Linux
License
LGPL v3

Database Entry

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.

Concurrency Control[05]


Elliptics supports basic lock operation on key(ID). It can be forced not to use lock by specifying NOLOCK flag in the EXEC command. The lock operation is controlled by the client command instead of the backend system.

Due to no 2PL, MVCC or OCC existing and other deadlock prevention mechanism, there may exist deadlock inside the system.

Data Model


It mainly supports key-value data model.

Indexes[06][07][08]


The index structure that exposed to the client is named secondary indexes. Its implementation using STL std::map<> template in C++, which is usually implemented as a Red-Black tree structure.

Currently, secondary indexes support two ways to find the items:

  1. AND operation, which finds all objects meeting all of the provided indexes
  2. OR operation, which finds all objects meeting at least one of the provided indexes

Isolation Levels[09][10]


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.

Logging[11][12][13]


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.

Query Compilation


Query Execution


Elliptics uses Cocaine to execute the code. It allows the Elliptics creating a pool of cgroups-bound processes to execute externally loaded code. It can access external elements.

Query Interface[14]


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.

Storage Architecture[15][16][09]


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.

System Architecture[17]


System Scheme

The whole scheme is shown above, which is cited from Elliptics documentation. The whole system is more likely to be a web application support services.

Views


Citations

17 sources
  1. http://reverbrain.com/elliptics reverbrain.com Dead — Check Archive
  2. GitHub - reverbrain/elliptics: Distributed storage for medium and large objects with streaming support · GitHub github.com
  3. http://doc.reverbrain.com/elliptics:elliptics reverbrain.com Dead — Check Archive
  4. Elliptics - Wikipedia wikipedia.org
  5. http://doc.reverbrain.com/elliptics:atomic-operations reverbrain.com Dead — Check Archive
  6. https://github.com/reverbrain/elliptics/blob/master/bindings/cpp/session_indexes.cpp github.com Dead — Check Archive
  7. http://doc.reverbrain.com/elliptics:secondary-indexes reverbrain.com Dead — Check Archive
  8. std::map - cppreference.com cppreference.com
  9. http://doc.reverbrain.com/elliptics:what reverbrain.com Dead — Check Archive
  10. Profile · cocaine/cocaine-core Wiki · GitHub github.com
  11. http://doc.reverbrain.com/elliptics:replication reverbrain.com Dead — Check Archive
  12. http://doc.reverbrain.com/elliptics:api-logging reverbrain.com Dead — Check Archive
  13. GitHub - 3Hren/blackhole: Yet another logging library. · GitHub github.com
  14. http://doc.reverbrain.com/elliptics:api-python reverbrain.com Dead — Check Archive
  15. http://doc.reverbrain.com/elliptics:serverside reverbrain.com Dead — Check Archive
  16. Architecture · cocaine/cocaine-core Wiki · GitHub github.com
  17. http://doc.reverbrain.com/elliptics:architecture-scheme reverbrain.com Dead — Check Archive
Revision #9 Last Updated: