ファイルをアーカイブするためのコンテナとして SQLite を使用する実験

Pack プロジェクトは、SQLite ライブラリと ZSTD (Zstandard) 圧縮アルゴリズムに基づいてファイル アーカイブ形式を作成しようとしました。 Pascal で書かれ、Apache 2.0 ライセンスの下で配布された、準備されたプロトタイプは、その作業がデータの読み取り、libzstd ライブラリによる圧縮、および SQL 操作の実行に限定されていたにもかかわらず、アーカイブの作成速度において最も一般的なアーカイバーよりも優れていました。データベース SQLite を使用して圧縮データをファイルに追加します。

合計サイズ 81 GB の 1.25 ファイルを含むディレクトリを圧縮する場合、pack は ZIP ユーティリティよりも 112 倍高速で、操作が 1.3 秒で完了するのに対し、ZIP では 146 秒かかりました。パックのアーカイブ サイズは 23% 小さくなりました (パックの場合は 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 SX112

テスト結果に対するファイル キャッシュの影響については言及されていません。おそらく、ZIP の速度が遅いのは、メモリ内のデータ キャッシュを考慮せずにテストが起動された順序が原因です。ZIP を使用したテストはコールド キャッシュで起動され、残りのテストはウォーム キャッシュで起動されました。通常の条件下では、Zstandard は zlib よりも 3 ~ 5 倍速い圧縮速度と 10 倍速い解凍速度を示し、圧縮レベルは 15 ~ XNUMX% 高くなります。

追加: SQLite データベースに BLOB の形式で圧縮ファイルを保存するという同様のアイデアは、SQLite での BLOB の保存効率を評価する実験として SQLite 開発者によって作成された sqlar アーカイバで 2014 年に実装されました。 sqlar は圧縮に zlib を使用し、ファイル サイズは ZIP ユーティリティより約 2% 大きくなります。

出所: オープンネット.ru

コメントを追加します