注意:
这里标记了Clojure和Git,因为我很乐意在软件的Clojure和Git两侧进行重新设计以使事情顺利。
问题:
我有一堆Clojure数据结构。当写入磁盘(使用pr)时,它们平均每个文件大约100 KB。我有大约1000个这样的文件。这些文件是“结构化”的文档-将它们视为等同于SVG。
现在,我正在对这些文件进行许多小的更新(添加/删除节点,在节点上更改属性)。 (然后我会将这些文件写出(pr ...)。
最后,我将所有这些文件存储在我的git repo中。
问题:
我想知道是否有一种有效的方式来存储这些文件(因为不同的写入只有小的修改)-即如果我在内存中有单个文档的两个副本,则为1MB + epsilon,而不是2MB(因为两个文档只有轻微差异,并共享大部分结构。)
我想以某种方式利用这个事实,并在存储到git时利用这种相似性。
可能考虑的解决方案:
1)在Clojure方面,不要写出整个文件,而是只写出与前一个文件的“差异[包括assoc,dissoc]”。<--这需要大量工程。
2)在FS方面,不要存储单个文件,而是将整个目录放入bzip中,然后将其提交为单个*.bz2(因此,相似的文件将具有相似的块)。缺点是在git中存储*.bz2文件似乎不是一个好主意。