dumbo_rocks_db

Crates.iodumbo_rocks_db
lib.rsdumbo_rocks_db
version0.2.3
created_at2025-07-07 03:39:06.589916+00
updated_at2025-08-22 15:30:29.524944+00
descriptionRocksDB数据库操作模块,提供类型安全的列族(Column Family)抽象。
homepage
repositoryhttps://github.com/cao5zy/dumbo_rocks_db
max_upload_size
id1740687
size41,874
zong-ying.cao (cao5zy)

documentation

https://docs.rs/dumbo_rocks_db

README

dumbo_rocks_db

RocksDB数据库操作模块,提供类型安全的列族(Column Family)抽象。

概述

本模块通过DbContext管理数据库连接,使用ColumnFamily<T>提供类型安全的数据操作。每个列族对应一个类型T,该类型需实现Keyable trait。

快速开始

1. 初始化数据库

在系统启动时初始化全局数据库实例:

use dumbo_rocks_db::DbContext;

// 参数说明:
// - db_path: 数据库存储路径
// - column_families: 所有列族名称列表
DbContext::initialize(db_path, column_families)?;

2. 定义数据模型

为每个列族创建实现Keyable的类型:

use serde::{Serialize, Deserialize};
use dumbo_rocks_db::Keyable;

#[derive(Serialize, Deserialize)]
struct User {
    id: String,
    name: String,
}

impl Keyable for User {
    fn key(&self) -> String {
        self.id.clone()
    }
    
    fn column_family() -> &'static str {
        "users"  // 对应初始化时传入的列族名称
    }
}

3. 使用列族操作数据

use dumbo_rocks_db::ColumnFamily;

// 创建列族访问对象
let user_cf = ColumnFamily::<User>::new();

// 插入数据
user_cf.set(&User {
    id: "001".into(),
    name: "Alice".into()
})?;

// 查询数据
let user = user_cf.get("001")?;

// 获取全部数据
let all_users = user_cf.get_all()?;

// 删除数据
user_cf.del("001")?;

核心组件说明

DbContext

  • initialize(db_path: &str, column_families: &[&str]):初始化数据库连接
  • 单例模式管理数据库实例

ColumnFamily<T>

要求 T: Keyable,提供以下操作:

  • get(key: &str) -> Result<Option<T>>:按键查询
  • set(item: &T) -> Result<()>:插入/更新数据
  • del(key: &str) -> Result<()>:删除数据
  • get_all() -> Result<Vec<T>>:获取列族全部数据
  • count_all() -> Result<usize>: 获取总的记录数
  • keep_size(size: usize): 根据索引的顺序,保留指定数量的数据,超过这个数量的就删除 (0.2.0)

Keyable trait

数据模型必须实现的特征:

pub trait Keyable: Serialize + DeserializeOwned {
    /// 获取数据主键
    fn key(&self) -> String;
    
    /// 返回对应的列族名称
    fn column_family() -> &'static str;
}

生成时序相关的索引(0.2.0)

use dumbo_rocks_db::generate_timestamp_index;


let start_time = chrono::Utc::now();
let id_name : &str = "warning";
let index_id = generate_timestamp_index(id_name, start_time);
Commit count: 8

cargo fmt