gpt4 book ai didi

Perl - 管道 gunzip 输出到文件::ReadBackwards

转载 作者:行者123 更新时间:2023-12-02 06:26:50 24 4
gpt4 key购买 nike

我有一个 Perl 项目(CGI 脚本,在 Apache 上运行),它以前一直使用 gunzip 和 tac(将 gunzip 管道传输到 tac,然后将其管道传输到文件句柄)以完成其工作负载,即处理大的、平坦的文本文件,有时每个文件的大小约为 10GB 或更多。更具体地说,在我的用例中,这些文件需要即时解压缩,有时也需要向后读取(有时两者都是必需的 - 主要是为了速度)。

当我开始这个项目时,我考虑使用 File::ReadBackwards 但出于性能原因决定使用 tac。在昨晚对一个稍微相关的话题进行了一些讨论并提出了一些尝试将处理完全保留在 Perl 中的建议之后,我决定再给 File::ReadBackwards 一次机会,看看它在这种工作负载下的表现如何.

一些初步测试表明它实际上可能与 tac 相当,甚至可能更好。但是,到目前为止,我只能在未压缩的文件上进行测试。但它现在引起了我的兴趣,所以我想看看我是否可以让它也能处理压缩文件。

现在我很确定我可以将一个文件解压缩到另一个 文件,然后向后读取它,但我认为这会带来糟糕的性能。特别是因为出于帮助性能的确切原因,用户可以选择将结果限制为 X 数量,所以我不想每次提取任何行时都必须处理/解压缩整个文件从它出来。理想情况下,我希望能够做我现在所做的事情,即解压缩并即时向后读取,并能够在需要时在达到配额后立即退出。

所以,我的困境是,如果可能的话,我需要找到一种方法将 gunzip 的输出通过管道传输到 File::ReadBackwards

附带说明一下,我也愿意给 IO::Uncompress::Gunzip 一个机会(将解压缩性能与普通的管道 gunzip 过程进行比较),要么是为了提高性能(这会让我感到惊讶)或为了方便/能够将输出通过管道传输到 File::ReadBackwards(我觉得这更有可能)。

这里有人有什么想法吗?非常感谢任何建议。

最佳答案

你不能。 File::ReadBackwards需要可搜索的句柄(即普通文件,而不是管道或套接字)。

要使用 File::ReadBackwards,您必须首先将输出发送到一个命名的临时文件(您可以使用 File::Temp 创建)。

关于Perl - 管道 gunzip 输出到文件::ReadBackwards,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57796510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com