我使用附加的blob来存储一个大的二进制文件。我将文件分成几个部分(每个部分都小于4MB),并将其追加以使其再次完整。如果追加操作在此过程中失败,此失败的追加尝试在文件上是否有任何残留?还是这个附加操作是原子的?
发布于 2016-02-11 09:45:37
如果存储服务返回失败代码,则失败的尝试不会留下任何保留。这假设“尝试”意味着单个存储服务调用(例如追加4MB块)。
发布于 2016-02-09 06:13:23
使用Append Blob
时,只要向blob写入块,就会提交blob并更改blob的大小。因此,在您的场景中,假设您已经将源文件分成10部分,并附加了这些部分。让我们进一步假设第1至第4部分成功,第5部分失败,然后第6至第10部分成功。在本例中,将有一个损坏的blob,第1-4部分和第6-10部分。因为在附加的Blob中,内容总是附加到blob的现有内容中,所以您无法为第5部分插入正确的数据。
考虑到这种情况,我不建议使用Append Blobs
. 附件Blob的用例绝对不是这样的。我建议在这个Block Blob
中使用。对于块块,您放置第1-第4部分,然后第5部分失败,然后整个上传操作将失败。使用块块,Azure存储将上传但未提交的块保存14天。因此,如果您想从第5部分继续上传,您将从Azure获得有关未提交块的信息,然后从第5部分重新启动您的上传。上传完剩余的部分后,您可以指示Azure将这些块放在一起(使用put阻止列表操作)来创建blob。
https://stackoverflow.com/questions/35293815
复制