我搜索但没有找到令人满意的解决方案。
Minio/S3 没有目录,只有键(带前缀)。到目前为止,一切都很好。
现在我需要更改这些前缀。不是针对单个文件,而是针对一大堆(很多)文件,这些文件可能非常大(实际上没有限制)。
不幸的是,这些存储服务器似乎没有(也不支持)以下概念:
- 重新命名文件
- 移动文件
必须做的是每个文件
- 将文件复制到新的目标位置
- 从旧的源位置删除文件
我给定的设计如下所示:
- 用户上传文件到bucketname/uploads/filename.ext
- 后台进程获取上传的文件,生成更多文件并将它们上传到 bucketname/temp/filename.ext
- 当所有处理完成后,上传的文件和处理的文件被移动到 bucketname/processed/jobid/new-filenames...
在处理对象创建通知时使用路径前缀来区分它是否是上传(开始处理)、临时(检查是否所有文件都已上传)和已处理/作业标识,用于保存它们直到用户删除它们。
想象一下一个任务,其中 1000 个文件必须到达一个新位置(在同一个存储桶中),一个一个地复制并删除它们,这有很大的错误空间。复制操作期间存储空间不足和连接错误,没有任何回滚机会。如果位置不同,就不会变得更容易。
因此,拥有这种旧设计并且没有机会重命名/移动文件:
在不创建新物理文件(不复制已用存储空间)的情况下复制文件是否有任何更改?
任何有经验的云开发人员都可以给我一个提示,在错误情况下如何通过回滚进行批量复制?
如果例如文件 517 of 1000 失败,是否有人使用功能回滚机制实现了类似的功能?复制并删除它们似乎不是要走的路。
目前我正在使用 Minio 服务器和 Minio dotnet 库。但由于它们与 Amazon S3 兼容,因此这种情况也可能发生在 Amazon S3 上。