ReductStore is a time-series database designed specifically for blob data, written in C++ and Rust.
ReductStore is a personal project started by Alexey Timin in 2021 with no publicly stated derivations or inspirations from other existing database systems. It has since received monthly releases and bug fixes. Alexey Timin remains the sole major contributor to this project. The project is currently undergoing a major rewrite with Rust and is actively seeking new collaborators to join.
Provides HTTP methods for Entry level read, write, and range query. Provides HTTP methods for Bucket level metadata read, metadata update, create, and remove. Provides HTTP methods for Server level statistics read, bucket statistics read, and engine health check. Provides HTTP methods for token-based access control.
ReductStore directly writes blobs to disk using MessageLite::SerializeToOstream(std::ostream * output) function from Protocol Buffers (Google), which by default does not do any compression.
Each entry is a blob associated with a key and a timestamp. Entries smaller than the file system's minimum file size are grouped and stored together in a block backed by files. A bucket contains multiple blocks. Buckets enforce storage limits (the total blob size and the total number of entries) and write behavior (reject write or delete earliest) when the storage limit is reached .
Deleting a single entry is not supported. The minimum deletion level is a bucket.
Block begin time is defined as the creation time of the block, with microsecond precision. Multiple logical blocks with the same begin time are grouped and stored as a single file on disk. Block start timestamp is embedded in the filename for range queries to perform binary search to locate the first relevant block. No other indexes are supported.
https://github.com/reductstore/reductstore
Alexey Timin
2021