尝试使用 SQLite 作为归档文件的容器

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

添加评论