4 releases

Uses old Rust 2015

0.1.3 Mar 18, 2018
0.1.2 Mar 18, 2018
0.1.1 Mar 17, 2018
0.1.0 Mar 17, 2018

#34 in #key-file

Apache-2.0

11KB
197 lines

One Key One File Database

okofdb is a 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 to compress the value.

Example

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

Running the tests

cargo test

Deployment

TBD

Contributing

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

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Authors

See also the list of contributors who participated in this project.

License

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

Dependencies

~250KB