#cql #storage #nosql #array

cql_i16

i16 storage support for CQL Database - a lightweight array-based database

1 unstable release

0.2.0 Mar 22, 2020

#2813 in Database interfaces

MIT/Apache

17KB
80 lines

CQL I16

This crate implements various CqlType derivatives for storing i16 values in a CQL database.

Will allocate 2 bytes per value linked.

Benchmarks

Benchmarks supplied below are fairly rudimentary (and rounded) and are there to give a rough idea of relative costs. Full benchmark code can be found in github and can be run with rustup run nightly cargo bench.

Operation Database dimensions Mean time _unchecked (ns)
Single point read 1 2 520 (+/- 200)
Single point read 4 15 300 (+/- 1 100)
Single point write 1 2 800 (+/- 300)
Single point write 4 15 350 (+/- 1 500)
Stream read 1 point 1 2 500 (+/- 200)
Stream read 1 point 4 15 400 (+/- 850)
Stream read 50 000 points 1 27 600 000 (+/- 900 000)
Stream read 50 000 points 4 27 400 000 (+/- 90 000)

Getting started

To get started, add the below dependencies to your Cargo.toml:

[dependencies]
//... (any existing dependencies you may have)
cql_db = "^0.2.4"
cql_i16 = "^0.2"

Then need to create a folder where you want the database to live, and then try out the below:

use std::io::{ Cursor, SeekFrom, Seek };
use cql_db::error::Error;
use cql_i16::{ I16, unpack_stream };

const DATABASE_LOCATION: &str = "PATH_TO_YOUR_DATABASE_DIRECTORY";

pub fn example_cql() -> Result<(), Error> {
    // create a one dimensional database to hold 3 points
    cql_db::create_db::<I16>(
        DATABASE_LOCATION,
        &[3]
    )?;

    // write '1', to [1]
    cql_db::write_value::<U64>(
        DATABASE_LOCATION,
        &[1],
        1
    )?;

    let mut result = [0; 2];
    let mut stream = Cursor::new(Vec::new());

    // read 2 values from [1] to 'stream'
    cql_db::read_to_stream::<I16>(
        DATABASE_LOCATION,
        &mut stream,
        &[1],
        2
    )?;

    stream.seek(SeekFrom::Start(0)).unwrap();
    unpack_stream(&mut stream, 2, |idx, value| {
        result[idx] = value
    })?;

    assert_eq!(result[0], 1);
    assert_eq!(result[1], 0);
    Ok(())
}

More info

For further information and more examples, please see the rustdocs. Additional storage types are documented in the cql_db crate.

Dependencies

~120KB