对文件进行排序以优化压缩效率

时间:2014-06-10 20:07:48

标签: algorithm sorting compression

我们有一些大型数据文件被连接,压缩,然后发送到另一台服务器。压缩减少了到目标服务器的传输时间,因此我们可以在较短的时间内获得文件越小越好。这是一个对时间敏感的过程。

数据文件包含多行制表符分隔的文本,行的顺序无关紧要。

我们注意到,当我们按第一个字段对文件进行排序时,压缩文件的大小要小得多,大概是因为该列的副本彼此相邻。但是,对大文件进行排序的速度很慢,而且除了改进压缩之外,没有任何理由需要进行排序。第一列中的内容与后续列中的内容之间也没有任何关系。可能存在一些压缩甚至更小的行的排序,或者可能存在可以类似地提高压缩性能但需要更少时间运行的算法。

我可以使用哪种方法重新排序行以优化相邻行之间的相似性并提高压缩性能?

3 个答案:

答案 0 :(得分:1)

以下是一些建议:

  1. 将文件拆分为较小的批次并对其进行排序。对多个小数据集进行排序比对单个大块进行排序更快。您也可以通过这种方式轻松地并行化工作。
  2. 尝试不同的压缩算法。不同的算法具有不同的吞吐量和比率您对这两个维度的帕累托边界上的算法感兴趣。
  3. 使用更大的字典大小。这允许压缩器引用过去的数据。
  4. 请注意,无论您选择何种算法和字典大小,排序都很重要,因为对旧数据的引用往往会使用更多位。此外,按时间维度排序倾向于将来自类似数据分布的行组合在一起。例如,Stack Overflow在夜间的机器人流量比白天多。可能,HTTP日志中的UserAgent字段值分布随时间变化很大。

答案 1 :(得分:0)

如果列包含不同类型的数据,例如

Name, Favourite drink, Favourite language, Favourite algorithm

然后您可能会发现转置数据(例如将行更改为列)将改善压缩,因为对于每个新项目,zip算法只需要编码哪个项目是最喜欢的,而不是哪个项目和哪个类别。

另一方面,如果一个单词同样可能出现在任何列中,那么这种方法不太可能有用。

答案 2 :(得分:0)

Just in:只需尝试使用不同的压缩格式。我们发现我们的应用程序(压缩的SQLite数据库)LZMA / 7z比zip压缩了大约4倍。在你实施任何事情之前说。