概要
あるWebページを定期的にクロールして、HTMLにいつどんな変化があったのかを保存しておきたいニーズがあり、gitを使う場合と、生HTMLを保存しておく(後からdiff
コマンドで差分を見る)場合でどれぐらい保存効率に差があるのか知りたかったため、計測しました。
計測方法
https://github.com/showwin/git_benchmark/blob/master/git_disk_efficiency.py を使って検証しました。ほぼ同じだが、一部が改変されているHTML10個 を用意して、それらを5000ファイルに対してランダムで書き込み、10万回のコミットをしたときのディレクトリの容量を計測しました。(1ファイル当たり平均20回変更が発生していることになります)
生HTML方式は10種類のHTMLを10万回書き出した時のデータ容量を計測しました。
結果
git: 2.1GB
生HTML: 1.5GB
なんとgitで差分を管理する方が効率が悪いことが判明しました…
今回は1ファイルあたり12~13KBのHTMLで、変更部分は2文字〜4行ぐらいの小さな変更ばかりだったのですが、それでもこの結果になるんですね。。
独自で差分管理ファイルシステムを作ったほうが良いのかな… 差分の保存に特化したデータストアをご存知の方はぜひ教えてください…!
追記
git gc
というコマンドの存在を知り(doc)適用してみたところ、842MBまで軽量化できました🎉
git gc後: 842MB
生HTML: 1.5GB
なのでgc前と比べると1/3程度になり、生HTMLと比べても半分ぐらいまで減らせました。