3个不稳定版本
0.2.1 | 2020年3月11日 |
---|---|
0.2.0 | 2020年2月25日 |
0.1.0 | 2020年2月11日 |
#2524 在 数据库接口
24KB
158 行
CQL TinyText
该包实现了CQL数据库中存储最多(包括)255个字符的字符串值的各种CqlType派生。
每个值将分配1020字节链接。
基准测试
下面提供的基准测试相当基础(且已四舍五入),仅用于提供一个相对成本的粗略估计。完整的基准测试代码可以在github中找到,可以使用rustup run nightly cargo bench
运行,但请注意,它们将分配约102MB的磁盘空间。read_to_stream基准测试与其他CqlType派生略有不同,因为它们将数据流到一个Vector中,而不是一个数组。
操作 | 数据库维度 | 平均时间(ns) |
---|---|---|
单点读取 | 1 | 3 060 (+/- 200) |
单点读取 | 4 | 15 800 (+/- 1 100) |
单点写入 | 1 | 2 800 (+/- 300) |
单点写入 | 4 | 15 400 (+/- 1 000) |
流读取1点 | 1 | 3 500 (+/- 300) |
流读取1点 | 4 | 15 500 (+/- 1 100) |
流读取50,000点 | 1 | 56 700 000 (+/- 800 000) |
流读取50,000点 | 4 | 56 400 000 (+/- 150 000) |
入门
要开始,请将以下依赖项添加到您的Cargo.toml中
[dependencies]
//... (any existing dependencies you may have)
cql_db = "^0.2.4"
cql_tiny_text = "^0.2"
然后需要创建一个文件夹,其中包含您希望数据库存放的位置,然后尝试以下操作
use std::convert::TryFrom;
use std::io::{ Cursor, SeekFrom, Seek };
use std::error::Error;
use cql_tiny_text::{ TinyText, unpack_stream };
const DATABASE_LOCATION: &str = "PATH_TO_YOUR_DATABASE_DIRECTORY";
pub fn example_cql() -> Result<(), Box<dyn Error>> {
let value1 = "item one";
let value3 = "شماره ۳";
cql_db::create_db::<TinyText>(
DATABASE_LOCATION,
&[3]
)?;
cql_db::write_value::<TinyText>(
DATABASE_LOCATION,
&[1],
TinyText::try_from(value1)?
)?;
cql_db::write_value::<TinyText>(
DATABASE_LOCATION,
&[3],
TinyText::try_from(value3)?
)?;
let mut result = Vec::with_capacity(3);
let mut stream = Cursor::new(Vec::new());
cql_db::read_to_stream::<TinyText>(
DATABASE_LOCATION,
&mut stream,
&[1],
3
)?;
stream.seek(SeekFrom::Start(0));
unpack_stream(&mut stream, 3, |_, 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)?);
Ok(())
}
更多信息
依赖关系
~120KB