[][src]Crate cql_nullable_f64

This crate implements various CqlType derivatives for storing Option<f64> values in a CQL database.

Will allocate 9 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.

OperationDatabase dimensionsMean time (ns)
Single point read13 100 (+/- 200)
Single point read416 400 (+/- 900)
Single point write12 800 (+/- 300)
Single point write415 400 (+/- 1 000)
Stream read 1 point12 500 (+/- 300)
Stream read 1 point415 300 (+/- 800)
Stream read 50 000 points127 300 000 (+/- 500 000)
Stream read 50 000 points427 500 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 = Some(-1.6);
let value3 = Some(5.4);

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

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

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

let mut result: [Option<f64>; N_VALUES_TO_READ] = [None; N_VALUES_TO_READ];
let mut stream = Cursor::new(Vec::new());

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

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

assert_eq!(result[0], value1);
assert_eq!(result[1], None);
assert_eq!(result[2], value3);

Structs

NullableF64

Static struct for declaring that you want to work with Option<f64> values in a CQL database.

Functions

unpack_stream

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