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.
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.
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.
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.
The whole scheme can be found form Elliptics documentation(http://doc.reverbrain.com/elliptics:architecture-scheme).
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.
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:
Custom API Command-line / Shell
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.
http://reverbrain.com/elliptics/
https://github.com/reverbrain/elliptics
http://doc.reverbrain.com/elliptics:elliptics
Reverbrain
2009