#key-value-database #key-value #small

smolldb

这是一个小型内存中的键值数据库,可以轻松地将其备份到文件中,稍后从该文件中加载

5 个版本 (3 个重大变更)

0.4.2 2023年6月8日
0.4.1 2022年12月6日
0.3.0 2022年12月2日
0.2.0 2022年11月30日
0.1.0 2022年11月29日

#1259数据库接口

每月 22 次下载

MIT 许可证

30KB
457

SmollDB

为 Rust 的小型内存键值数据库

这是一个小型内存中的键值数据库,可以轻松地将其备份到文件或流中,稍后从该文件或流中加载

它不是什么大东西,但这是诚实的工作

这个数据库只是一个 hashmap,但它已经包含将 hashmap 轻松加载和保存到文件的功能,因此您无需实现它。它还以 Zlib 兼容的格式进行压缩

受 Pickles 启发

此包受 pickleDB 启发,并在类似用例中工作

现在支持流

自 0.4.0 版起

您可以使用函数 SmollDB::load_from_stream 从任何实现了 std::io::Read 的东西中加载,您可以使用 SmollDB::backup_to_stream 将备份到任何实现了 std::io::Write 的东西

一些示例

基本使用

use smolldb::{DataType, SmollDB};
 
let mut db = SmollDB::default();
 
db.set("Nome", "Mario".to_string());
db.set("Eta", 34_i16);
db.set("Stinky", true);
db.set("Height", 23.3_f32);
db.set("CF", vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
 
assert_eq!(DataType::STRING("Mario".to_string()),*(db.get(&"Nome").unwrap()));
assert_eq!(DataType::INT16(34_i16), *(db.get(&"Eta").unwrap()));
assert_eq!(DataType::BOOL(true), *(db.get(&"Stinky").unwrap()));
assert_eq!(DataType::FLOAT32(23.3_f32), *(db.get(&"Height").unwrap()));
assert_eq!(DataType::BYTES(vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),*(db.get(&"CF").unwrap()));

从文件加载

use smolldb::{DataType, SmollDB};

let mut db = SmollDB::default();
 
db.set("bool", false);
db.set("int8", 8_i8);
db.set("int16", 8_i16);
db.set("int32", 8_i32);
db.set("int64", 8_i64);
db.set("float32", 4_f32);
db.set("float64", 4_f64);
db.set("string", String::from("8_i8"));
db.set("bytes",vec![1, 2, 3, 4, 5, 6, 7, 8, 243, 123,46, 11, 123, 65, 2, 3, 5, 7, 2,],);
db.backup(&"database").unwrap();
 
let db_copy = SmollDB::load(&"database").unwrap();
 
assert_eq!(db, db_copy);

从流加载和备份

use smolldb::{DataType, SmollDB};
use std::fs::{OpenOptions};
use std::io::{Seek};
 
let mut database = SmollDB::default();
let mut stream = OpenOptions::new().create(true).read(true).write(true).open("myfile.smoll").unwrap();
let data = String::from("data");
let key = String::from("example");
 
database.set(key.clone(), data.clone());
database.backup_to_stream(&mut stream).unwrap();
stream.seek(std::io::SeekFrom::Start(0)).unwrap();
 
let database = SmollDB::load_from_stream(&mut stream).unwrap();
let result = database.get(&key).unwrap();
 
assert_eq!(*result, DataType::STRING(data));

自 0.4.2 版起

您可以使用 SmollDB::extract 自动将数据类型转换为内部类型

use smolldb::{DataType, SmollDB};
 
let mut db = SmollDB::default();
let str1 = String::from("Mario");

db.set("Nome", "Mario".to_string());

let str2 : &String = db.extract(&"Nome").unwrap().unwrap();

assert_eq!(str2,&str1)

依赖关系

~130KB