首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对文件进行排序以优化压缩效率

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

Stack Overflow用户
提问于 2014-06-10 20:07:47
回答 3查看 1.5K关注 0票数 4

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

数据文件包含多行由制表符分隔的文本,行的顺序并不重要。

我们注意到,当我们按照第一个字段对文件进行排序时,压缩文件的大小要小得多,大概是因为该列的副本相邻。然而,排序一个大文件是缓慢的,没有真正的理由,它需要排序,除了它碰巧改善压缩。第一列中的内容和后续列中的内容之间也没有任何关系。可以对压缩更小的行进行排序,或者有一种算法可以类似地提高压缩性能,但需要更少的运行时间。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-10 22:45:52

以下是一些建议:

  1. 将文件分割成较小的批并对其进行排序。排序多个小数据集比对单个大块进行排序要快。您还可以轻松地以这种方式并行化工作。
  2. 用不同的压缩算法进行实验。不同的算法具有不同的吞吐量和比率。你对这两个维度的帕累托边界上的算法感兴趣。
  3. 使用更大的字典大小。这允许压缩器引用过去更多的数据。

请注意,排序很重要,无论您选择什么算法和字典大小,因为对旧数据的引用往往使用更多的位。此外,按时间维度排序往往会将来自类似数据分布的行组合在一起。例如,堆栈溢出在夜间比白天具有更多的bot流量。可能,HTTP中的UserAgent字段值分布随一天中的时间变化很大。

票数 1
EN

Stack Overflow用户

发布于 2014-06-10 21:47:51

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

代码语言:javascript
复制
Name, Favourite drink, Favourite language, Favourite algorithm

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

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

票数 0
EN

Stack Overflow用户

发布于 2014-06-22 23:36:49

只是:只需尝试使用不同的压缩格式。我们发现,对于我们的应用程序(压缩的SQLite db),LZMA / 7z压缩比压缩要好4倍。只是说,在你实现任何东西之前。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24149980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档