Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 如果文件存储在云中,Dropbox等服务如何实现增量编码?_Amazon S3_Cloud_Rsync_Dropbox - Fatal编程技术网

Amazon s3 如果文件存储在云中,Dropbox等服务如何实现增量编码?

Amazon s3 如果文件存储在云中,Dropbox等服务如何实现增量编码?,amazon-s3,cloud,rsync,dropbox,Amazon S3,Cloud,Rsync,Dropbox,Dropbox声称,在同步过程中,仅将更改的部分文件传输回主服务器,这显然是一个很好的功能,但它们如何对存储在AmazonS3云中的文件执行更改?例如,假设用户桌面上的30页文档只包含对第4页的更改。Dropbox现在同步表示更改的块,如果它们存储的文件在云中,后端会发生什么?这是否意味着他们必须将存储在S3中的30页文档下载到他们的服务器,然后替换代表第4页的块,然后上传回云?我怀疑情况会是这样,因为那样会有点低效。我可以想到的另一个选项是,如果AmazonS3提供了基于字节范围的云存储文件更

Dropbox声称,在同步过程中,仅将更改的部分文件传输回主服务器,这显然是一个很好的功能,但它们如何对存储在AmazonS3云中的文件执行更改?例如,假设用户桌面上的30页文档只包含对第4页的更改。Dropbox现在同步表示更改的块,如果它们存储的文件在云中,后端会发生什么?这是否意味着他们必须将存储在S3中的30页文档下载到他们的服务器,然后替换代表第4页的块,然后上传回云?我怀疑情况会是这样,因为那样会有点低效。我可以想到的另一个选项是,如果AmazonS3提供了基于字节范围的云存储文件更新,那么例如,从字节100-200向文件X发出PUT请求,这将用PUT请求的值替换从100到200的所有字节。所以我很好奇,使用亚马逊等其他云服务的公司是如何实现这种同步的


谢谢

因为S3和类似的存储不提供文件系统功能,任何假装存储文件和目录的东西都需要模拟文件系统。在执行此操作时,文件通常被拆分为特定大小的页面,其中每个页面都存储在存储器中的单独文件中。这样,更改的块只需要上载一页(例如),而不需要上载整个文件。我应该注意,对于像office文档这样的文件,如果文件大小发生变化,这种方法可能会出错——例如,如果在开头插入一个页面或删除一个页面,那么整个文件都会发生变化,需要重新上传完整的文件。我们没有特别分析Dropbox是如何完成他的工作的,我只是描述了常见的场景。还有不同的“补丁算法”,可以在本地创建补丁(如果Dropbox在缓存中有较旧的本地副本),然后应用到服务器上的一个或多个块

有几种同步工具可以通过线路传输增量,如rsync、rdiff、rdiff backup等。对于与S3的双向同步,有付费服务,例如。对于纯客户端同步,可以考虑使用类似的工具(这是许多人用来推出应用程序更新的工具)

另一种方法是使用tar-ball目录,生成增量文件(使用rdiff或xdelta3),并使用时间戳作为密钥的一部分来上载增量文件。要同步,您只需在客户端执行以下两项检查:

  • 您拥有来自S3的所有增量文件。如果没有,则拉取它们并应用它们以生成最新的备份状态
  • 上次备份状态与当前目录对应。如果没有,生成一个新的增量文件并推送到S3
  • 这里需要考虑的因素是客户端至少100%的额外空间利用率。但如果需要,这种方法将帮助您恢复更改