嘗試使用 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 MBx,4.7 包SX 31

沒有提及文件快取對測試結果的影響。 ZIP 的低速度可能是由於測試啟動的順序不考慮記憶體中的資料快取 - 使用 zip 的測試是使用冷快取啟動的,其餘測試使用熱快取啟動。在正常情況下,Zstandard 的壓縮速度比 zlib 快 3-5 倍,解壓縮速度快 10 倍,壓縮等級高 15-XNUMX%。

新增:在 SQLite 資料庫中以 Blob 形式儲存壓縮檔案的類似想法於 2014 年在 SQLite 開發人員創建的 sqlar archiver 中實現,作為評估在 SQLite 中儲存 Blob 的效率的實驗。 sqlar 使用 zlib 進行壓縮,檔案大小比 ZIP 實用程式大約 2%。

來源: opennet.ru

添加評論