存储许多相似度较大的文本文件

Storing many text files with large similarities

我需要存储数百万个 HTML 文件,每个文件大约 100kB(gzipped 后 30kB)。这些文件属于少数几个组。每个组中的文件都有大的相似块。

我想紧凑地存储这些文件(比单独的 gzip 好得多)并通过密钥检索它们。随着时间的推移,我会插入新文件,包括具有新结构的文件。我对搜索文件不感兴趣。

是否有存储这些文件的现有解决方案?例如,对象存储之上的专门服务。

自定义解决方案有哪些可能的方法?我正在考虑将文件存储在 1000 个 gzip 组中,并在数据库中维护一个索引。

编辑:我会不断添加文件。我还想每隔几周按插入顺序流出所有文件。

如果您不需要定期访问单个文件,您可以执行以下操作:

创建一个 "offset lookup" 文件,列出您的文件名和大小。将所有文件连接成一个巨大的 huge.txt 文件。压缩 huge.txt 并将其与 lookup.txt

一起存储

在极少数需要其中一个文件的情况下,解压缩 huge.txt,使用 lookup.txt 查找文件在 huge.txt 中的起始位置以及文件的字节数,以及从那里提取它。

稍微开箱即用的答案:将文件放在git 存储库中。显然,它将大块相似字节压缩在一起。

您可能希望将您的上千个文件组连接成一个文件以进行 gzip 压缩,如果它们在连接中彼此之间的距离在 32K 字节以内,则应该利用公共块。您也可以尝试 zstd,它具有更大的字典大小,并且肯定能够利用公共块。

您可以查看 gzlog 以快速将新数据附加到 gzip 流。