#byte #avro #serde

serde-avro-bytes

高效存储与 Avro 编码相关的 Rust 习惯用法字节类型

2 个不稳定版本

0.2.0 2024 年 3 月 28 日
0.1.0 2024 年 3 月 27 日

#1823 in 编码

每月 32 次下载

MIT/Apache

29KB
747

Serde Avro Bytes

Avro 是一种二进制编码格式,它提供了一个针对存储 &[u8] 数据优化的 "bytes" 类型。

不幸的是,apache_avroVec<u8> 编码为一个整数数组,因此编码数据的大小是使用 bytes 的一半。

#[derive(Serialize)]
struct Record {
    data: Vec<u8>
}

fn playground() {
    let record = Record {
        data: vec![1,2]
    };
    // data field
    // => encoded as in int array : [4,1,1,1,2,0]
    // => encoded as bytes : [4,1,2]
}   

此 crate 提供了一套模块来处理 Rust 习惯用法类型,并将其组件编码为 "bytes"。

#[derive(Serialize, Deserialize)]
struct Record {
    #[serde(with = "serde_avro_bytes::bytes")]
    key: Vec<u8>,
    #[serde(with = "serde_avro_bytes::bytes::option")]
    key2: Option<Vec<u8>>,
    #[serde(with = "serde_avro_bytes::hashmap")]
    key3: HashMap<Vec<u8>, Vec<u8>>,
    #[serde(with = "serde_avro_bytes::btreemap::option")]
    key4: Option<BTreeMap<Vec<u8>, Vec<u8>>>,
    #[serde(with = "serde_avro_bytes::list")]
    key5: Vec<Vec<u8>>,
    #[serde(with = "serde_avro_bytes::list::option")]
    key6: Option<Vec<Vec<u8>>>,
}

功能

  • bstr:添加了对处理 BString 的支持,它是 bst crate 提供的部分有效 UTF-8 字节序列的方便包装器。请参阅 examples/bstr.rs

依赖关系

~4.5–6.5MB
~113K SLoC