# dumbo_rocks_db
RocksDB数据库操作模块,提供类型安全的列族(Column Family)抽象。
## 概述
本模块通过`DbContext`管理数据库连接,使用`ColumnFamily<T>`提供类型安全的数据操作。每个列族对应一个类型`T`,该类型需实现`Keyable` trait。
## 快速开始
### 1. 初始化数据库
在系统启动时初始化全局数据库实例:
```rust
use dumbo_rocks_db::DbContext;
// 参数说明:
// - db_path: 数据库存储路径
// - column_families: 所有列族名称列表
DbContext::initialize(db_path, column_families)?;
```
### 2. 定义数据模型
为每个列族创建实现`Keyable`的类型:
```rust
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. 使用列族操作数据
```rust
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
数据模型必须实现的特征:
```rust
pub trait Keyable: Serialize + DeserializeOwned {
/// 获取数据主键
fn key(&self) -> String;
/// 返回对应的列族名称
fn column_family() -> &'static str;
}
```
### 生成时序相关的索引(0.2.0)
```rust
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);
```