#key-value-database #rocksdb #redis #kv #nosql #embedded-database #binary-heap

redis_rocksdb

使用 Rust 实现的 kv(键/值)嵌入式数据库,存储由 rocksdb 实现

1 个不稳定版本

0.3.9 2024年4月11日
0.3.8 2023年10月5日
0.3.6 2023年2月18日
0.3.4 2023年1月29日
0.1.1 2022年3月7日

#466数据库接口

Download history 5/week @ 2024-05-17 2/week @ 2024-05-24

每月下载量 530

Apache-2.0

165KB
4K SLoC

redis_rocksdb

使用 Rust 实现的 kv(键/值)嵌入式数据库,存储由 rocksdb 实现
功能列表

  1. Redis 列表
  2. 对象,键+字段
  3. ObjectBit,一个位对象
  4. 最大/最小二叉堆(零拷贝)
  5. B + 树(二叉加树)...

示例

更多详情请见 测试
最大堆

use rocksdb::TransactionDB;
use redis_rocksdb::{Heap, RedisRocksdb, WrapTransactionDB};

fn sample(){
    let trans_db= TransactionDB::open_default("db_name.db").expect("");
    let redis_db = RedisRocksdb::new(trans_db);
    let wrap_db = WrapTransactionDB { db: redis_db.get_db() };

    let max_heap = RedisRocksdb::max_heap();
    let key = vec![0 as u8, 1, 2];
    let field = vec![6 as u8, 7, 8];
    let value = "data".to_owned();

    let _ = max_heap.push(&wrap_db, &field, value.as_bytes());
    let _ = max_heap.pop(&wrap_db, &key);
}

对象

use rocksdb::TransactionDB;
use redis_rocksdb::{Heap, Object, RedisRocksdb, WrapTransactionDB};

fn sample(){
    let trans_db= TransactionDB::open_default("db_name.db").expect("");
    let redis_db = RedisRocksdb::new(trans_db);
    let wrap_db = WrapTransactionDB { db: redis_db.get_db() };

    let object = RedisRocksdb::object();
    let key = vec![0 as u8, 1, 2];
    let field = vec![6 as u8, 7, 8];
    let value = "data".to_owned();

    let _ = object.set(&wrap_db, &field, value.as_bytes());
    let _ = object.get(&wrap_db, &key, &field);
}

安装

窗口

  1. 安装 llvm
  2. 环境变量:设置 LIBCLANG_PATH=E:/lang/LLVM/lib —— 有时需要重启窗口系统以供 clion 使用

Linux

参考

ssdb-rocks(c++)
ssdb
rust-rocksdb,无事务
ckb-rocksdb,事务

注:在 v0.1.0 版本时使用 ckb-rocksdb,在 v0.2.0 版本中,为了减少一次函数调用,将事务与非事务分别使用不同的接口实现,因此就不再需要使用 ckb-rocksdb

依赖

~24–34MB
~588K SLoC