#byte-range #read #seek #async-api #low-level #convert #parts

range-reader

将低级 API 转换为读取字节范围的 Read + Seek

2 个不稳定版本

0.2.0 2022 年 5 月 17 日
0.1.0 2021 年 11 月 20 日

#1303算法

Download history 161/week @ 2024-04-08 32/week @ 2024-04-15 23/week @ 2024-04-22 27/week @ 2024-04-29 28/week @ 2024-05-06 34/week @ 2024-05-13 23/week @ 2024-05-20 31/week @ 2024-05-27 23/week @ 2024-06-03 48/week @ 2024-06-17 25/week @ 2024-06-24 27/week @ 2024-07-01 36/week @ 2024-07-15 34/week @ 2024-07-22

97 每月下载量

Apache-2.0

12KB
175

范围读取器

test codecov

将读取文件范围的低级 API 转换为实现 Read + SeekAsyncRead + AsyncSeek 的结构体。请参见 parquet_s3_async.rs,了解如何使用此 API 异步地从 s3 读取大 parquet 文件的部分。

原理

Blob 存储的 https API 提供了从单个 blob 读取字节范围的能力,即形式为

fn read_range_blocking(path: &str, start: usize, length: usize) -> Vec<u8>;
async fn read_range(path: &str, start: usize, length: usize) -> Vec<u8>;

及其总大小,

async fn length(path: &str) -> usize;
fn length(path: &str) -> usize;

这些 API 通常受 IO 限制 - 它们等待网络。

某些文件格式(例如 Apache Parquet、Apache Avro、Apache Arrow IPC)允许读取文件的部分进行过滤和投影下推。

此 crate 提供 2 个结构体,RangedReaderRangedStreamer,分别实现 Read + SeekAsyncRead + AsyncSeek,以将上述 blob 存储 API 连接到大多数 Rust API 用于读取字节时使用的特性。

许可证

根据您的选择,许可为以下之一

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中并由您定义的贡献,应如上双许可,没有任何附加条款或条件。

依赖项

~135KB