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

Version control 简单版本控制系统或版本控制文件系统或版本控制数据库,version-control,database-versioning,Version Control,Database Versioning,我正在寻找一个用于大量记录或文件的简单版本控制系统(约5000万条,~100GB未打包,~20MB打包)。每个文件只有几千字节,并且有唯一的ID,所以我不介意它们是否存储在平面结构(表、目录…)中。平均而言,每个记录每月更改一次,但大多数更改的差异小于1 KB,因此压缩版本应该很容易。然而,一个幼稚的数据库,每个版本有一个条目,增长太快了。我需要以下操作: 基本CRUD操作:创建、读取、更新、删除 最近更改的快速列表 快速列出特定记录最近的更改 查询给定时间段内的更改 查询给定用户所做的更改(

我正在寻找一个用于大量记录或文件的简单版本控制系统(约5000万条,~100GB未打包,~20MB打包)。每个文件只有几千字节,并且有唯一的ID,所以我不介意它们是否存储在平面结构(表、目录…)中。平均而言,每个记录每月更改一次,但大多数更改的差异小于1 KB,因此压缩版本应该很容易。然而,一个幼稚的数据库,每个版本有一个条目,增长太快了。我需要以下操作:

  • 基本CRUD操作:创建、读取、更新、删除
  • 最近更改的快速列表
  • 快速列出特定记录最近的更改
  • 查询给定时间段内的更改
  • 查询给定用户所做的更改(每次编辑都与某个用户id关联,并且可以选择将提交消息作为注释)
  • 对于写操作,必须有一个提交钩子来验证和拒绝格式错误的记录
简言之,我正在寻找一个类似Wiki的简单记录或文件软件

我想到了可能的解决办法:

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

  • 在数据库或文件系统中实施我自己的版本控制。我可能只需要存储压缩的记录和差异,会有更多的工作和学习。如果只是为了好玩,这将是我的首选解决方案

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

  • 使用版本控制数据库系统。你能推荐一些吗

  • 通过版本控制(MediaWiki?、Amazon Cloud Drive?、…)使用其他一些现有数据存储


显然,有很多途径。其他人成功地使用了哪些路径来处理类似或更大数量的数据?

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


通过简单的repo和一些脚本,您甚至可以不签出当前版本:可以从命令行获得对象,并且您可以创建新的提交,而无需签出。

由于Subversion是您的“转到”选项,您尝试过吗?它应该扩展到一个这样大小的数据库,并将采用每个版本的(二进制)差异。主要的问题是,它将每个文件的“原始”副本存储在一个工作副本中,从而有效地将客户机上的数据库大小增加了一倍。改进了工作拷贝元数据存储,这可能会稍微改进一些。