笔记:
这是故意标记为 Clojure 和 Git 的,因为我很高兴在软件的 Clojure 和 Git 端重新设计以使事情正常运行。
问题:
我有一堆 clojure 数据结构。当写入磁盘(使用 pr)时,它们平均每个大约 100 kb。我有大约 1000 个这样的文件。这些文件是“结构化”文档——将它们视为等同于 SVG。
现在,我正在对这些文件中的每一个进行大量小更新(添加/删除节点,更改节点上的属性)。(然后我(写(pr ...))这些文件出来。
最后,我将所有这些文件存储在我的 git 存储库中。
问题:
我想知道是否有一种有效的方法来存储这些文件(因为不同的写入只有很小的修改)——也就是说,如果我在内存中有一个文档的两个副本,它将是 1MB + epsilon,而不是 2MB(因为这两个文档只有细微的差别,并且共享大部分结构。)
我想以某种方式利用这个事实,当它被存储到 git 中时,是否可以利用这种相似性。
可能考虑的解决方案:
1)在clojure方面,不要写出整个文件,而是只写一个“与前一个文件的差异[由assoc,dissoc]组成”。<-- 这需要大量的工程。
2) 在 FS 方面,不是存储单个文件,而是将整个目录放入 bzip,然后将其作为单个 *.bz2 提交(因此,相似的文件将具有相似的块)。不利的一面是,在 git 中查找 *.bz2 文件似乎不是一个坏主意。