29个版本 (11个重大更新)
0.12.3 | 2023年12月7日 |
---|---|
0.11.3 | 2023年12月1日 |
0.11.0 | 2023年11月30日 |
#1340 在 数据库接口 中
每月下载 365次
在 simuldb-utils 中使用
95KB
2.5K SLoC
此库提供对模拟结果及其关于所使用[软件]和模拟[运行]的元数据的数据存储,且后端和格式无关
主要用例如下
- 在集群上生成数据,并使用JSON后端保存
- 将数据传输到Neo4j后端
- 直接使用Neo4j选择数据
因此,主要目标是提供简单易用的数据写入解决方案,没有计划支持高级搜索或查询功能。
数据存储不由数据库处理,只关联元数据。
目前包含两个后端
可以通过实现Database和DatabaseSession特质来实施自定义后端。会话旨在将[数据集]的特定[运行]与[软件]关联起来。[数据集]是存储在任何任意格式文件中的数据的引用。
特性
示例
这创建了一个基于 Json 的数据库,并写入了一些任意数据。注意,为了创建会话,通常需要使用 [vergen_session] 宏。
use std::io::Write;
use serde::Serialize;
use simuldb::prelude::*;
// Define a metadata type
#[derive(Debug, Serialize)]
struct Metadata {
a: usize,
b: String,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
# std::env::set_current_dir(format!("{}/..", env!("CARGO_MANIFEST_DIR")))?; // change to top level directory
// Create or open database
let mut json = Json::new("output/json");
// Start new session which will contain references to the datasets
let software = Software::new("example", "1.0", "now");
let run = Run::new("now");
let session = Session::new(software, run);
let mut json_session = json.add_session(session)?;
// Create a directory for the result data
std::fs::create_dir_all("output/data")?;
// Generate some data and add it to the database
for a in 0_usize..10 {
// A DataWriter can be used to automatically calculate
// the hash of a file and create a Dataset from it
let mut writer = DatasetWriter::new("output/data")?;
// Write some data to the output file
writeln!(writer, "a^2 = {}", a.pow(2))?;
// Generate metadata to associate with it
let metadata = Metadata {
a,
b: "squaring".to_string(),
};
// Add the corresponding dataset to the database
let dataset = writer.finalize(metadata)?;
json_session.add_dataset(&dataset)?;
}
Ok(())
}
依赖项
~2–16MB
~203K SLoC