为什么git和mercurial不使用数据库?

时间:2014-01-15 12:56:23

标签: database git version-control mercurial

我找到了{Tortords所说的mail

  

...和Monotone一起玩。真。他们使用真正的数据库"。

并开始感兴趣 - 为什么流行的VCS不使用数据库,并实现自己的数据存储模型来实现相同的目标 - 交易,持久性等?

2 个答案:

答案 0 :(得分:7)

因为数据库通常将其存储和检索方法设计为与VCS系统大致相同的任务。使用特殊的方法来管理数据,可以实现高度优化代码以用于VCS系统的用例。虽然DVCS存储子系统的需求可能肯定会被映射到“真实数据库”的关系模型,为什么会这样? DVCS不需要正式的查询(甚至更少需要SQL),而不是试图提示其数据库子系统的速度更快,它可能只是实现访问其管理的数据的最快和最安全的方式。

请注意,对Monotone's horrid speed的沮丧是 的原因,Linus开始编写Git(他确实在BitMover从Linux开发人员的脚下拉下地毯后首先考虑了现有的DVCS解决方案)。另一个(较不可见)系统使用真实数据库,Fossildoesn't have stellar performance(PDF)。

Git最初是作为实现版本化文件系统的最小工具集,及其作者(Linus Torvalds)最初设想一个完整的VCS将是一个基于的工具在Git上。实际上,Git本身开始快速积累功能,使其成为一个成熟的VCS,这样虽然这些级别的某些分离仍然存在,但它们不是单独的项目。

关于Git存储子系统的另外两个有趣点:

  • 最初它只是将对象存储在单独的文件中。之后,它被教导透明地将最不常访问的对象的存储切换到所谓的“packfiles”,这是一种压缩存档,具有用于快速遍历和访问的内置索引。

    关键是开发人员研究了现有解决方案的性能,并仔细地改进了最能解决手头问题的改进。

  • 正在改进速度方面。例如,去年秋天已经讨论了另一堆加速Git指数(临时区域)的补丁。

    关键是这些改进不仅仅是为了它们而编码,而是基于对实际高工作负载的性能进行研究。

Mercurial采用与Git存储数据不同的方法,采用特殊的存储格式,便于使用差异数据。

因此,使用“真实数据库”的工具似乎可能被归类为这些广泛的群体:

  • “理想的设计”。这是Monotone和Fossil。

    据推测,此类工具的创建者认为使用“真实数据库”可以免费使用其中一个(例如耐久性)。这些好处是非常真实的(并且使用Sqlite进行存储会使备份变得简单)。

    虽然好处是真实的,但在其他VCS系统中实现自定义存储后端的代码确实提供了持久性。请注意,虽然“真实数据库”采用巧妙的技巧来确保他们存储的数据始终是正确和一致的,但不要做任何魔术:一切仍然归结为使用正确的文件操作顺序,fsync()

  • “企业”的思维方式。例如,这是Veracity,它至少声称支持其商业插件中的RDBMS后端。

    企业通常投资于像Oracle或SQL Server这样的“大”数据库,或者像“高调”解决方案那样的管理。使用这种系统的好处在于它通常是专业管理的,提供细粒度的访问控制,备份等。

    使用RDBMS的明显缺点是缺乏分配(“DVCS”中缺少“D”)以及缺乏设置的简易性。


以不同角度查看自定义存储格式的奖励阅读:Keith Packard对Mercurial主要开发人员repository formats mattera short comment on some of his points的原因的看法。

答案 1 :(得分:1)

Git被设计为一个简单的键值数据存储。从这个意义上说,它可以被认为是一个数据库,并且在其核心实现这个数据库是其效率&的原因之一。 flexiblity

作为您问题的替代答案:为什么会这样?