CamelliaKV ======= [![Crates.io: camelliakv](https://img.shields.io/crates/v/camelliakv.svg)](https://crates.io/crates/camelliakv) [![Documentation](https://docs.rs/camelliakv/badge.svg)](https://docs.rs/camelliakv) [![Build Status](https://travis-ci.org/camellia/camelliakv.svg?branch=master)](https://travis-ci.org/camellia/camelliakv) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) CamelliaKV is an embedded and persistent key-value storage optimized for random-access workload and huge-capacity HDD. CamelliaKV mainly has following features: - A local storage for storing objects that called as ["lump"][lump]: - Basically, a lump is a simple key-value entry - The distinctive properties are that the key is **fixed length (128 bits)** and suited for storing a relatively large size value (e.g., several MB) - Provides simple functionalities: - Basically, the only operations you need to know are `PUT`, `GET` and `DELETE` - But it supports [deadline based I/O scheduling] as an advanced feature - Optimized for random-access workload on huge-capacity HDD (up to 512 TB): - See [Benchmark Results] for more details about performance - Aiming to provide predictable and stable read/write latency: - There are (nearly) strict upper bounds about the number of disk accesses issued when executing operations - One disk access when `PUT` and `DELETE`, and two when `PUT` - There are no background processings like compaction and stop-the-world GC which may block normal operations for a long time - For eliminating overhead and uncertainty, CamelliaKV has no caching layer: - It uses [Direct I/O] for bypassing OS layer caching (e.g., page cache) - If you need any caching layer, it is your responsibility to implement it - Detailed metrics are exposed using [Prometheus] See [Wiki] for more details about CamelliaKV. [lump]: https://git.cins.com.cn/camellia/camelliakv/wiki/Terminology#lump [Benchmark Results]: https://git.cins.com.cn/camellia/camelliakv/wiki/Benchmark [Prometheus]: https://prometheus.io/ [deadline based I/O scheduling]: https://git.cins.com.cn/camellia/camelliakv/wiki/I-O-Scheduling-based-on-Request-Deadlines [Direct I/O]: https://git.cins.com.cn/camellia/camelliakv/wiki/Terminology#directio [Wiki]: https://git.cins.com.cn/camellia/camelliakv/wiki Documentation ------------- - [Rustdoc](https://docs.rs/camelliakv) - [Wiki (Japanese only)][Wiki]