gpt4 book ai didi

git - 在 Git Repo 中增量保存 Clojure 数据结构

转载 作者:太空狗 更新时间:2023-10-29 14:01:07 24 4
gpt4 key购买 nike

注意事项:

这是故意同时标记 Clojure 和 Git 的,因为我很高兴在软件的 Clojure 和 Git 端进行重新设计以使事情正常进行。

问题:

我有一堆 clojure 数据结构。当写入磁盘(使用 pr)时,它们平均每个大约 100 kb。我有大约 1000 个这样的文件。这些文件是“结构化”文档——将它们视为等同于 SVG。

现在,我正在对这些文件中的每一个进行大量小更新(添加/删除节点、更改节点属性)。 (然后我(write (pr ...))将这些文件输出。

最后,我将所有这些文件存储在我的 git 存储库中。

问题:

我想知道是否有一种有效的方法来存储这些文件(因为不同的写入只有很小的修改)——也就是说,如果我在内存中有一个文档的两个副本,它将是 1MB + epsilon,而不是2MB(因为这两个文档只有细微差别,并且大部分结构相同。)

我想以某种方式利用这个事实,当它被存储到 git 中时,可以利用这种相似性。

可能考虑的解决方案:

1) 在 clojure 方面,不是写出整个文件,而是只写一个“与前一个文件的差异 [由 assoc、dissoc 组成]”。 <-- 这需要大量工程。

2) 在 FS 方面,不是存储单个文件,而是将整个目录放入 bzip,然后将其作为单个 *.bz2 提交(因此,相似的文件将有相似的 block )。缺点是在 git 中存储 *.bz2 文件似乎不是一个坏主意。

最佳答案

您是否考虑过使用 Datomic而不是 Git?

您所做的听起来像是 Datomic 的一个大致理想的用例,它本质上是一个 Clojure 风格的“事实图”数据库——这几乎正是您的结构化数据的样子。

Datomic 以与 Clojure 的不可变数据结构非常相似的方式存储数据,即它使用结构共享来确保小的更改只需要少量的额外空间。它以类似于 git 的方式保存整个历史记录——甚至有一个工具可以在 Datomic 中模拟 git repos (codeq)

关于git - 在 Git Repo 中增量保存 Clojure 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13785878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com