2 个版本
0.1.1 | 2024 年 3 月 24 日 |
---|---|
0.1.0 | 2024 年 3 月 21 日 |
#37 in #字节流
44 每月下载量
用于 idntkown
350KB
5.5K SLoC
pstream
自行承担风险使用。
基于块存储的持久字节流。
许可协议
根据 MIT 许可协议 许可。
贡献
除非你明确表示,否则任何有意提交以包含在作品中并由你提交的贡献,都应按照 MIT 许可协议许可,不附加任何额外条款或条件。
lib.rs
:
基于块存储的持久字节流。
最初的想法是拥有一个用于编写可靠持久软件的原始类型,字节流似乎是一个很好的起点 - 它可以用作更简单软件的主要存储,并在更复杂的系统中占有一席之地。
字节流有众多应用:数据库的预写日志、消息代理、任何类型的日志、持久缓冲区等。我认为它是一个通用、高效且易于推理的结构。几乎任何类型的数据存储都可以用这种方式建模,只要数据适合内存,这是该库的主要限制。
目标是保持库 简单,以便代码可以通过检查进行推理并易于维护,同时 API 足够灵活,可以覆盖各种用例。简单通常也导致更好的性能和可靠性。它设计用于在并发代码中使用。
由于二级存储是基于块的,核心抽象是连续的字节流,由块支持,然后进一步用于构建概念上无限制的数据流。有关详细信息,请参阅相关模块文档。
功能
此库旨在最小化,因此不属于核心实现的额外功能位于 Cargo 功能 后面,以进行条件编译。以下功能可用
io-filesystem
- 包括基于通用文件系统的块流存储实现。libc
- 如果启用,基于文件的 I/O 将使用更高效和可靠的 Linux 内核调用。仅适用于 Linux。
示例
use std::io;
use pstream::{EndlessStream, io::Void};
fn main() -> io::Result<()> {
let void = Void::new(10, 17);
let stream = EndlessStream::new(void);
stream.grow()?;
let data = [10u8; 8].as_slice();
stream.append(data)?;
for chunk in stream.iter() {
assert_eq!(chunk.bytes().unwrap().as_ref(), data);
}
Ok(())
}
依赖关系
~130KB