Elliptics client architecture design

Hi all, I’m Ruslan Nigmatullin – Elliptics client-side developer.

Elliptics 2.23 was shipped with new cool asynchronous client API to satisfy all needs of modern software engineering. It made possible to write efficient applications using Elliptics as storage engine. Just look at example, suggest you want to request a lot of data from the server for local processing. It’s common to use bulk read for it. But sometimes it’s not possible to store all the data in memory, so you would just write:

for (auto entry : sess.bulk_read(...)) {
    dnet_id id = entry.command()->id;
    data_pointer data = entry.file();
    // do whatever you want
}

It’s interesting that loop’s body will be processed as soon as entry is received, but not as command is finally executed, so memory consumption are limited by the small local queue of the not-yet-processed entries. Another interesting examples can be found at our wiki page.

Another interesting feature implemented by me is secondary indexes support. Evgeniy already presented them in previous posts. Secondary indexes are ability to add something like tags to objects stored in Elliptics storage. After objects are indexed it’s possible to make searching to find all objects with all or any indexes presented. So it’s possible to find all objects which are “red” and “cool”. Examples and more information can be found at our wiki page.

Comments are closed.