c# - 提高 Azure Blob 存储查询速度

标签 c# azure azure-storage azure-blob-storage

我们目前拥有一个 Blob 存储,在同一 Azure 容器下包含数千个文件。我们的文件命名约定是这样的:

存储名称\团队\子团队\文件名

我正在编写一个工具来显示每个特定子团队的文件。该代码获取容器的 Blob 列表,然后尝试将每个 Blob 与正确的 Team\Subteam 匹配(请参阅下面的示例代码)。

这可以工作,但速度非常慢(因为我需要检查所有文件以查看它们是否与特定的子团队匹配)。有什么办法可以提高查询速度吗?我可以想到优化,例如“找到与您正在寻找的团队匹配的第一个文件,然后在找到不同的团队以尽早退出时进行跟踪”,但这会假设 BlobList 已排序并且无法修复最坏的情况。

不幸的是,目前无法将文件拆分到不同的容器下。

这里是示例代码:

IEnumerable<IListBlobItem> blobs = blobContainer.ListBlobs(
    new BlobRequestOptions() 
    {
        UseFlatBlobListing = true, 
        BlobListingDetails = BlobListingDetails.Metadata 
    }).OfType<CloudBlob>();

foreach (var blob in blobs) {
var cloudy = blob as CloudBlob;

string blobTeamId = cloudy.Uri.Segments[2].Trim('/');
if (blobTeamId != teamId)
        continue;

//Do something interesting with the file

最佳答案

第一个解决方案 使用REST接口(interface)就可以传入

http://somwhere.com/mycontainername/?restype=container&comp=list&delimiter=/&prefix=\Team\SubTeam

这将返回一个 xml 文档,其中仅包含子团队“文件夹”中的文件(我知道它不是文件夹,但它看起来像工具中的文件夹)

您可能需要生成共享访问签名才能访问它,您必须在 URL 末尾标记此签名。

check out here

其中显示您可以按 blobname 前缀进行过滤。

第二个解决方案 这可能更接近您想要的。如果您可以使用 azure sdk 1.3 中更新的新存储客户端,那么您现在可以使用

IEnumerable blobList = client.ListBlobsWithPrefix("团队/子团队");

其中 Client 是 CloudBlobClient 的实例。

编辑 - 2013 年 11 月 18 日 看起来resttype不再被支持作为参数,它应该是restype。这一切似乎在周末悄然发生。我已经更改了上面的 url 示例。

关于c# - 提高 Azure Blob 存储查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5958256/

相关文章:

c# - 无法将 mscorlib.dll 添加到 Visual Studio 项目

c# - 通过 Facebook 登录注册用户(未指定用户名/密码)

c# - 为模型创建一个通用的 Save() 方法

Azure 订阅上的 Azure EventGrid - 确定哪个标签已更改

azure - 有没有办法在azure blob存储中按层过滤

python - 将 Python DataFrame 作为 CSV 写入 Azure Blob

c# - 使用 HttpClient 发送帖子,服务器看到一个空的 Json 文件

azure - Azure 应用程序网关中的 SSL 证书错误

Azure表存储触发移动通知

Azure Blob 存储 - 将生产复制到开发