[][src]Crate cql_tiny_text

This crate implements various CqlType derivatives for storing String values of up to (and including) 255 chars in a CQL database.

Will allocate 1020 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, but please be aware that they will allocate ~102MB of disk space. The read_to_stream benchmarks also differ slightly from other CqlType derivatives as they stream into a Vector, not an Array.

OperationDatabase dimensionsMean time (ns)
Single point read13 060 (+/- 200)
Single point read415 800 (+/- 1 100)
Single point write12 800 (+/- 300)
Single point write415 400 (+/- 1 000)
Stream read 1 point13 500 (+/- 300)
Stream read 1 point415 500 (+/- 1 100)
Stream read 50 000 points156 700 000 (+/- 800 000)
Stream read 50 000 points456 400 000 (+/- 150 000)

Examples

The following creates a 1D database, writes 2 values to it, and then streams them into an array.

const N_VALUES_TO_READ: usize = 3;

let base_point = [1];
let value1 = "item one";
let value3 = "شماره ۳";

cql_db::create_db::<TinyText>(
    DATABASE_LOCATION,
    &[3]
);

cql_db::write_value::<TinyText>(
    DATABASE_LOCATION,
    &base_point,
    TinyText::try_from(value1)?
)?;

cql_db::write_value::<TinyText>(
    DATABASE_LOCATION,
    &[base_point[0] + 2],
    TinyText::try_from(value3)?
)?;

let mut result = Vec::with_capacity(N_VALUES_TO_READ);
let mut stream = Cursor::new(Vec::new());

cql_db::read_to_stream::<TinyText>(
    DATABASE_LOCATION,
    &mut stream,
    &base_point,
    N_VALUES_TO_READ as u64
)?;

stream.seek(SeekFrom::Start(0));
unpack_stream(&mut stream, N_VALUES_TO_READ, |_, value| {
    result.push(value)
})?;

assert_eq!(result[0], TinyText::try_from(value1)?);
assert_eq!(result[1], TinyText::new());
assert_eq!(result[2], TinyText::try_from(value3)?);

Modules

errors
interop

Structs

TinyText

Tuple wrapping String for working with TinyText values in a CQL database.

Functions

unpack_stream

Unpacks n_values of TinyText from a stream, calling value_handler with each value and it's index.