22 个版本

0.1.23 2024 年 6 月 18 日
0.1.21 2023 年 2 月 13 日
0.1.20 2023 年 1 月 31 日
0.1.18 2022 年 6 月 13 日
0.1.10 2021 年 11 月 26 日

56数据库接口

Download history 98/week @ 2024-06-16 3/week @ 2024-06-23

每月 1,112 次下载

MIT/Apache

390KB
9K SLoC

siamesedb

crate Docs Rust Version Apache2/MIT licensed Test ubu Test mac Test win

简单的本地键值存储。

功能

  • 键值存储。
  • 内存和文件存储。
  • DbMapDbString 的键为 utf-8 字符串。
  • DbMapDbInt 的键为 u64。
  • DbMapDbBytes 的键为 Vec。
  • 值为任何字节,包括 utf-8 字符串。
  • 文件存储实现基本 B-Tree(无叶子节点)。
  • 文件存储包含 htx 文件,作为性能的哈希缓存表。
  • 小型数据库文件大小。
  • 分离的文件(键文件、值文件、索引文件和 htx 文件)。
  • 一个数据库包含一些 db-map-string、一些 db-map-int 和一些 db-map-bytes。
  • 瑞士军刀,易于使用且性能良好
  • 最低支持 rustc 1.56.1 (59eed8a2a 2021-11-01)

兼容性

  • 什么也没有?

待办事项

  • 更多性能
  • 数据库锁以支持多进程安全

低优先级待办事项

  • 一次处理多个键空间的交易支持
  • 线程安全支持
  • 非数据库锁多进程安全支持

示例

示例 DbMapDbString

use siamesedb::{DbMapDbString, DbXxx, DbXxxBase, DbXxxObjectSafe};

fn main() -> std::io::Result<()> {
    let db_name = "target/tmp/doc-test1.siamesedb";
    // remove database
    let _ = std::fs::remove_dir_all(db_name);
    // create or open database
    let db = siamesedb::open_file(db_name)?;
    // create or get db map
    let mut db_map = db.db_map_string("some_map1")?;
    //
    let r = db_map.get_string("key1")?;
    assert_eq!(r, None);
    db_map.put_string("key1", "value1")?;
    let r = db_map.get_string("key1")?;
    assert_eq!(r, Some("value1".into()));
    db_map.sync_data()?;
    Ok(())
}

示例 DbMapDbInt

use siamesedb::{DbMapDbInt, DbXxx, DbXxxBase, DbXxxObjectSafe};

fn main() -> std::io::Result<()> {
    let db_name = "target/tmp/doc-test2.siamesedb";
    // remove database
    let _ = std::fs::remove_dir_all(db_name);
    // create or open database
    let db = siamesedb::open_file(db_name)?;
    let mut db_map = db.db_map_int("some_list1")?;
    let r = db_map.get_string(&120)?;
    assert_eq!(r, None);
    db_map.put_string(&120, "value120")?;
    let r = db_map.get_string(&120)?;
    assert_eq!(r, Some("value120".to_string()));
    db_map.sync_data()?;
    Ok(())
}

示例 迭代器

use siamesedb::{DbMapDbString, DbMap, DbXxx, DbXxxBase, DbXxxObjectSafe};

fn main() -> std::io::Result<()> {
    let db_name = "target/tmp/doc-test3.siamesedb";
    // remove database
    let _ = std::fs::remove_dir_all(db_name);
    // create or open database
    let db = siamesedb::open_file(db_name)?;
    // create or get db map
    let mut db_map = db.db_map_string("some_map1")?;
    //
    // insert
    db_map.put_string("key01", "value1").unwrap();
    db_map.put_string("key02", "value2").unwrap();
    db_map.put_string("key03", "value3").unwrap();
    //
    // iterator
    let mut iter = db_map.iter();
    assert_eq!(iter.next(), Some(("key01".into(), "value1".into())));
    assert_eq!(iter.next(), Some(("key02".into(), "value2".into())));
    assert_eq!(iter.next(), Some(("key03".into(), "value3".into())));
    assert_eq!(iter.next(), None);
    //
    db_map.sync_data()?;
    Ok(())
}

变更日志

此 crate 的变更日志在这里。

许可

该项目受以下任一许可协议的许可:

任选其一。

依赖项