Skip to content

Commit

Permalink
doc: update README
Browse files Browse the repository at this point in the history
  • Loading branch information
nerdroychan committed Jul 23, 2024
1 parent 94db253 commit 8bf540d
Showing 1 changed file with 42 additions and 10 deletions.
52 changes: 42 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,52 @@
# kvbench

![GitHub Workflow](https://github.com/nerdroychan/kvbench/actions/workflows/test.yml/badge.svg)
![GitHub Commit](https://img.shields.io/github/last-commit/nerdroychan/kvbench)
![GPLv3](https://img.shields.io/github/license/nerdroychan/kvbench)

A benchmarking framework designed for testing key-value stores with easily customizable
workloads.

With `kvbench`, you can define the details of a benchmark using the TOML format, such as the
proportions of mixed operations, the key access pattern, and key space size, just to name a
few. In addition to regular single-process benchmarks, `kvbench` also integrates a key-value
client/server implementation that works with a dedicated server thread/machine.
## Intro

You can also incorporate `kvbench` into your own key-value store implementations and run it
against the built-in stores. All you need is implementing the [`KVMap`] or the [`AsyncKVMap`]
trait, depending on the type of the store. After registering your store, simply reuse the
exported [`cmdline()`] in your `main` function and it will work seamlessly with your own store.
This Rust crate enables the execution of tailored benchmarks on various key-value stores. Users
have the flexibility to adjust benchmark and key-value store parameters and store them in a
TOML-formatted file. The default command line interface is capable of loading these files and
running the benchmarks as specified.

More detailed usage could be found in the module-level rustdocs.
In addition to standard single-process benchmarks, kvbench seamlessly incorporates a key-value
client/server setup that operates with a dedicated server thread/machine.

## Usage

Without any changes, you can run the default command line interface with three modes:

- `kvbench bench -s <STORE_FILE> -b <BENCH_FILE>` runs a (group of) benchmark using the parameters
stored in `<STORE_FILE>` and `<BENCH_FILE>`.
- `kvbench server -h <HOST> -p <PORT> -s <STORE_FILE> -n <THREADS>` boots up a key-value server
with `<THREADS>` workers, listening on `<HOST>:<PORT>`, and uses the key-value stores specified in
`<STORE_FILE>`.
- `kvbench list` lists all registered key-value stores that can be used.

See [examples](examples/) for more examples.

## Configuration

See the documentation of the modules `stores` and `bench` for available options.

## Integration

You can incorporate `kvbench` into your own key-value store implementations and run it
against the built-in stores. All you need is implementing the necessary traits, depending on the
type of the store, and call the default command line interface provided by this crate.

See [examples/your-kv-store](examples/your-kv-store) for a minimal but concrete example.

## Development

The missing pieces that are currently under active development:

- Latency measurement (incl. CDF and tail/avg. latency metrics).
- Atomic Read-modify-write (RMW) support.
- More key-distributions (e.g., latest key, composite-zipfian).
- Ordered key-value stores support (range query workloads).
- Extra built-ins (e.g., YCSB workloads).

0 comments on commit 8bf540d

Please sign in to comment.