#cql #storage #nosql #array

cql_f64

f64存储支持CQL数据库 - 一个基于数组的轻量级数据库

1个不稳定版本

0.2.0 2020年9月26日

#27#cql

MIT/Apache

15KB
80

此crate实现了各种CqlType派生类型,用于在CQL数据库中存储f64值。

每个值将分配8字节链接

基准测试

以下提供的基准测试相当基础(且已四舍五入),旨在提供相对成本的粗略估计。完整的基准测试代码可以在github上找到,并可以使用rustup run nightly cargo bench运行。

操作 数据库维度 平均时间 _unchecked (ns)
单个点读取 1 2 610 (+/- 150)
单个点读取 4 15 500 (+/- 800)
单个点写入 1 2 950 (+/- 250)
单个点写入 4 16 500 (+/- 2 000)
流读取1点 1 2 600 (+/- 200)
流读取1点 4 15 400 (+/- 850)
流读取50,000点 1 27 950 000 (+/- 150 000)
流读取50,000点 4 27 930 000 (+/- 200 000)

示例

以下创建了一个1维数据库,向其中写入2个值,然后将它们流式传输到数组中。

#
const N_VALUES_TO_READ: usize = 3;

let base_point = [1];
let value1 = 1.2;
let value3 = -5.6;

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

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

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

let mut result: [f64; N_VALUES_TO_READ] = [0.0; N_VALUES_TO_READ];
let mut stream = Cursor::new(Vec::new());

cql_db::read_to_stream::<F64>(
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], 0.0);
assert_eq!(result[2], value3);

依赖项

~120KB