首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机存取压缩是常用的?

随机存取压缩是常用的?
EN

Stack Overflow用户
提问于 2021-07-16 16:42:27
回答 1查看 359关注 0票数 1

是否有用于随机访问压缩、只读或读写的标准库或unix工具?通过随机访问,我的意思是你可以读或写任何部分的压缩内容。

有很多流媒体工具(gzip、xz等)和一些基于归档成员的工具(zip),但我只知道关于随机访问的学术工作。档案的主要问题是,它们通常分别压缩每个文件(没有跨文件的去重复)。

有点与压缩格式,良好的支持档案中的随机访问?有关,但重新询问,因为这是10年后。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-16 17:50:38

对于问题的“读取”部分,您可以为大型压缩文件建立索引,该索引将创建一组进入压缩数据的入口点。这些入口点的数量和密度决定了在获得所要寻找的数据之前需要解压缩的数据数量,从而决定了随机访问的速度。请注意,所有压缩数据都可以随机访问,因为开始时始终有一个入口点。你只要减压直到得到你想要的。因此,随机读取不是能力问题,而是速度问题。

zran.c提供了一个为gzip或zlib流构建这样一个索引的示例。对于任何压缩数据格式,您都可以这样做。此外,皮格斯将使用--independent选项创建带有标记入口点的gzip流。bzip2格式已经为每个块标记了入口点,其中条目是几百K字节的未压缩数据。

至于“还是写”,这是一个完全不同的问题。我不知道有一种格式可以方便对压缩数据的随机写入。通常,要获得任何级别的合理压缩,压缩数据取决于它之前的所有数据。因此,如果您在中间写入,则需要解压缩和重新压缩后面的所有数据。

要实现真正的随机写入访问,格式必须解决两个问题。第一种方法是像bzip2或pigz的独立选项那样,对压缩后的数据进行分块,以打破对以前数据的依赖。如果不经常这样做,对压缩比的影响就很小。然后你可以取一个块,解压它,做你的随机写入,然后再压缩它。块越小,这种随机写入访问就越快,但您必须与较小块的压缩比影响进行权衡。

要解决的第二个问题是文件系统所具有的问题,即允许分割和非顺序顺序。您希望避免重写压缩数据中的所有后续块,因为新的随机写入的块比较小或更大。如果您确实重写了,您将返回到随机写入,所用的时间与压缩流的大小成正比。解决方案是用压缩的数据格式编写您自己的小文件系统,这允许在流中不按顺序排列块,并使流中存在未使用的空白。我知道没有这样的格式,但原则上是可以实现的。

如果将写入访问限制在附加(例如压缩日志的情况),则存在现有格式的解决方案。gzlog是附加到gzip流的一个示例,允许高效地追加少量数据,在每个追加之后留下一个有效的gzip流。

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

https://stackoverflow.com/questions/68412559

复制
相关文章

相似问题

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