问题:
使用以下命令将键/值条目中的字符串编码到磁盘由于不必要的开销,encoding/gob 会导致过度膨胀。所需的输出格式省略了类型定义,仅包含原始字节和字符串长度。
分析:
encoding/gob 中的初始膨胀源于包含类型编码流中的定义。一旦这些定义被传输,相同类型的后续值只会产生最小的开销,从而可以有效地编码多个值。
解决方案:
消除不必要的膨胀,不应使用encoding/gob 包。相反,请考虑以下选项:
演示:
下表比较了每个条目的编码大小使用不同的方法:
Method | Encoded Size (Bytes) | Compression Ratio |
---|---|---|
Naked Output | 16.04 | 100% |
Flate | 4.12 | 26% |
Zlib | 4.13 | 26% |
Gzip | 4.14 | 26% |
Bzip2 | 2.04 | 12.7% |
推荐:
在大多数实际场景中,使用 compress/gzip 或 compress/zlib 可以在压缩比和性能之间提供良好的平衡。但是,如果磁盘空间限制非常紧张,请考虑使用 bzip2,因为它具有卓越的压缩功能,但代价是效率略有降低。
以上是如何优化 Go 结构序列化到磁盘以获得最小大小?的详细内容。更多信息请关注PHP中文网其他相关文章!