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

问题描述:

我正在寻找一个用于大量记录或文件(大约5000万,大约100GB解压缩,大约20MB打包)的简单版本控制系统。这些文件每个只有几千字节,并且具有唯一的ID,所以我不介意它们是否存储在扁平结构(表格,目录...)中。平均而言,每条记录每月更改一次,但大多数更改的差异小于千字节,因此压缩版本应该很容易。但是,每个版本只有一个条目的天真数据库会变得太快。我需要以下操作:简单的版本控制系统或版本控制文件系统或版本控制数据库

  • 基本的CRUD操作:创建,读取,更新,删除的近期变化
  • 快速上市
  • 的最近一个特定记录
  • 查询的变化快速清单中的变化给定的时间段
  • 查询给定用户的更改(每个编辑都与某个用户ID关联,并且可选地具有提交消息作为注释)
  • 对于写入操作,必须有一个提交挂钩到va盖掉并拒绝不合格的记录。

总之,我正在寻找一个简单的记录或文件的维基软件。

我想到了可能的解决方案:

  • 将文件放入一个版本控制系统。这给了我复制和许多可用的访问工具,所以这是我的首选解决方案。但是对于像git这样的分布式系统来说,数据量太大了。有人使用Subversion进行类似的任务吗?

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

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

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

  • 使用一些其他现有的数据存储与版本(链接到MediaWiki?亚马逊云驱动器,......)

显然有很多pathes。其他人已经使用哪些方法成功获取类似或更大量的数据?

+0

既然Subversion是你的首选,你试过了吗?它应该缩放到一个大小的数据库,并且会采用每个修订版本的(二进制)差异。主要的问题是它将每个文件的“原始”副本存储在工作副本中,实际上使_client_上的数据库大小加倍。 [svn 1.7](http://subversion.apache.org/docs/release-notes/1.7.html#wc-ng)改进了工作副本元数据存储,这可能会改善一点。 – 2011-06-11 20:18:28

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

通过裸回购和一些脚本,您甚至可以避免检出当前修订:可以从命令行使用对象,并且可以在不结算的情况下创建新的提交。