【问题标题】:Creating Blob in Azure Blob Storage with the same name simultaneously同时在 Azure Blob 存储中创建具有相同名称的 Blob
【发布时间】:2015-02-14 17:53:34
【问题描述】:

我的任务是同时将一些图像加载到 blob 存储中。 blob 的名称定义为 blob 的 md5。不同的线程可能会尝试从不同的位置加载相同的文件。

现在我需要知道如何阻止其他线程加载相同的文件,如果首先已经尝试上传此类 blob。

【问题讨论】:

    标签: c# azure blob


    【解决方案1】:

    您可以通过使用乐观并发来做到这一点,而无需租用它。基本上设置一个访问条件,表示此 blob 将不同于具有此名称的 blob 的所有 etag。如果确实存在带有一些 etag 的 blob,则第二次上传将失败。

    var access = AccessCondition.GenerateIfNoneMatchCondition("*");
    await blobRef.UploadFromStreamAsync(stream, access, null, null);
    

    【讨论】:

    • 如果 blob 不存在并且两个进程同时开始上传同一个文件会发生什么?如果我没记错的话,对于这种特定的访问条件,blob 必须存在于存储中。
    • 它肯定不能存在于存储中。我们目前正在使用这种方法。如果我正确理解天蓝色存储,两个进程都会上传数据。最后,上传一个清单,将几个部分组合在一个 blob 名称下。这是一个原子操作,只有一个调用会成功。
    • 谢谢。我从来没有尝试过,所以我很好奇。在您的场景中,您将 blob 拆分为块并上传这些块。您是否在 blob 非常小的情况下尝试过它,因此不会分成几部分?
    • 我假设 API 会为我处理所有这些,但我可能又弄错了。我们也在使用非常小的 blob,它们的工作方式似乎相同。
    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 2018-09-24
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2020-11-12
    • 1970-01-01
    相关资源
    最近更新 更多