【问题标题】:Azure block blob uncommited update behaviorAzure 块 blob 未提交的更新行为
【发布时间】:2021-01-01 17:57:33
【问题描述】:

我正在编写一个需要同时更新块 blob 的项目。来自微软文档:

未提交的块列表:已使用 Put Block 为 blob 上传但尚未提交的块列表。这些块与 Blob 关联存储在 Azure 中,但尚未构成 Blob 的一部分。

我在

上找不到任何文档
  1. 是否可以/应该对未提交的 blob 执行更新
  2. 写入未提交的 blob 时会发生什么。
  3. 块 blob 从未提交到已提交的时间限制是多长时间,具体取决于您选择的一致性策略。

有人可以提供更多关于未提交块 blob 的并发更新行为的上下文吗?

【问题讨论】:

  • 如何同时更新块 blob?直接使用putblock/putblocklist方法,或者uploadFromFile/uploadText等其他方法?
  • @Ivan Yang 我正在使用 CloudBlockBlob.UploadFromByteArray,您可以在其中设置 AccessCondition。

标签: azure concurrency azure-blob-storage


【解决方案1】:

我用fiddler测试过,最新的blob存储nuget包Microsoft.Azure.Storage.Blob,11.1.0版

当你使用UploadFromByteArray方法上传到azure blob存储时,有一些场景:

1.文件(或字节数组)不大,如10M或100M,则blob没有未提交状态。在这种情况下,默认情况下,并发策略“last writes win”适用。所以在这里,你不必担心未提交的事情。

2.如果文件(或字节数组)很大,比如200M,当你使用UploadFromByteArray方法时,它会分成许多块,块ID唯一。

在这种情况下,当 blob 未提交时(在它调用put block list api 之前),您不能对该 blob 执行另一个写入操作。如果您进行了第 2 次写入操作,则第 2 次写入操作会出现错误消息“指定的 blob 或块内容无效。”。我测试了这个,你可以看到下面的截图:

关于您的第三个问题,根据我的测试,当状态从未提交(使用 put 块 api 时)-> 已提交(使用 put 块列表时)在提琴手的帮助下,我计算的时间很短,不到1s:

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 2020-06-25
    • 2016-02-24
    • 2012-01-01
    • 2021-10-15
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多