哪种压缩算法更适合压缩协议缓冲区输出?

mar*_*ark 5 compression protocol-buffers

鉴于:

  • 仅包含数字统计信息的 DB 表
  • 表的二进制转储 - 记录后记录
  • 表的协议缓冲区转储 - 使用从表模式创建的原型模式

正如我所期望的,协议缓冲区生成的二进制转储小于同一个表的原始二进制转储:

PS Z:\dev\internal\vedtool> dir net_endshapes_stat.data | % { "$($_.Name): $($_.Length)B" }
net_endshapes_stat.data: 2941331B
net_endshapes_stat.data: 4311042B
Run Code Online (Sandbox Code Playgroud)

但是,当我使用 Ultra level 和 LZMA 方法用 7z 压缩这两个文件时,我发现较大的文件压缩得更好:

PS Z:\dev\internal\vedtool> dir net_endshapes_stat.7z | % { "$($_.Name): $($_.Length)B" }
net_endshapes_stat.7z: 1206186B
net_endshapes_stat.7z: 1055901B
Run Code Online (Sandbox Code Playgroud)

现在,我明白这完全没问题,但我仍然想知道是否有更好的压缩算法可以在协议缓冲区输出上执行。

编辑

这是原型架构:

message net_endshapes_stat {
  optional fixed32 timestamp = 1;
  optional sint32 shape_id = 2;
  optional sint64 bps_in = 3;
  optional sint64 bps_out = 4;
  optional sint64 total_in = 5;
  optional sint64 total_out = 6;
}
Run Code Online (Sandbox Code Playgroud)