以最快的方式归档一堆文件

以最快的方式归档一堆文件

我正在实现一个 torrent 下载和存档系统。我想下载一个 torrent 文件(其中包含几个小文件)然后将其存档。我的磁盘性能很差。所以我想要一种高效的文件存档方法。

我有几种选择:

1.在普通磁盘/文件系统上下载文件,然后使用普通 unixtar命令对其进行 TAR。

2.创建空白的 TAR 存档,然后使用 以写入模式挂载它archivemount,然后开始在挂载的路径中下载 torrent。

3.类似于选项2但使用 ZIP 文件而不是 tar。

4.因为我想通过 Web 浏览器传递文件:实现一个软件/脚本来动态地将文件夹打包成 TAR。(几年前我写了一个 Python 脚本(uWsgi/Nginx)来做这件事。但是由于 tar 需要对每个文件进行校验,所以性能很差)

5.找到一个可以直接写入 TAR/Zip 文件的 torrent 客户端。(可能性很小)

我该考虑哪种方式?

谢谢。

答案1

如果磁盘确实是您的真正瓶颈,那么性能最佳的可能仍然是 4。这样您就不必花费宝贵的 IOPS 将文件从一个地方复制到另一个地方。

此外,选项 4 实际上是允许客户端在服务器下载完成后立即下载 torrent 的唯一选项,这意味着客户端实际上可以更快地获取其数据。此外,通过这种方式,您可以选择轻松允许用户下载单个文件(非常简单,因为它们只是放在您的文件系统上)。

我会调查为什么 tar 的性能如此糟糕。我真的怀疑你的问题出在校验和上,因为据我所知,校验和甚至不在数据上。有什么原因你不能直接将 GNU tar 的输出通过管道传输到 Web 浏览器,而不是编写自己的 tar 打包程序?

一个挑战是使用这种方法向客户端提供正确的内容长度。如果您不关心这一点,您可以忽略发送此信息,那么您的客户端就不会看到下载的百分比计数器。这可能并不重要,具体取决于您的应用程序。

相关内容