Skip to content

UnQLite wrapper 1.0 is avaliable for Rust

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

zitsen/unqlite.rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

33b6c50 · Dec 4, 2020
Oct 15, 2020
Oct 15, 2020
Oct 15, 2020
May 21, 2019
Jan 26, 2018
May 12, 2016
Oct 16, 2020
Oct 16, 2020
Feb 18, 2016
Feb 18, 2016
Dec 3, 2020
May 21, 2019
May 13, 2016
May 12, 2016

Repository files navigation

unqlite

A high-level UnQLite database engine wrapper.

travis-badge release-badge downloads docs-badge license-badge

NOTE: Some of the documents is stolen from UnQLite Official Website.

What is UnQLite?

UnQLite is a software library which implements a self-contained, serverless, zero-configuration, transactional NoSQL database engine. UnQLite is a document store database similar to [MongoDB], [Redis], [CouchDB] etc. as well a standard Key/Value store similar to [BerkeleyDB], [LevelDB], etc.

UnQLite is an embedded NoSQL (Key/Value store and Document-store) database engine. Unlike most other NoSQL databases, UnQLite does not have a separate server process. UnQLite reads and writes directly to ordinary disk files. A complete database with multiple collections, is contained in a single disk file. The database file format is cross-platform, you can freely copy a database between 32-bit and 64-bit systems or between big-endian and little-endian architectures.

Port to Rust

This crate is high-level UnQLite database wrapper for Rust. A low-level bindings wrapper is available as a seperated crate: unqlite-sys.

Usage

You can start with UnQLite constructors:

extern crate unqlite;

use unqlite::{UnQLite, Config, KV, Cursor};

fn main() {
    // The database memory is not handled by Rust, and the database is on-disk,
    // so `mut` is not neccessary.
    let unqlite = UnQLite::create_temp();
    // Use any type that can use as `[u8]`
    unqlite.kv_store("key", "a long length value").unwrap();
    unqlite.kv_store("abc", [1,2,3]).unwrap();

    let mut entry = unqlite.first();
    // Iterate records
    loop {
        if entry.is_none() { break; }

        let record = entry.expect("valid entry");
        let (key, value) = record.key_value();
        println!("* Go through {:?} --> {:?}", key, value);

        if value.len() > 10 {
            println!("** Delete key {:?} by value length", key);
            entry = record.delete();
        } else {
            entry = record.next();
        }
    }
    //panic!("for test");
}

Contributors

  • @bemyak
  • @chritchens
  • @wolandr
  • @timlyo
  • @dariusc93