我们在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进行比较。
我认为必须有更好的方法。
答案 0 :(得分:2)
您可以将未压缩图像的MD5哈希包含在压缩文件名中。
因此image_file_1.tif可能会变成image_file_1.xxxx1234.tif.z
执行同步的用户python文件因此将具有确定是否需要从S3再次获取文件所需的信息,并且可以删除文件名的MD5部分,或者根据什么来维护它你想做的。
或者,您还可以在S3上维护包含完整文件列表(包括MD5元数据)的单个文件。因此,python脚本只需要获取该单个文件,解析该文件,然后决定该做什么。