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.[01]

Source Code
https://github.com/reverbrain/elliptics[02]
Developer
Country of Origin
RU
Start Year
2009 [21]
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.[01]

History[04]


Elliptics was initially created in 2007 as part of POHMELFS v1. POHMELFS is the abbreviation of the Parallel Optimized Host Message Exchange Layered File System, which is a cache-compatible distributed file system developed by Russian Linux-hacker Evgeny Polyakov. It could be viewed as a protocol to share files between file systems on computers via LAN. In 2009 Elliptics seperated from POHMELFS and became a consistent distributed storage system later. As of 2014, the Elliptics was used in Yandex Map, Disk, Music, Photos and some infrastructure.

Concurrency Control[05]


Elliptics supports basic lock operation on the key-value pair. It uses such key ID to grant the lock, which makes the operation in Elliptics is atomic in the single group. However, there are no locks between the groups for synchronous.

There is no deadlock detection in system level. It is the user's responsibility to prevent deadlock when developing client program.

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.

Data Model[06]


Elliptics own storage supports key-value data model, but it can support SQL database for example by writing an own backend, so that supports relational data storage. But the workflow in Elliptics is key-value data model.

Indexes[07][08][09]


The index structure that exposed to the client is named secondary indexes. Its implementation using STL std::map<> template in C++.

Isolation Levels[06][10]


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

Joins


As a NoSQL, key-value database, it does not implement join operation in system level.

Logging[11][12][13][14]


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.

However, Elliptics doesn't have a recovery mechanism at the current stage, i.e. there is no recovery logging.

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[15][16][17]


The API is designed to support C, C++ and Python.

For current version Elliptics document, only the link to Python API works correctly. The links to C API and C++ API documents are broken. We can retrieve the archived version from archive.org. The version archive.org provided is on date May 11, 2016. Here is the link to C API and C++ API.

Python APIs are designed to config Elliptics client, including Logger, Config, Node, Session, etc. C++ APIs are designed to configure the client side Elliptics as well, but with less APIs than Python API library. Node is the main controlling structure of Elliptics.

C APIs could be used to config both Client and Server, with the functionalities of creation, configuration, server-side processing, cache and backend. For the client side, everything is built on the asynchronous API model, while we can do both synchronous and asynchronous calls in server side.

Storage Architecture[18][19][06]


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

Moreover, 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[20]


The whole system is more likely to be a web application support services. It contains several layers, including client-side web application, proxy-server, frontends, system core, and backends.

Backends are the data storage level, which contains system key-values data or links to the external database. Frontends are tools or drivers level. Elliptics core manages distributed nodes to execute the command from clients.

Views


Citations

21 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. http://doc.reverbrain.com/elliptics:what reverbrain.com Dead — Check Archive
  7. https://github.com/reverbrain/elliptics/blob/master/bindings/cpp/session_indexes.cpp github.com Dead — Check Archive
  8. http://doc.reverbrain.com/elliptics:secondary-indexes reverbrain.com Dead — Check Archive
  9. std::map - cppreference.com cppreference.com
  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/blueprints:elliptics:recovery reverbrain.com Dead — Check Archive
  15. http://doc.reverbrain.com:80/elliptics:api-cm reverbrain.com Dead — Check Archive
  16. http://doc.reverbrain.com:80/elliptics:api-cc reverbrain.com Dead — Check Archive
  17. http://doc.reverbrain.com/elliptics:api-python reverbrain.com Dead — Check Archive
  18. http://doc.reverbrain.com/elliptics:serverside reverbrain.com Dead — Check Archive
  19. Architecture · cocaine/cocaine-core Wiki · GitHub github.com
  20. http://doc.reverbrain.com/elliptics:architecture-scheme reverbrain.com Dead — Check Archive
  21. https:/github.com/reverbrain/elliptics/commit/db2251715a27cf2a43d0fed3d01738a6fb58359b https.
Revision #19