我正在开发一个使用Git作为数据库的应用程序。我当前的方法是调用git
shell命令,以便在应用程序发生更改时构造新的提交。这很简单,但一个很大的缺点是它不允许对数据库进行任何并发写入:两个线程不能同时构造一个提交,因为只有一个HEAD
,一个index
,一份工作副本。
但是,由于提交,树和blob都是内容寻址的,我认为应该可以同时构建所有这些内容。对此推荐的方法是什么?也许:
git add
,git commit
等,它们明确指定要使用的其他HEAD
和index
文件。据我所知,这些事情并不存在。git clone
以获取每个并发用户的全新工作副本。这非常昂贵。答案 0 :(得分:2)
自2014年以来,已经提出了一些倡议来提议一个“类似Git的”数据库:
最新的是liquidata-inc/dolt:“为数据而战”
Dolt 是一个关系数据库,即具有表,您可以对这些表执行SQL查询。
它也具有在表单元格级别运行的版本控制原语。因此,Dolt是一个支持细粒度的按值版本控制的数据库,所有对数据和架构的更改都存储在提交日志中。
之前,采用不同的方法:SOM-Research/Gitana(2017年)。
请参见A conceptual and database schema for Git via Gitana(Valerio Cosentino)的“ Twitter”
更接近您正在寻找的是src-d/gitbase
G语言存储库的SQL接口,用G语言编写
它可用于执行有关Git历史记录和代码本身Universal AST的SQL查询。
所有三个项目都可以包含有关如何将Git用于这种数据库用法的想法。
还要注意,最新版本的Git(包括即将发布的2020年第二季度Git 2.27)已经改善了git push --atomic
。
同一Git 2.27正在跨多个存储库实现两阶段提交样式的原子ref更新:请参见“ Is it possible to manage multiple repositories coherently?”。
答案 1 :(得分:0)
另一个可能的选择是每个并发用户创建(和签出)一个新分支并提交到该分支,然后定期将分支合并到主分支。
但这可能会有一些问题: