ディスク容量を節約するために、diffファイルから元のファイルを再構築します。

ディスク容量を節約するために、diffファイルから元のファイルを再構築します。

10GBのテキストファイルが毎日ダウンロードされ、約2億行あり、そのうち約1%が翌日に変更されます。毎日ファイルをバックアップとして保存したいのですが、CPUを使用してディスク容量を節約したいと思います。

編集する これまでに見つけた最良の方法は、diffファイルを維持しpatch(@ Simonが提案したように)1月1日に大きなファイルをダウンロードしてから、diff 01jan.txt 02jan.txt > 02jan.diff; rm 02jan.txt毎月毎月diffを実行して書き換えることです。など。

もっと良い方法がありますか?

答え1

これは、Git、Bazaar、Subversionなどのバージョン管理ソフトウェアが行うことです(いくつかのアドオンを含む)。したがって、ワークフローは次のようになります。

  • 毎月初めに新しいリポジトリを作成します。
  • 新しいファイルをリポジトリにコピーし、毎日変更をコミットします。
  • (オプション)先月ストアを削除します。

私のファイルは毎月大幅に変更されず、毎月1つのリポジトリのみを使用します。

答え2

diffあなたがプログラムについて述べたように、私はあなたがテキストファイルについて話していると安全に推測できます。

2億行のうち10GBと言われたように、平均行長が50個の単一ファイルのようですが大丈夫です。

  • この場合、バージョン管理システムは正しい選択です。

問題に適したバージョン管理システムを見つける必要があります。あなたの情報を想定してみましょう。

  • 毎日新しいファイルバージョンがあり、コンテンツの1%が毎日変わります。

ファイルデルタを保持せずに代わりにgzip -4圧縮ファイル全体を保存することをgit考慮すると、aprox。 2〜3週間後、gitは予想よりも多くのディスク容量を消費します。したがって、gitはあなたの状況に適したツールではありません。

履歴を処理するためにdiffを使用する他のバージョン管理システムがあります。

  • RCS はリバース diff を保存し、解決策になることができますが、256 KB を超えるファイルの場合、RCS は遅くなります。最新バージョンを必要とせず、以前のバージョンが必要な場合、RCS はさらに時間がかかります。

  • SCCSはdiffに基づいていますが、いわゆるweave formatすべてのバージョンを保存形式を同時に効率的に保存し、同じ固定時間ですべてのバージョンを検索できます。

SCCS は最初の 10 GB 履歴ファイルを生成します。あなたの場合は、新しいバージョンごとに1%増加するので、履歴ファイルにaproxを使用したいと思います。 1年後36.5GB。 GITの場合、1年後のディスク容量の要件は100〜400 GBになると予想しています。

SCCSはオープンソースで、以下から検索できます。

http://sccs.sourceforge.net

SCCSは1972年(43年)から維持管理されており、成熟したと見なすことができます。 ;-) 注: より高速なバージョン管理システムはわかりません。

答え3

「パッチ」を見ると、これはカーネルソースコードをダウンロードするときにほぼ毎日直面するのと同じ問題です。これは、元のファイルを差分ファイルに更新したり、以前のバージョンに戻すために使用できます。

関連情報