当订单保存无关紧要时,uint64s序列的最佳压缩方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当订单保存无关紧要时,uint64s序列的最佳压缩方法相关的知识,希望对你有一定的参考价值。

我正在存储10,000 uint64s的数组。这些值是哈希值,因此非常均匀地分布在整个64位空间中,这使得它们不适合压缩(zip只能节省大约3%的成本)。

但是,值的顺序并不重要。我可以使用这些额外的知识来制作更有效的压缩程序吗?一个直接的想法是按顺序对它们进行排序,然后对它们进行bucketize,例如“下一个x值都有前缀a1b2c3”或其他东西。这肯定可以改善拉链,但我可以做得更好吗?谢谢

答案

您可以获得的理论上最好的好处是log2(10000!)位,这是初始80K字节中的大约15K字节。减少不到20%。

如果你真的想尝试挤出大部分内容,可以尝试按排序顺序压缩连续哈希之间的差异。第一个哈希将按原样发送,然后是9,999个差异。我将每个64位差异的高12位分离成不同的块,并用标准的无损压缩器压缩它。每个散列差异的低52位将基本上是噪声,因此在不尝试压缩它的情况下发送它。

您可以使用数字12来查看最适合压缩的内容。也许11或13会更好。

以上是关于当订单保存无关紧要时,uint64s序列的最佳压缩方法的主要内容,如果未能解决你的问题,请参考以下文章

微服务架构 - 在订单无关紧要时通过服务传递消息

使用 Laravel 4+ 从 jQuery/ajax 保存序列化的可排序数据

将最佳 uint8_t 位图转换为 8 x 32 位 SIMD“布尔”向量

增强SAP生产订单下达保存时更新批次特性值

增强SAP生产订单下达保存时更新批次特性值

使用 FFMPEG 将 RGB 图像序列保存到 .mp4 时遇到问题