简单的版本控制系统或版本控制文件系统或版本控制数据库

Jak*_*kob 5 version-control database-versioning

我正在寻找用于大量记录或文件的简单版本控制系统(约5000万,未压缩的约100GB,已压缩的约20MB)。这些文件每个只有几千字节,并且具有唯一的ID,所以我不在乎它们是否存储在平面结构(表,目录...)中。平均而言,每条记录每月更改一次,但是大多数更改的差异小于千字节,因此应该易于压缩版本。但是,对于每个版本只有一个条目的朴素数据库将增长得太快。我需要执行以下操作:

  • 基本的CRUD操作:创建,读取,更新,删除
  • 快速列出最近的变化
  • 快速列出特定记录的最新更改
  • 查询给定时间内的变化
  • 查询给定用户的更改(每个编辑都与某个用户ID关联,并且可以选择将提交消息作为注释)
  • 对于写操作,必须有一个提交钩子来验证和拒绝格式错误的记录。

简而言之,我正在寻找用于简单记录或文件的类似Wiki的软件。

我考虑了可能的解决方案:

  • 将文件放在版本控制系统中。这为我提供了复制和许多可用的访问工具,因此这是我的首选解决方案。但是对于像git这样的分布式系统来说,数据量太大。是否有人使用Subversion成功完成类似任务?

  • 在数据库或文件系统中实现我自己的版本控制。我可能只需要存储压缩的记录和差异,就可以进行更多的工作并学到一些东西。如果只是为了娱乐,这将是我的首选解决方案。

  • 使用版本控制文件系统。这将使设置,复制和访问更加困难。可能我需要在文件系统上方实现自己的访问API。

  • 使用版本控制数据库系统。你能建议一些吗?

  • 使用其他现有数据存储进行版本控制(MediaWiki?,Amazon Cloud Drive?,...)

显然有很多路径。其他人成功使用了哪些路径来获取相似或更大数量的数据?

And*_*ett 0

如果您不反对在客户端上拥有每个文件的原始副本(如果您正在考虑 svn,我认为这是可以的),那么 git 可能是解决您问题的一个很好的解决方案。底层存储库存储将使用文件之间以及版本之间的二进制差异,因此您应该在那里拥有接近最佳的压缩。

使用裸存储库和一些脚本,您甚至可以不必签出当前版本:可以从命令行获取对象,并且您可以创建新的提交而无需签出。