Rust数据库操作库br-db的使用:高性能嵌入式存储引擎与键值管理解决方案
Rust数据库操作库br-db的使用:高性能嵌入式存储引擎与键值管理解决方案
br-db ORM 数据库
支持数据库
- Mysql
- Sqlite
- Mssql
- PostgreSQL as pgsql
安装
在项目目录中运行以下Cargo命令:
cargo add br-db
或者在Cargo.toml中添加以下行:
br-db = "1.8.21"
示例代码
以下是一个完整的br-db使用示例,展示了如何连接SQLite数据库并进行基本的键值操作:
use br_db::{Database, DatabaseType, Error};
#[tokio::main]
async fn main() -> Result<(), Error> {
// 创建SQLite数据库连接
let db = Database::new(DatabaseType::Sqlite, "test.db").await?;
// 插入键值对
db.put("my_key", "my_value").await?;
// 获取值
let value = db.get("my_key").await?;
println!("获取的值: {:?}", value); // 输出: Some("my_value")
// 删除键
db.delete("my_key").await?;
// 检查键是否存在
let exists = db.exists("my_key").await?;
println!("键是否存在: {}", exists); // 输出: false
Ok(())
}
完整示例demo
以下是一个更完整的示例,展示了br-db的更多功能:
use br_db::{Database, DatabaseType, Error};
use serde::{Serialize, Deserialize};
#[derive(Debug, Serialize, Deserialize)]
struct User {
id: u32,
name: String,
email: String,
}
#[tokio::main]
async fn main() -> Result<(), Error> {
// 创建SQLite数据库连接
let db = Database::new(DatabaseType::Sqlite, "users.db").await?;
// 创建用户数据
let user = User {
id: 1,
name: "张三".to_string(),
email: "zhangsan@example.com".to_string(),
};
// 序列化用户数据并存储
let user_json = serde_json::to_string(&user)?;
db.put("user:1", &user_json).await?;
// 批量插入数据
let users = vec![
("user:2", r#"{"id":2,"name":"李四","email":"lisi@example.com"}"#),
("user:3", r#"{"id":3,"name":"王五","email":"wangwu@example.com"}"#),
];
for (key, value) in users {
db.put(key, value).await?;
}
// 获取所有用户键
let keys = db.keys("user:").await?;
println!("所有用户键: {:?}", keys);
// 获取并反序列化用户数据
if let Some(user_data) = db.get("user:1").await? {
let user: User = serde_json::from_str(&user_data)?;
println!("用户1: {:?}", user);
}
// 删除用户数据
db.delete("user:3").await?;
// 事务示例
db.transaction(|tx| {
tx.put("tx_key1", "tx_value1")?;
tx.put("tx_key2", "tx_value2")?;
Ok(())
}).await?;
Ok(())
}
特性说明
br-db是一个高性能的嵌入式存储引擎与键值管理解决方案,提供以下特性:
- 支持多种数据库后端
- 简单的键值存储API
- 异步操作支持
- 轻量级设计
文档
更多详细使用方法请参考官方文档。
许可证
MIT License
1 回复
Rust数据库操作库br-db的使用:高性能嵌入式存储引擎与键值管理解决方案
简介
br-db是一个高性能的嵌入式键值存储引擎,专为Rust语言设计。它提供了简单易用的API,同时保持了出色的性能表现,特别适合需要本地存储的场景。
主要特性
- 嵌入式设计:无需额外数据库服务
- 键值存储:简单的键值数据模型
- 高性能:优化的存储引擎实现
- ACID事务支持
- 线程安全
安装
在Cargo.toml中添加依赖:
[dependencies]
br-db = "0.1" # 请使用最新版本号
基本使用方法
1. 打开数据库
use br_db::Database;
fn main() -> Result<(), br_db::Error> {
// 打开或创建数据库
let db = Database::open("my_database.db")?;
Ok(())
}
2. 基本CRUD操作
use br_db::Database;
fn main() -> Result<(), br_db::Error> {
let db = Database::open("example.db")?;
// 插入数据
db.put(b"key1", b"value1")?;
db.put(b"key2", b"value2")?;
// 读取数据
if let Some(value) = db.get(b"key1")? {
println!("Got value: {:?}", String::from_utf8_lossy(&value));
}
// 删除数据
db.delete(b"key2")?;
// 检查是否存在
println!("Exists: {}", db.contains_key(b"key1")?);
Ok(())
}
3. 批量操作
use br_db::Database;
fn main() -> Result<(), br_db::Error> {
let db = Database::open("batch.db")?;
// 批量写入
let mut batch = db.batch();
batch.put(b"bat1", b"value1");
batch.put(b"bat2", b"value2");
batch.delete(b"key_to_remove");
batch.commit()?;
Ok(())
}
4. 事务处理
use br_db::{Database, Transaction};
fn main() -> Result<(), br_db::Error> {
let db = Database::open("transaction.db")?;
// 开始事务
let tx = db.transaction()?;
tx.put(b"tx_key1", b"tx_value1")?;
tx.put(b"tx_key2", b"tx_value2")?;
// 提交事务
tx.commit()?;
// 或者回滚
// tx.rollback()?;
Ok(())
}
5. 迭代器使用
use br_db::Database;
fn main() -> Result<(), br_db::Error> {
let db = Database::open("iterator.db")?;
// 填充一些测试数据
for i in 0..10 {
db.put(format!("key{}", i).as_bytes(), format!("value{}", i).as_bytes())?;
}
// 使用迭代器遍历
let mut iter = db.iter()?;
while let Some((key, value)) = iter.next() {
println!(
"Key: {}, Value: {}",
String::from_utf8_lossy(&key),
String::from_utf8_lossy(&value)
);
}
Ok(())
}
高级功能
自定义比较器
use br_db::{Database, Options};
fn main() -> Result<(), br_db::Error> {
let mut options = Options::default();
options.comparator = Some(Box::new(|a, b| b.cmp(a))); // 反向排序
let db = Database::open_with_options("custom_compare.db", options)?;
// ... 使用数据库 ...
Ok(())
}
性能调优
use br_db::{Database, Options};
fn main() -> Result<(), br_db::Error> {
let mut options = Options::default();
options.cache_size = 1024 * 1024 * 100; // 100MB缓存
options.write_buffer_size = 1024 * 1024 * 4; // 4MB写缓冲区
let db = Database::open_with_options("tuned.db", options)?;
// ... 使用数据库 ...
Ok(())
}
完整示例
下面是一个整合了br-db主要功能的完整示例:
use br_db::{Database, Options, Transaction};
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
// 1. 打开数据库
let mut options = Options::default();
options.cache_size = 1024 * 1024 * 10; // 10MB缓存
let db = Database::open_with_options("complete_example.db", options)?;
// 2. 基本CRUD操作
println!("=== 基本CRUD操作 ===");
db.put(b"name", b"Alice")?;
db.put(b"age", b"30")?;
if let Some(name) = db.get(b"name")? {
println!("Name: {}", String::from_utf8_lossy(&name));
}
println!("Contains 'age': {}", db.contains_key(b"age")?);
db.delete(b"age")?;
println!("After delete, contains 'age': {}", db.contains_key(b"age")?);
// 3. 批量操作
println!("\n=== 批量操作 ===");
let mut batch = db.batch();
batch.put(b"batch1", b"value1");
batch.put(b"batch2", b"value2");
batch.delete(b"name");
batch.commit()?;
// 4. 事务处理
println!("\n=== 事务处理 ===");
let tx = db.transaction()?;
tx.put(b"tx1", b"tx_value1")?;
tx.put(b"tx2", b"tx_value2")?;
// 模拟事务失败场景可以取消下面这行注释
// return Ok(());
tx.commit()?;
// 5. 迭代器使用
println!("\n=== 迭代器遍历 ===");
let mut iter = db.iter()?;
while let Some((key, value)) = iter.next() {
println!(
"Key: {}, Value: {}",
String::from_utf8_lossy(&key),
String::from_utf8_lossy(&value)
);
}
// 6. 自定义比较器
println!("\n=== 自定义比较器 ===");
let mut custom_options = Options::default();
custom_options.comparator = Some(Box::new(|a, b| b.cmp(a)));
let custom_db = Database::open_with_options("custom_sort.db", custom_options)?;
custom_db.put(b"a", b"1")?;
custom_db.put(b"b", b"2")?;
custom_db.put(b"c", b"3")?;
let mut custom_iter = custom_db.iter()?;
while let Some((key, _)) = custom_iter.next() {
println!("Key (reverse order): {}", String::from_utf8_lossy(&key));
}
Ok(())
}
注意事项
- br-db是嵌入式数据库,不需要额外服务进程
- 所有操作都是同步的,考虑在性能敏感场景中使用异步包装
- 数据库文件是平台相关的,不能直接在不同平台间迁移
- 定期备份重要数据
br-db为Rust开发者提供了一个简单高效的本地存储解决方案,特别适合配置存储、缓存、状态持久化等场景。