Version control 需要在在线备份工具中实施版本控制

Version control 需要在在线备份工具中实施版本控制,version-control,ftp,backup,Version Control,Ftp,Backup,我正在开发一个应用程序,可以自动或手动在线备份电脑中的文件和文件夹。目前,我在服务器上只保留文件的最新版本。现在,我必须实施版本控制,以便只有更改才能传输到在线服务器,并且用户必须能够在备份服务器上下载文件的任何可用版本 我需要为此执行重复数据消除。伙计们,虽然我可以使用固定的块大小来执行它,但在每个版本备份中都会面临传输包含CRC信息的文件的开销 我从未从事过这种技术,因此缺乏经验。我急切地想知道是否有任何可行的方法可以在应用程序中嵌入此功能而不会带来太多痛苦。是否有任何第三方工具可以帮助执行

我正在开发一个应用程序,可以自动或手动在线备份电脑中的文件和文件夹。目前,我在服务器上只保留文件的最新版本。现在,我必须实施版本控制,以便只有更改才能传输到在线服务器,并且用户必须能够在备份服务器上下载文件的任何可用版本

我需要为此执行重复数据消除。伙计们,虽然我可以使用固定的块大小来执行它,但在每个版本备份中都会面临传输包含CRC信息的文件的开销

我从未从事过这种技术,因此缺乏经验。我急切地想知道是否有任何可行的方法可以在应用程序中嵌入此功能而不会带来太多痛苦。是否有任何第三方工具可以帮助执行相同的操作?请告诉我好吗

注意:我正在使用FTP协议传输数据。

有一个名为的程序执行类似的操作,但它在文件系统块而不是文件上运行。也可能是感兴趣的

您将需要跟踪具有多个版本的大量块,以及它们如何适应原始文件的不同版本,因此您将需要某种数据库来跟踪此信息,并需要一种高效的查询方法来确定给定文件中需要传输的块。还请注意,如果使用简单的阻塞和差异方案,则在文件开头添加某些内容将导致所有块都是“新的”


做好这一点将是非常复杂的。我强烈建议你彻底研究已经可用的解决方案,如果你决定要自己写的话,仔细考虑他们的设计的好处。我提出了一个解决方案,在这个解决方案中,我按块考虑文件,对于每个版本,我都有一个结构(跟踪块的可用性,以便可以从以前的版本中访问它们)+每个块的CRC编译列表,以便下载此列表并与当前版本的列表进行比较,找出差异。我需要确认我的方法是否正确,以及这些方法是如何在现实世界中实现的?我确信它可以工作,但并不理想。正如我所说的,某些类型的更改将导致您传输整个文件(可能是GB)以进行单字节更改。根据块的大小,服务器上可能有数千或数百万个重复块(每个块都是一个文件?),这将使目录列表毫无用处地变慢。我将查看rsync页面上的“增量编码”链接。这允许您只发送文件中实际更改的部分。为了提高效率,已经做了很多工作。dump和rsync的代码也可以查看。我已经开始研究rsync代码。你怎么认为?这会有帮助吗?Rsync非常高效和可靠。如果它能适应你的需要,那就太好了。我想说的是,FTP基本上也是一个过时的协议,你最好还是做点别的。在目前的状态下,我们不能后退一步,继续寻找一些解决方案,如何保持FTP作为基本协议。我可以使用RDIFF方法(根据我们的使用定制)来找出差异,只需要传输差异。我们目前面临的问题是:差异总是使用文件的基本版本生成,而不是以前的版本。对于以前的版本,我们面临着计算每个版本的签名并将其随差异一起发送的开销。因此,我们只是困惑于我们是在正确的轨道上做这件事,还是只是错过了。?