2010-06-24 49 views
1

我们在Amazon S3上放置了数百个图像文件,我们的用户需要将这些文件与其本地目录同步。为了节省存储空间和带宽,我们压缩存储在S3上的文件。将未压缩的本地文件与存储在Amazon S3上的压缩文件进行比较?

在用户端,他们有一个python脚本,每5分钟运行一次以获取当前的文件列表,并下载新的/更新的文件。

我的问题是确定什么是新的或更改下载的最佳方式是什么?

目前我们补充一点,我们与压缩文件,其中包含未压缩文件的MD5值,把一个额外的头......

我们从这样一个文件:

image_file_1.tif 17MB MD5 = xxxx1234 

我们压缩它(与7zip的),并把它放到S3(使用Python /博托):

image_file_1.tif.z 9MB MD5 = yyy3456 x-amz-meta-uncompressedmd5 = xxxx1234 

的问题是,我们不能从S3文件的大名单,其中包括了X-AMZ-元uncompre ssedmd5头文件,无需每个API的额外API(数百/数千个文件的SLOW)。

我们最实际的解决方案是让用户获得文件的完整列表(不带额外的标头),下载本地不存在的文件。如果它确实存在于本地,那么请执行额外的API调用以获取完整头文件,以将本地MD5校验和与x-amz-meta-uncompressedmd5进行比较。

我在想一定有更好的办法。

回答

2

您可以将未压缩映像的MD5散列值包含到压缩文件名中。

所以image_file_1.tif可能成为image_file_1.xxxx1234.tif.z

您的用户蟒蛇文件,该文件不同步,因此将不得不决定是否需要去从S3再次获取文件所需的信息,并可以删除文件名的MD5部分,或者保留它,具体取决于你想要做什么。或者,您也可以在S3上维护一个包含完整文件列表(包括MD5元数据)的单个文件。所以Python脚本只需要获取单个文件,解析并确定要执行的操作。

+0

为了不弄乱文件名,您可以创建另一个带有MD5内容的文件,如image_file_1.tif.md5。 – Pih 2011-04-29 08:48:53