【问题标题】:Is UploadFromStream function of CloudBlockBlob atomic for sizes less than 64 MB?CloudBlockBlob 的 UploadFromStream 函数对于小于 64 MB 的大小是否是原子的?
【发布时间】:2016-03-15 01:37:53
【问题描述】:
我正在从 BlockBlob 读取文件。文件大小保证小于 64 MB。因此它是单块操作。读取文件后,我正在更改其中的某些部分并通过 CloudBlockBlob 的 UploadFromStream 函数重新上传。我的问题是“CloudBlockBlob 的 UploadFromStream 函数对于小于 64 MB 的大小是否是原子的?”。在写入过程中出现异常后,我是否有可能在 azure 存储上存在损坏的文件?
注意:我已经向 similar question 询问了 AppendBlobs,得到的答案是它是原子的。
【问题讨论】:
标签:
azure
stream
azure-blob-storage
atomic
【解决方案1】:
是的,如果它小于 64MB,它就是原子的,除非您进行并行化,因为并行化会将数据分块。即使对于大于 64MB 的带有块 blob 的数据,也有一个两步提交过程,因此如果在中间上传失败,您仍然处于相对良好的状态。如果我们以 4MB 块的形式上传数据块,我们还必须提交这些块。因此,如果上传失败,我们将不会提交,您所拥有的只是一些额外的未提交块,只能通过获取块列表操作访问(也就是它们未提交的块不可下载)。因此,对于块 blob,中间上传失败通常不会覆盖您现有的数据或损坏它。