Pack 项目尝试创建一种基于 SQLite 库和 ZSTD(Zstandard)压缩算法的文件归档格式。准备好的原型用 Pascal 编写并在 Apache 2.0 许可证下分发,尽管其工作仅限于读取数据、使用 libzstd 库压缩数据以及执行 SQL 操作来创建存档,但其创建存档的速度优于最常见的存档器。使用数据库 SQLite 将压缩数据添加到文件中。
当压缩包含 81 个文件且总大小为 1.25 GB 的目录时,pack 的速度比 ZIP 实用程序快 112 倍,在 1.3 秒内完成操作,而 ZIP 为 146 秒。 Pack 的存档大小减小了 23%(Pack 为 194 MB,ZIP 为 253 MB)。相比之下,tar 实用程序在不压缩的情况下用 4.7 秒完成打包,而使用 gzip 压缩则在 28.5 秒内完成打包,RAR 归档程序在 27.5 秒内完成测试,7z 在 54.2 秒内完成测试。存档大小为:tar.gz - 214 MB、RAR - 235 MB、7z - 135 MB。值得注意的是,在解包和随机访问文件的速度方面,Pack 也领先于其他归档器,同时消耗更少的 RAM。 ZIP:253 MB,146 秒 7z:135 MB,快 54.2 秒 ZIP 2.7 倍 tar.gz:214 MB,28.5 sx 5.1 RAR:235 MB,27.5 sx 5.3 tar:1345 MB,4.7 sx 31 包:194 MB,1.3 SX 112
没有提及文件缓存对测试结果的影响。 ZIP 的低速度可能是由于测试启动的顺序不考虑内存中的数据缓存 - 使用 zip 的测试是使用冷缓存启动的,其余测试使用热缓存启动。在正常情况下,Zstandard 的压缩速度比 zlib 快 3-5 倍,解压速度快 10 倍,压缩级别高 15-XNUMX%。
添加:在 SQLite 数据库中以 Blob 形式存储压缩文件的类似想法于 2014 年在 SQLite 开发人员创建的 sqlar archiver 中实现,作为评估在 SQLite 中存储 Blob 的效率的实验。 sqlar 使用 zlib 进行压缩,文件大小比 ZIP 实用程序大约 2%。
来源: opennet.ru