okofdb 0.1.2

One Key One File Database
Documentation
# One Key One File Database

`okofdb` is a [key value database](https://en.wikipedia.org/wiki/Key-value_database).

### Design Goals:

* Very efficient data storage
* Small memory footprint
* Minimal interface
* ACD | Atomicity Consistency Durability
* Isolation only for multiple readers, not multiple writers
* No application state

If you need multiple concurrent writers,
synchronization is your applications responsibility.
Depending on your use case, possibly a very stupid way of storing your data.

Above an implementation defined value size threshold it will use
[snap](https://crates.io/crates/snap) to compress the value.

## Example

```rust
extern crate okofdb;

use okofdb::okof;
use std::path::Path;

fn main() {
    let path = Path::new("dbdir");
    let key = "test";
    let value = b"Hello, world!";

    okof::write(&path, &key, value).unwrap();
    assert_eq!(okof::read(&path, &key).unwrap(), value);

    let other_value = String::from("Other value");
    okof::write(&path, &key, other_value.as_bytes()).unwrap();
    assert_eq!(okof::read(&path, &key).unwrap(), other_value.as_bytes());

    okof::delete(&path, &key).unwrap();
    match okof::read(&path, &key) {
        Err(okof::Error::NotFound) => (),
        _ => { assert!(false); },
    }
}
```

## Getting Started

Add [this crate](https://crates.io/crates/okofdb) to your project.

### Prerequisites

Rust toolchain and cargo.

Note, some filesystems might struggle with a lot of files in a single directory,
which will happen if there are many keys.

One key == One File.

### Installing

[See cargo docs](https://doc.rust-lang.org/cargo/guide/).

## Running the tests

```
cargo test
```

## Deployment

TBD

## Contributing

Please read [CONTRIBUTING.md](CONTRIBUTING.md)
for details on our code of conduct, and the process for submitting pull requests to us.

## Versioning

We use [SemVer](http://semver.org/) for versioning. For the versions available,
see the [tags on this repository](https://github.com/Voultapher/okofdb/tags).

## Authors

* **Lukas Bergdoll** - *Initial work* - [Voultapher]https://github.com/Voultapher

See also the list of [contributors](https://github.com/Voultapher/okofdb/contributors)
who participated in this project.

## License

This project is licensed under the Apache License, Version 2.0 -
see the [LICENSE.md](LICENSE.md) file for details.