#object-storage #key-value-store #oss #filesystem #block-index #data-file

qstorage

基于文件系统的对象存储,也可以用作持久化键值数据库

1个不稳定版本

0.1.0 2019年6月6日

#1277数据库接口

MIT 许可证

38KB
496

QStorage Logo

基于文件系统的对象存储,也可以用作持久化键值数据库。

概述

  • 这是一个基于文件系统的单线程对象存储系统。目前没有多线程支持,没有读写锁,也没有隔离锁。
  • 数据以文件系统中的碎片文件形式存储。您可以定义碎片的大小。碎片内容被分成块。同样,您还可以自定义块大小。
  • 与文件系统类似,数据被分成多个块。写入时记录块索引位置。删除数据仅标记块为无效,并不删除块数据。当新数据到达时,它将写入失败的块,覆盖旧数据。当前版本未实现文件碎片整理,因此可能存在无效数据碎片,但它不会影响正常使用,但会浪费存储空间。
  • 系统未实现文件信息,只是普通的键值存储。请注意,如果您需要存储文件信息,请依靠其他实现来存储文件信息。

版本

  • 0.1.0

快速入门

extern crate qstorage;

use qstorage::QStorage;
use std::io::Error;

fn main() -> Result<(), Error> {
    let dirname = String::from("./storage");
    let mut storage = QStorage::new(dirname, 10737418240, 1048576)?;

    storage.ready()?;

    let key = String::from("hello");
    let value = "word".as_bytes().to_vec();

    storage.insert(key.clone(), value)?;
    
    if let Some(data) = storage.get(key)? {
        println!("{}", String::from_utf8_lossy(data.as_slice()));
    }

    storage.closed()?;
    Ok(())
}

注意

closed 在关闭前进行清理。
这是一个必需的操作。您必须在每次关闭前进行最终清理,保存状态,您也可以在每次需要保存状态时调用此函数。
此操作将内存数据写入文件系统。
例如,监听进程的退出事件,然后调用此函数。

许可证

MIT 版权(c)2019 Mr.Panda。

无运行时依赖项