在AppendBlob原子上追加操作吗?

时间:2016-02-09 13:52:59

标签: azure atomic azure-storage-blobs

我使用append blob存储大型二进制文件。我已经将文件分成几部分(每个部分都小于4 MB)并附加它们以使其再次完整。如果在此过程中附加操作失败,那么此失败的追加尝试是否有文件遗留?或者这个追加操作是原子的吗?

2 个答案:

答案 0 :(得分:1)

使用Append Blob,只要您将块写入blob,它就会被提交并更改blob的大小。因此,在您的场景中,假设您已将源文件分成10个部分并附加这些部分。让我们进一步假设第1 - 第4部分成功,第5部分失败,然后第6 - 第10部分成功。在这种情况下,您将有一个部分1-4和6-10的损坏blob。因为在Append Blob中,内容总是附加到blob的现有内容中,所以无法为第5部分插入正确的数据。

考虑到这种情况,我不建议使用Append Blobs 。 Append Blob的用例绝对不是这个。 我建议您使用Block Blob 。使用Block Blob,您将第1部分 - 第4部分,然后第5部分失败,然后整个上传操作将失败。使用块Blob,Azure存储可以将上载但未提交的块保留14天。因此,如果您想从第5部分恢复上传,您将从Azure获取有关未提交的块的信息,然后从第5部分重新启动上载。上传剩余部分后,您可以指示Azure将这些块放在一起(使用Put Block List操作)来创建blob。

答案 1 :(得分:1)

如果存储服务返回失败代码,则尝试失败的任何内容都不会存在。这假设“尝试”意味着单个存储服务调用(例如,附加4MB块)。