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 在 数据库接口 中
每月 1,112 次下载
390KB
9K SLoC
siamesedb
简单的本地键值存储。
功能
- 键值存储。
- 内存和文件存储。
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(())
}
变更日志
许可
该项目受以下任一许可协议的许可:
- Apache 许可证 2.0 版(LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。