6个版本 (破坏性更新)

使用旧Rust 2015

0.5.1 2020年3月29日
0.5.0 2020年3月9日
0.4.0 2019年7月23日
0.3.0 2019年4月21日
0.1.0 2019年1月6日

数据库实现中排名第213

每月下载量38
2 crate中使用

BSD-3-Clause

42KB
922 代码行

嵌入式时间序列数据库

此库提供了一个低开销的时间序列数据库,旨在嵌入到应用程序中。

从系列签名

pub struct Series<T: Clone + Recordable + DeserializeOwned + Serialize> {

你可以知道,你必须对数据类型进行参数化,该数据类型是你想要存储的,它还必须实现几个特性。

#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
struct BikeTrip {
datetime: DateTime<Utc>,
distance: Distance,
duration: Duration,
comments: String,
}

impl Recordable for BikeTrip {
fn timestamp(&self) -> DateTime<Utc> {
self.datetime
}
fn tags(&self) -> Vec<String> {
Vec::new()
}
}

可记录要求实现timestamptags,两者都可以用于搜索记录,并且在将来都可能用于索引。

系列只能存储一种数据类型,但你总是可以通过将它们包装到一个枚举中,来存储多种数据类型。

打开系列

let mut ts: Series<BikeTrip> = Series::open("var/bike_trips.json")
.expect("expect the time series to open correctly");

如果系列文件尚不存在,则将创建该文件。如果它已经存在,现有数据将被读入内存并可供使用。

注意:所有数据都将一次性读入内存。对于人类规模的事物,这可能占用很少的内存,但此软件未针对物联网规模部署进行优化。此外,此库假设只有一个进程正在写入文件。当前,多个进程写入文件的行为是未定义的。

依赖关系

~4–15MB
~189K SLoC