Elliptics network is a very modular key/value (distributed hash table) storage. Among others it allows to build pluggable low-level IO backends - those entities which store data.
Currently elliptics network supports following IO backends:
- file IO backend, where each transaction is stored as a separate file
- TokyoCabinet database backend - each transaction is stored as a record in appropriate table. I dropped BerkelyDB support because of its low performance, even though TC does not provide ACID contrary to BDB
And now I added append-only blob storage - libeblob.
Following features are already supported:
- fast append-only updates which do not require disk seeks
- compact index to populate lookup information from disk
- multi-threaded index reading during starup
- O(1) data location lookup time
- ability to lock in-memory lookup index (hash table) to eliminate memory swap
- readahead games with data and index blobs for maximum performance
- multiple blob files support (tested with blob-file-as-block-device too)
- optional sha256 on-disk checksumming
- 2-stage write: prepare (which reserves the space) and commit (which calculates checksum and update in-memory and on-disk indexes). One can (re)write data using
pwrite()in between without locks - usuall 1-stage write interface
- flexible configuration of hash table size, flags, alignment
TODO list includes:
- defragmentation tool: entries to be deleted are only marked as removed, we need to have a tool (or embed it into library) to actually remove those blocks from blob files
- proper off-line blob consistency checker: we put a checksum into data blob, someone may want to check if read data matches
- run-time sync support - we should have a dedicate thread to call syncs on timed base
Elliptics network uses it as one of its low-level IO backends. Numbers I posted (1, 2, 3) also highlight its advantages.
But during elliptics network integration with libeblob I found how unoptimal transaction history log was implemented in the storage (and maybe found an answer why monsters like Cassandra do not support it at all). Maybe its time to rethink and reinvent it though...
Anyway, there is a set of features I will create to complete this implementation as well as new elliptics network release (with C++ and Python bindings and new IO backend).
Stay tuned!
Recent comments
1 day 4 hours ago
1 day 5 hours ago
1 week 2 days ago
1 week 2 days ago
1 week 4 days ago
1 week 4 days ago
1 week 4 days ago
2 weeks 1 day ago
2 weeks 1 day ago
2 weeks 3 days ago