将未压缩的本地文件与存储在Amazon S3上的压缩文件进行比较?

时间:2010-06-24 18:00:52

标签: amazon-s3 md5 boto

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

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

我的问题是确定新内容或更改内容的最佳方法是什么?

目前我们添加了一个额外的头文件,我们将其与压缩文件放在一起,其中包含未压缩文件的MD5值...

我们从这样的文件开始:

image_file_1.tif   17MB    MD5 = xxxx1234

我们压缩它(使用7zip)并将其放入S3(使用Python / Boto):

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

问题是我们无法从S3中获取包含x-amz-meta-uncompressedmd5标头的大型文件列表,而没有针对每个标头的额外API(数百/数千个文件的SLOW)。

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

我认为必须有更好的方法。

1 个答案:

答案 0 :(得分:2)

您可以将未压缩图像的MD5哈希包含在压缩文件名中。

因此image_file_1.tif可能会变成image_file_1.xxxx1234.tif.z

执行同步的用户python文件因此将具有确定是否需要从S3再次获取文件所需的信息,并且可以删除文件名的MD5部分,或者根据什么来维护它你想做的。

或者,您还可以在S3上维护包含完整文件列表(包括MD5元数据)的单个文件。因此,python脚本只需要获取该单个文件,解析该文件,然后决定该做什么。