1 个不稳定版本
0.6.0 | 2023年1月12日 |
---|
#13 in #big-data
220KB
1.5K SLoC
GridDB Rust驱动程序
这是GridDB Rust客户端库的分支。有关详细信息,请参阅原始仓库此处。
支持的功能
- GridDB的STRING, BOOL, BYTE, SHORT, INTEGER, LONG, FLOAT, DOUBLE, TIMESTAMP, BLOB类型
- 插入单行,通过键获取行
- 常规查询,使用TQL进行聚合
尚未支持
- GridDB的GEOMETRY, 数组类型
- 多插入/获取/查询(批量处理)
- 时间序列特定函数,亲和力
有关更详细的信息,请参阅以下文件。
入门
要使用此驱动程序,请将以下内容添加到您的Cargo.toml
[dependencies]
griddb = "0.6.0"
连接到GridDB
use griddb::griddb::StoreFactory::*;
fn main() {
// get default factory
let factory = StoreFactory::get_instance();
let properties = vec![
("notification_member", "127.0.0.1:10001"),
("cluster_name", "myCluster"),
("user", "admin"),
("password", "admin"),
];
// get gridstore function
let store = match factory.get_store(properties) {
Ok(result) => result,
Err(error) => panic!("Error factory get_store() with error code: {:?}", error),
};
let _con = match store.get_container("point01") {
Ok(_result) => println!("Successfully Connected to GridDB"),
Err(error) => panic!("Error store get_container() with error code: {:?}", error),
};
}
创建时间序列容器
use griddb::griddb::ContainerInfo::*;
use griddb::griddb::StoreFactory::*;
use griddb::griddb::Type::*;
let store = match factory.get_store(properties) {
Ok(result) => result,
Err(error) => panic!("Error factory get_store() with error code: {:?}", error),
};
// Creating Time Series Container
let tsinfo = ContainerInfo::ContainerInfo(
"device13",
vec![
("ts", Type::Timestamp),
("co", Type::Double),
("humidity", Type::Double),
("light", Type::Bool),
("lpg", Type::Double),
("motion", Type::Bool),
("smoke", Type::Double),
("temp", Type::Double),
],
ContainerType::TimeSeries,
true,
);
创建集合容器
use griddb::griddb::ContainerInfo::*;
use griddb::griddb::StoreFactory::*;
use griddb::griddb::Type::*;
let store = match factory.get_store(properties) {
Ok(result) => result,
Err(error) => panic!("Error factory get_store() with error code: {:?}", error),
};
let colinfo = ContainerInfo::ContainerInfo(
"deviceMaster2",
vec![
("sensorID", Type::String),
("location", Type::String),
],
ContainerType::Collection,
true,
);
插入数据
use griddb::griddb::ContainerInfo::*;
use griddb::griddb::StoreFactory::*;
use griddb::griddb::Type::*;
use griddb::griddb::Value::*;
use griddb::gsvec;
use chrono:: Utc;
let ts = match store.put_container(&tsinfo, false) {
Ok(result) => result,
Err(error) => panic!("Error store put_container() with error code: {:?}", error),
};
// Grab current time to use as time value for container
let timestamp: Timestamp = Timestamp {
value: Utc::now().timestamp_millis(),
};
ts.put(gsvec![timestamp, 0.004342, 49.0, false, 0.00753242, false, 0.0212323, 23.2]);
let timestamp_second: Timestamp = Timestamp {
value: Utc::now().timestamp_millis() + 1000,
};
ts.put(gsvec![timestamp_second, 0.0065342, 31.0, false, 0.753242, false, 0.02653323, 27.2]);
ts.commit();
读取数据
use griddb::get_value;
use griddb::griddb::ContainerInfo::*;
use griddb::griddb::StoreFactory::*;
use griddb::griddb::Type::*;
use griddb::griddb::Value::*;
let query = match ts.query("select *") {
Ok(result) => result,
Err(error) => panic!("Error container query data with error code: {:?}", error),
};
let row_set = match query.fetch() {
Ok(result) => result,
Err(error) => panic!("Error query fetch() data with error code: {:?}", error),
};
while row_set.has_next() {
let row_data = match row_set.next() {
Ok(result) => result,
Err(error) => panic!("Error row set next() row with error code: {:?}", error),
};
let ts: Timestamp = get_value![row_data[0]];
let timestamp_number: i64 = ts.value;
let co: f64 = get_value![row_data[1]];
let humidity: f64 = get_value![row_data[2]];
let light: bool = get_value![row_data[3]];
let lpg: f64 = get_value![row_data[4]];
let motion: bool = get_value![row_data[5]];
let smoke: f64 = get_value![row_data[6]];
let temp: f64 = get_value![row_data[7]];
let tup_query = (timestamp_number, co, humidity, light, lpg, motion, smoke, temp);
println!(
"Device13:
ts={0} co={1} humidity={2} light={3} lpg={4} motion={5} smoke={6} temp={7}",
tup_query.0,
tup_query.1,
tup_query.2,
tup_query.3,
tup_query.4,
tup_query.5,
tup_query.6,
tup_query.7
);
}
依赖项
~1.4–3.5MB
~60K SLoC