1

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

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

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

目前我们添加了一个额外的头文件,我们把它放在包含未压缩文件的 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(对于数百/数千个文件来说速度很慢)。

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

我想一定有更好的方法。

4

1 回答 1

2

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

所以 image_file_1.tif 可以变成 image_file_1.xxxx1234.tif.z

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

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

于 2011-04-29T08:26:24.633 回答