# 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.