是否有比Git更好的数据库(具有可序列化、不可变、版本化树)?

11

想象一下Git背后的数据结构。它类似于可并发持久化数据结构,只不过使用哈希引用而不是传统的指针。

我需要Git的数据结构,但没有任何工作树和索引内容。每个分支将跟踪少量其他本地分支,而会发生数千次提交和合并,每分钟在不同的线程上。拉取操作将每秒钟发生一次。

libgit2jgit之间,我可以使用Git的数据存储子系统。

但我是否正在使用正确的工具?是否有一个具有Git功能但更快/更并发/可扩展/不会出现阻抗不匹配的数据库?内存缓存写入将非常有帮助。

任务:

一个协作编辑的游戏。每个玩家都有自己的分支,他们对游戏世界所做的每个更改仅适用于他们的版本。受信任的用户将更改合并回“主”分支。数据和源代码经常绑定在一起,需要相同的分支和合并功能。


我并没有真正关注过版本控制系统如何处理它们的数据,但是你有没有看过Mercurial如何处理它?据我所知,它的工作方式很像你正在寻找的。我可能对此有所误解(我没有太多使用Mercurial的经验),但这值得研究。你至少可以更接近你的目标。 - Shauna
每秒数千个合并?! - bdonlan
@Shauna - Mercurial和Git具有非常相似的数据结构,但是出于设计原因,Mercurial似乎没有API - Lilith River
@bdonlan,是的,尽管通常它们应该是快进。 - Lilith River
几乎三个了,有任何消息吗? - Bart Van Remortele
显示剩余3条评论
4个回答

3

Datomic提供持久化数据存储和内置时间概念。

核心开发人员甚至创建了一个示例应用程序, 将git存储库实现到数据库中。


1

尽管git的索引/工作副本部分可以很容易地分离出来,但git并不适用于在单台机器上每秒数千次的合并或提交。核心代码大部分甚至不是线程安全的。您可能需要为数据创建一些新系统(当然,您仍然可以使用git进行编码,并且在必要时还可以查看生成git提交以表示您的数据等)。


那么libgit2不是线程安全的吗?考虑到它的数据结构,Git似乎本质上是线程安全的。 - Lilith River
不行!它有缓存结构等不支持多线程的特性。毕竟,核心的git代码只是设计为单线程方式运行作为命令行工具。 - bdonlan
Snap!知道有没有像Git一样的数据库? - Lilith River
对于你所说的变异速率,这可能是一个需要自己编写代码的情况。你肯定需要一种更快的方式来跟踪快进,而不是每次都遍历历史记录,并且每秒数千次的变异需要在进程内完成。 - bdonlan
1
libgit2 在其[https://github.com/libgit2/libgit2 主页]中表示它是线程安全的。也许它通过某种方式添加了同步机制? - Lilith River
我认为这个幻灯片很清晰:https://speakerdeck.com/bkeepers/git-the-nosql-database - Lilith River

1

看看github在项目之间和跨项目协作方面的工作方式。关键在于许多用户选择复制、使用和复制其他人的文件内容,以便github核心库可以进行聚合。

如果您没有这种重用,则git的哲学可能不符合您的需求。挑战在于识别您的阻抗匹配点并加强宣传。许多人实际上不理解为什么git有效而“正常”的VCS无效(也就是说,旧式VCS最初是在什么情况下有效的?—— RMS Titanic的高岭土和亚麻绘画提供了线索)。git之所以有效,是因为它从现代计算机能力开始。


实际上,这个项目涉及的子树重用比Github多得多,是数百万倍的因素。 - Lilith River

1

JGit 可以使用 JDBC、HBase、Cassandra、Bigtable 等等,它是线程安全的。


你认为它能够适当地处理这种滥用吗?你会建议使用哪种数据存储? - Lilith River
针对你所需处理的负载,我建议首先考虑使用Bigtable。Bigtable是谷歌用于存储搜索数据的一种技术,因此它肯定可以处理你所要执行的交易负载。 - Shauna
我认为你应该亲自尝试一下,我相信常规存储仍然是最快的。同时,参与JGit的开发也会对你有所帮助。 - robinr
@Shauna,你不需要成为谷歌才能使用Bigtable吗? - pqnet
@pqnet - 对于原始发布时的BigTable,也许是正确的选择,尽管还有其他几个类似的选项(包括一些来自Apache)。然而,Google现在已经开始将其作为云解决方案提供(类似于AWS),使其成为与HBase等不同的独立选项。 - Shauna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接