ノート:
これは、ClojureとGitの両方に意図的にタグ付けされています。これは、ソフトウェアのClojure側とGit側の両方でリバースエンジニアリングを行って、動作させることができてうれしいためです。
問題:
私はたくさんのclojureデータ構造を持っています。ディスクに書き出されたとき(prを使用)、平均してそれぞれ約100kbです。私はそのようなファイルを約1000個持っています。これらのファイルは「構造化された」ドキュメントであり、SVGと同等であると考えてください。
現在、これらの各ファイルに多くの小さな更新を行っています(ノードの追加/削除、ノードのプロパティの変更)。(次に、これらのファイルを(書き込み(pr ...))出力します。
最後に、これらすべてのファイルをgitリポジトリに保存しています。
質問:
これらのファイルを保存する効率的な方法があるかどうか疑問に思っています(異なる書き込みではわずかな変更しかありません)-つまり、メモリに1つのドキュメントのコピーが2つある場合、2MBではなく1MB+イプシロンになります( 2つのドキュメントにはわずかな違いしかなく、構造の大部分を共有しています。)
どういうわけかこの事実を利用したいと思います。それがgitに保存されているときに、この類似性を利用してもらいます。
考えられる解決策:
1)clojure側では、ファイル全体を書き出すのではなく、「前のファイルとの[assoc、dissocからなる]diff」だけを書きます。<-これには多くのエンジニアリングが必要です。
2)FS側では、個々のファイルを保存する代わりに、ディレクトリ全体をbzipに入れて、単一の* .bz2としてコミットします(したがって、同様のファイルは同様のブロックを持ちます)。欠点は、gitで*.bz2ファイルを削除することは悪い考えではないように思われることです。