# Key Value Store
kvs is an artisanal, hand-crafted online key/value store sourced by a California native.
It is written in Python and yet harkens back to a simpler era before Redis and Riak.
## Dependencies and Guarantees
kvs uses a local file for its backing store, and stores the data in the human-friendly
[YAML](https://yaml.org/) format. Its ACID properties are as follows:
* **Atomicity**: Either all tuples in a transaction are successfully saved or none are.
* **Consistency**: Only valid states are saved, and saves are atomic.
* **Isolation**: All transactions are serialized.
* **Durability**: System failure or restart won't break the store. Store writes are atomic.
# Getting the project
You can get a copy of this project by clicking on the
[ZIP](https://git.dlma.com/kvs.git/zipball/main)
or [TAR](https://git.dlma.com/kvs.git/tarball/main) buttons
near the top right of the GitList web page.
If you're me, and you want to contribute to the repo, then you can clone it like so:
git clone ssh://USERNAME@dlma.com/~/git/kvs.git
# Building it
1. Enable Python pages at your web server. See [How to use Python in the web](https://docs.python.org/2/howto/webservers.html#).
My configuration is for Apache, hence the .htaccess file.
2. Move auth\_sample.txt to auth.txt, and replace `yourauthorizationhere` with a passcode you choose.
chmod 600 the file or deny access to it via .htaccess.
3. Optional: Use secure HTTP. I recommend getting a free SSL certificate from [Let's Encrypt](https://letsencrypt.org/).
4. If you don't have the YAML module, pip install pyyaml.
# Using it
Here is [a live instance that serves an index page](https://kvs.dlma.com/).
You can send a key to get a value like so:
https://kvs.dlma.com/?k=1GM35N000010
Special use case, here's how to get the value for the most-recently updated key of a
list of keys. The list could contain any number of keys, but only one value will be returned.
https://kvs.dlma.com/?k=1GM35N000010,1GU44N010910
Here's the recipe for a cURL command to store a new value for a key:
curl --data "key=value&auth={authorization}" https://{url}
Here's [the source code for a Roku channel client of such a service](https://git.dlma.com/roku_ip_tagger.git/).
# Is it any good?
[Yes](https://news.ycombinator.com/item?id=3067434).
# Licence
This software uses the [MIT license](https://git.dlma.com/kvs.git/blob/main/LICENSE.txt).