我们有一些大型数据文件正在连接、压缩,然后发送到另一台服务器。压缩减少了到目标服务器的传输时间,因此我们可以在较短的时间内获得文件越小,越好。这是一个高度时间敏感的过程。
数据文件包含多行由制表符分隔的文本,行的顺序并不重要。
我们注意到,当我们按照第一个字段对文件进行排序时,压缩文件的大小要小得多,大概是因为该列的副本相邻。然而,排序一个大文件是缓慢的,没有真正的理由,它需要排序,除了它碰巧改善压缩。第一列中的内容和后续列中的内容之间也没有任何关系。可以对压缩更小的行进行排序,或者有一种算法可以类似地提高压缩性能,但需要更少的运行时间。
我可以使用什么方法来重新排序行,以优化相邻行之间的相似性并提高压缩性能?
发布于 2014-06-10 22:45:52
以下是一些建议:
请注意,排序很重要,无论您选择什么算法和字典大小,因为对旧数据的引用往往使用更多的位。此外,按时间维度排序往往会将来自类似数据分布的行组合在一起。例如,堆栈溢出在夜间比白天具有更多的bot流量。可能,HTTP中的UserAgent字段值分布随一天中的时间变化很大。
发布于 2014-06-10 21:47:51
如果列包含不同类型的数据,例如
Name, Favourite drink, Favourite language, Favourite algorithm然后,您可能会发现,转换数据(例如,将行转换为列)将改善压缩,因为对于每个新项,zip算法只需编码哪些项最受欢迎,而不是同时编码哪个项和哪个类别。
另一方面,如果一个词同样可能出现在任何列中,那么这种方法就不太可能有任何用处。
发布于 2014-06-22 23:36:49
只是:只需尝试使用不同的压缩格式。我们发现,对于我们的应用程序(压缩的SQLite db),LZMA / 7z压缩比压缩要好4倍。只是说,在你实现任何东西之前。
https://stackoverflow.com/questions/24149980
复制相似问题