9 个不稳定版本 (3 个破坏性更新)
0.4.2 | 2023 年 11 月 29 日 |
---|---|
0.4.1 | 2023 年 11 月 14 日 |
0.3.0 | 2023 年 5 月 15 日 |
0.2.0 | 2023 年 4 月 23 日 |
0.1.3 | 2023 年 4 月 14 日 |
#460 在 文件系统
每月下载量 944
用于 cozo
25KB
463 行
SwapVec
当超过一定长度时将向量交换到磁盘的向量。
如果你不想使用队列,而是先收集所有数据,然后消费它们,这会很有用。
想象多个线程缓慢地生成大型数据向量,稍后将其传递给单个消费者。
或者将多个吉字节大小的 CSV 文件上传到 HTTP 服务器,你希望在上传时验证每一行,而不直接开始数据库事务或保留所有数据在内存中。
功能
- 多平台(Linux、Windows、MacOS)
- 仅在超过阈值后创建临时文件
- 在
T: 序列化 + 反序列化 + 克隆
上工作 - 即使在程序终止时也会删除临时文件
- 校验和以确保完整性
- 可以在线程之间移动
限制
- 由于可能进行 I/O 操作,大多数操作都包含在
Result
中 - 目前,尚未实现“在 n MiB 后开始交换”
- 由于堆元素(例如
String
)需要逐元素空间计算
- 由于堆元素(例如
Compression
目前不压缩。它存在是为了保持 API 稳定。- 没有异步支持(尚无)
- 在推送元素或消费迭代器时,SwapVec 是“只写”的
- 只能正向迭代
- 但可以重置
示例
基本用法
use swapvec::SwapVec;
let iterator = (0..9).into_iter();
let mut much_data = SwapVec::default();
// Starts using disk for big iterators
much_data.consume(iterator).unwrap();
for value in much_data.into_iter() {
println!("Read back: {}", value.unwrap());
}
示例
目前只有一个简单的示例,执行一些基本操作并获取诸如将批次/字节写入文件的指标。用以下命令运行:
cargo run --example demo
依赖项
~2–11MB
~121K SLoC