数字序列的压缩算法(long / int)

时间:2017-12-07 13:12:28

标签: java data-structures struct byte

我有一对数字序列。每对包含2个号码longint。对按{1}值的降序排序。它可以表示为int。 (此地图按值按降序排序)

有超过10亿的Map<Long, Integer>,每个Map最多可包含40.000对。但通常不超过10.000这个数据结构是B-Tree索引的一部分。该索引需要占用太多磁盘空间

我正在寻找一种压缩对序列的方法来减少磁盘空间量。 Mapint需要4 + 8 = 12个字节。但是大多数long值都较小,可以放在2-3个字节中。大多数int值可以适合4-5个字节。

我在考虑其中一个选项

  1. 使用像这样的特殊整数压缩库(https://github.com/lemire/JavaFastPFOR)。由Lucene用于存储其索引。但是我不仅要处理int,而且我的数据没有排序。
  2. 朴素的态度。每对使用1个字节作为头,以4位解码存储int所需的字节数,接下来的4位用于存储long的字节数。例如,如果我有2个小数字&lt; 255,我可以将整个对放在3个字节,标题,1个字节用于int和1个字节用于long。

  3. 也许通常的gzip压缩可能比天真的方法更好。

0 个答案:

没有答案