【问题标题】:Find a Blob in Azure Container在 Azure 容器中查找 Blob
【发布时间】:2013-07-12 04:26:03
【问题描述】:

我在一个容器中有成千上万个 Blob,类似于

  • A/Temp/A001-1.log
  • A/Temp/A001-2.log
  • A/Temp/A001-3.log
  • B/Tmp/B001-1.log
  • B/Tmp/B001-2.log
  • B/Tmp/B002-1.log

现在我的问题是我想找到名称中包含 A001 的 Blob。我了解 ListBlobsWithPrefix 以某些文本开头查找 Blob,这对我来说不是这种情况。 ListBlobs 会将所有 blob 带到我的代码中,然后我必须搜索那个。有什么方法可以让我得到我正在寻找的 blob。

【问题讨论】:

    标签: azure azure-blob-storage


    【解决方案1】:

    除了蛮力之外,真的没有简单的方法可以在容器中搜索特定的 blob(或具有名称模式的 blob 集)。正如您所猜测的那样,名称前缀在这种情况下也无济于事。

    我通常建议人们将他们的可搜索元数据保存在其他地方(可能是 SQL DB,也可能是 MongoDB,只要它提供了他们需要的搜索功能就无关紧要),并且该数据存储包含参考链接到确切的斑点。 Blob 名称本身也可以作为可搜索属性之一存储在元数据中。

    另外:一旦您进入“容器中的数千个 blob”,您会发现提取 blob 名称需要一段时间(我想您也看到了)。容器当然可以容纳任意数量的 blob,但在这种情况下,您确实希望根据其他一些元数据直接访问它们,而不是通过名称列表进行枚举。

    【讨论】:

    • 我知道将可搜索的元数据分开是有道理的,但这是一个正在被带到云端的现有应用程序。我想我们在这里真的没有太多选择,对吧?
    • 嗯……总有缓存。如果您使用的是 web/worker,只需创建一个缓存角色(或在您的 web 或 worker 中使用 co-located 缓存)。在您阅读名称时,以每个容器(或每个前缀或其他方式)为基础缓存名称。假设所有名称都适合缓存,这可能是您的解决方法。
    • 嗯,这是我不知道的。我将不得不研究它。无论如何,这对我没有帮助,因为我的应用程序是本地应用程序,而我的数据只是在 Blob 中。因此,它是想要联系 Blob 以获取其数据的本地应用程序。
    【解决方案2】:

    如果前缀已知,则构造 blob 名称,而不是搜索,然后尝试下载 blob。如果 blob 未找到,您将收到 404 not found 异常。

    【讨论】:

      【解决方案3】:

      截至今天,在少数地区提供了一项预览功能,以支持 Blob 存储索引:

      https://docs.microsoft.com/en-us/azure/storage/blobs/storage-manage-find-blobs?tabs=azure-portal

      希望他们尽快提供,

      问候

      【讨论】:

        猜你喜欢
        • 2019-03-25
        • 2020-05-15
        • 1970-01-01
        • 1970-01-01
        • 2016-09-21
        • 2020-09-03
        • 2022-12-17
        • 2020-01-12
        相关资源
        最近更新 更多