我有一项服务,可以生成大型数据集,其中只有少数文件实际发生变化,其余文件保持不变(但仍在数据文件夹中)。我们需要保留数据集的每个版本,但我想使用对象版本控制来降低云存档存储的成本。如果我上传一个包含大量旧文件和少量新文件的新数据集,存储桶是否只会生成已更改对象的新版本?文件夹中是否会有相同的文件集,其中一些文件具有多个版本?
答案1
为存储桶启用对象版本控制。启用后,每次对象的现有版本被覆盖或删除时,Cloud Storage 都会创建对象的归档版本。
虽然可能没有明确这么说,每次对象的实时版本被覆盖时包括使用完全相同的有效负载覆盖对象的情况。
为了避免这种情况,您需要使用避免覆盖未更改文件的实用程序来上传对象。 gsutil rsync
出现要执行此操作,但请阅读文档并观察其行为,因为虽然它可以与时间戳或校验和同步,但它似乎更喜欢时间戳,因此如果本地文件相同但看起来较新,可能不会做正确的事情。
答案2
每次你上传一个文件 S3 会创建一个新版本.即使文件有相同的内容。
为了解决这个问题你必须:
- 产生本地保存您的新数据集。
- 列表来自 S3 存储桶的所有文件 - 这将为您提供尺寸和电子标签这恰好是文件的md5 总和。
- 比较带有存储桶列表的本地文件 - 如果尺寸不同或收到的 ETag 与计算出的 ETag 不同md5 总和这显然是一个不同的文件->上传它。
aws s3 sync
或者,使用像或这样的工具s3cmd sync
从命令行或 shell 脚本执行上述操作。
希望有帮助:)