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 次下载
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