幂等复制
概述
在流式复制阶段文件到表时,有可能某些文件已经复制过,因此需要一些方法来避免重复复制文件,使其成为一个 幂等
操作。
在元服务中保存复制到表的阶段文件元信息
每当复制阶段文件到表时,将阶段文件的元信息保存到元服务中:
- 键: 结合
(租户, 数据库, 表, 文件名)
。 - 值: 值必须包含阶段文件的所有元信息,例如
content-length
、etag
、最后修改时间
。
阶段文件元信息的默认过期时间为 64 天。
避免在复制阶段文件到表时重复
使用阶段文件元信息,每当复制阶段文件到表时,遵循以下步骤:
- 首先,获取 想要复制到表中的所有阶段文件的表文件元信息(如果有)。
- 其次,获取所有阶段文件的元信息。
- 第三,比较表文件元信息与阶段文件元信息:
- 如果它们匹配,则忽略此文件,不进行复制。
- 否则,复制阶段文件并更新插入到表阶段文件元信息中。
以上图为例:
- 客户端请求将三个文件(file1, file2, file3)复制到表中。
- 获取 (file1, file2, file3) 的表阶段文件元信息。
- 在元服务中,仅找到 (file1, file3) 阶段文件信息。
- 比较表阶段文件信息与阶段文件信息,发现 file1 未更改,因此在此次复制操作中将忽略 file1,而 (file2, file3) 将被复制。
- 复制新文件后,(file2, file3) 阶段文件信息将被保存到表文件信息中。