# Kalavara [![Travis Status](https://travis-ci.org/shanavas786/kalavara.svg?branch=master)](https://travis-ci.org/shanavas786/kalavara) [![Gitlab CI](https://gitlab.com/shanavasm/kalavara/badges/master/pipeline.svg)](https://gitlab.com/shanavasm/kalavara/pipelines) [![crates.io](https://img.shields.io/crates/v/kalavara.svg)](https://crates.io/crates/kalavara) A distributed persistent key value store that speaks http. Inspired by [minkeyvalue](https://github.com/geohot/minikeyvalue). # installation precompiled binaries are available on [release page](https://github.com/shanavas786/kalavara/releases) or you can run `cargo install kalavara` command to install kalavara # master server Master server stores index (key, url of volume server where the value is stored) in rocksdb. Requests are redirected to curresponding volume server after metadata is updated. to start the server, run ```sh master -p 6000 -d /tmp/kalavadb -v http://volume1:6001 http://volume2:6002 ``` # volume server Volume server stores values in file system. For atomicity temporary files are first created in `destdir/tmp` directory and then moved to destination path. For this approach to work, `destdir/tmp` and destination path should be in same file system to start the volume server, run ```sh volume -p 7000 -d /tmp/kalavarastore ``` if master server is not aware of this volume server, register with ```sh volume -p 7000 -d /tmp/kalavarastore -m http://master.server -b http://this.volume.server:7000 ``` ## Usage 1. insert a key-value ```sh curl -XPUT -L -d value http://localhost:6000/store/key ``` 2. retrive value ```sh curl -XGET -L http://localhost:6000/store/key ``` 3. delete a key ```sh curl -XDELETE -L http://localhost:6000/store/key ``` 4. register a new volume server with master ```sh curl -XPOST -d http://newvolume.server http://localhost:6000/admin/add-volume ``` # Performance ```sh ./wrk -t2 -c100 -d10s http://localhost:6000/missingkey Running 10s test @ http://localhost:6000/missingkey 2 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 2.04ms 1.61ms 28.98ms 83.07% Req/Sec 21.33k 4.76k 34.42k 66.00% 426423 requests in 10.07s, 65.88MB read Non-2xx or 3xx responses: 426423 Requests/sec: 42359.95 Transfer/sec: 6.54MB ``` # License

CC0
To the extent possible under law, the author(s) have dedicated all copyright related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty.