对于小于 64 MB 的大小,CloudBlockBlob 的 UploadFromStream 函数是否具有原子性?

Nur*_*mir 1 atomic stream azure azure-blob-storage

我正在从 BlockBlob 读取文件。文件大小保证小于 64 MB。因此它是单块操作。读取文件后,我更改了其中的某些部分,并通过 CloudBlockBlob 的 UploadFromStream 函数重新上传。我的问题是“对于小于 64 MB 的大小,CloudBlockBlob 的 UploadFromStream 函数是否是原子的?”。在写入过程中发生异常后,是否有可能在天蓝色存储上有损坏的文件?

注意:我对 AppendBlobs 提出了类似的问题,并得到了它是原子的答案。

Emi*_*ner 5

是的,如果小于 64MB,它就是原子的,除非您进行并行化,因为并行化会将数据分块。即使对于大于 64MB 的块 blob 数据,也有一个两步提交过程,因此如果上传在中间失败,您仍然处于相对良好的状态。如果我们上传 4MB 块的数据块,我们还必须提交这些块。因此,如果上传失败,我们将不会提交,您将拥有的只是一些额外的未提交块,只能通过获取块列表操作访问(也就是说,它们未提交的块不可下载)。因此,对于块 blob 上传,中间失败通常不会覆盖现有数据或损坏它。