gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:52:06 24 4
gpt4 key购买 nike

我们目前拥有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com