Rust数据分块存储UI库re_chunk_store_ui的使用,高效管理分块数据存储与可视化
Rust数据分块存储UI库re_chunk_store_ui的使用,高效管理分块数据存储与可视化
简介
re_chunk_store_ui是rerun系列crate的一部分,提供了一个用于数据存储的UI界面。
安装
在项目目录中运行以下Cargo命令:
cargo add re_chunk_store_ui
或者在Cargo.toml中添加以下行:
re_chunk_store_ui = "0.24.1"
使用示例
原始示例展示如何使用re_chunk_store_ui来管理分块数据存储和可视化:
use re_chunk_store_ui::ChunkStoreUi;
use rerun::external::re_log_types::DataTable;
fn main() {
// 1. 创建数据表
let mut data_table = DataTable::default();
// 2. 添加一些示例数据
data_table.add_row("row1", &["value1", "value2"]);
data_table.add_row("row2", &["value3", "value4"]);
// 3. 初始化UI
let ui = ChunkStoreUi::new();
// 4. 将数据表添加到UI中
ui.add_data_table("example_table", data_table);
// 5. 运行UI
ui.run().expect("Failed to run UI");
}
完整示例demo
以下是一个更完整的示例,展示如何创建分块数据并使用UI进行管理:
use re_chunk_store_ui::ChunkStoreUi;
use rerun::external::re_log_types::{DataTable, DataRow};
fn main() {
// 1. 创建多个数据表
let mut table1 = DataTable::default();
let mut table2 = DataTable::default();
// 2. 填充数据表1
table1.add_row("row1", &["data1", "data2"]);
table1.add_row("row2", &["data3", "data4"]);
// 3. 填充数据表2
table2.add_row("rowA", &["valueA", "valueB"]);
table2.add_row("rowB", &["valueC", "valueD"]);
// 4. 初始化UI
let ui = ChunkStoreUi::new();
// 5. 添加数据表到UI
ui.add_data_table("table1", table1);
ui.add_data_table("table2", table2);
// 6. 运行UI界面
ui.run().expect("UI运行失败");
}
功能特性
- 提供数据存储的可视化界面
- 支持分块数据管理
- 与rerun生态系统集成
文档
更多详细用法请参考官方文档。
许可证
本库采用MIT或Apache-2.0双许可证。
1 回复
Rust数据分块存储UI库re_chunk_store_ui使用指南
完整示例代码
下面是一个结合了基本使用、UI可视化和自定义分块策略的完整示例:
use re_chunk_store_ui::{ChunkStore, ChunkStoreConfig, ChunkStoreUI, ChunkingStrategy};
use eframe::egui;
// 自定义分块策略:按特定分隔符分块
fn custom_chunking_strategy(data: &[u8]) -> Vec<Vec<u8>> {
data.split(|&b| b == 0) // 以0字节作为分隔符
.map(|slice| slice.to_vec())
.collect()
}
fn main() -> eframe::Result<()> {
// 配置分块存储
let config = ChunkStoreConfig {
chunk_size: 1024, // 每个分块1KB
max_chunks: 10000, // 最多10000个分块
..Default::default()
};
// 创建分块存储实例
let mut store = ChunkStore::new(config);
// 设置自定义分块策略
store.set_chunking_strategy(ChunkingStrategy::Custom(Box::new(custom_chunking_strategy)));
// 添加示例数据
let sample_data = vec![
vec![1, 2, 0, 3, 4, 0, 5], // 将被分成3块
vec![10, 20, 30, 40, 50], // 将被分成1块
vec![0, 0, 100, 0, 200], // 将被分成3块
];
for data in sample_data {
store.add_data(&data).unwrap();
}
// 启用性能监控
store.enable_metrics(true);
// 创建UI应用
let options = eframe::NativeOptions::default();
eframe::run_native(
"分块存储管理器",
options,
Box::new(|_cc| Box::new(ChunkStoreApp::new(store))),
)
}
struct ChunkStoreApp {
store: ChunkStore,
ui: ChunkStoreUI,
}
impl ChunkStoreApp {
fn new(store: ChunkStore) -> Self {
Self {
store,
ui: ChunkStoreUI::default(),
}
}
}
impl eframe::App for ChunkStoreApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| {
// 显示库提供的默认UI
self.ui.ui(ui, &mut self.store);
ui.separator();
// 添加自定义UI部分
self.custom_ui(ui);
// 显示性能指标
if let Some(metrics) = self.store.get_metrics() {
ui.collapsing("性能指标", |ui| {
ui.label(format!("总块数: {}", metrics.total_chunks));
ui.label(format!("内存使用: {} KB", metrics.memory_usage / 1024));
ui.label(format!("平均块大小: {} 字节", metrics.average_chunk_size));
});
}
});
}
}
impl ChunkStoreApp {
fn custom_ui(&mut self, ui: &mut egui::Ui) {
ui.heading("自定义分块管理");
// 显示分块详细信息的表格
egui::ScrollArea::vertical().show(ui, |ui| {
egui::Grid::new("chunk_details_grid")
.num_columns(3)
.striped(true)
.show(ui, |ui| {
ui.strong("ID");
ui.strong("大小");
ui.strong("前5字节");
ui.end_row();
for (id, chunk) in self.store.iter_chunks().enumerate() {
ui.label(format!("{}", id));
ui.label(format!("{} 字节", chunk.len()));
// 显示前5个字节(如果有的话)
let preview = if chunk.len() > 5 {
format!("{:?}", &chunk[..5])
} else {
format!("{:?}", chunk)
};
ui.label(preview);
ui.end_row();
}
});
});
// 添加控制按钮
ui.horizontal(|ui| {
if ui.button("压缩存储").clicked() {
self.store.compact();
}
if ui.button("清除所有块").clicked() {
self.store.clear();
}
if ui.button("添加测试数据").clicked() {
let test_data = vec![0, 1, 2, 3, 0, 4, 5, 6, 0, 7];
self.store.add_data(&test_data).unwrap();
}
});
}
}
示例说明
-
初始化配置:
- 创建了分块存储配置,指定每个分块大小为1KB,最多10000个分块
- 设置了自定义的分块策略(按0字节分隔)
-
数据操作:
- 添加了几组示例数据
- 启用了性能监控功能
-
UI实现:
- 结合了库自带的UI组件
- 添加了自定义UI部分,显示分块详细信息表格
- 实现了分块预览功能(显示前5个字节)
- 添加了控制按钮(压缩、清除、添加测试数据)
-
性能监控:
- 在UI中展示了存储的性能指标
运行效果
运行此程序后,你将看到一个包含以下内容的窗口:
- 库自带的存储管理UI
- 自定义的分块详细信息表格
- 性能指标折叠面板
- 底部控制按钮栏
这个示例展示了如何将re_chunk_store_ui
的核心功能与自定义UI相结合,创建一个功能完整的分块数据管理工具。