kro*_*lth 7 c# azure azure-storage azure-storage-blobs
我们目前在同一个Azure容器下有一个包含数千个文件的blob存储.我们的文件命名约定是这样的:
StorageName \队伍\子团队\文件名
我正在编写一个工具,显示每个特定子团队的文件.代码获取Container的blob列表,然后为每个尝试与正确的Team\Subteam匹配的blob列表(请参阅下面的示例代码).
这有效但速度极慢(因为我需要浏览所有文件以查看它们是否与特定的子团队匹配).有没有办法提高查询的速度?我能想到的优化,比如"寻找球队相匹配的第一个文件,你正在寻找,然后跟踪,当你找到一个不同的团队退出早期",但会假定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
Run Code Online (Sandbox Code Playgroud)
Dav*_*ele 18
第一个解决方案 使用REST界面,您可以传入
http://somwhere.com/mycontainername/?restype=container&comp=list&delimiter=/&prefix=\Team\SubTeam
Run Code Online (Sandbox Code Playgroud)
这将返回一个xml doc,只包含子团队"Folder"中的文件(我知道它不是一个文件夹,但它看起来像工具中的一个)
您可能需要生成共享访问签名才能访问它,您必须在URL的末尾标记它.
它显示您可以按blobname前缀过滤.
第二种解决方案 这可能更接近你想要的.如果您可以使用在azure sdk 1.3中更新的新存储客户端,那么您现在可以使用
IEnumerable blobList = client.ListBlobsWithPrefix("Team/SubTeam");
客户端是CloudBlobClient的实例.
编辑 - 2013年11月18日 它似乎不再支持resttype作为参数,它应该是restype.这似乎在周末悄然发生.我已经更改了上面的url示例.
| 归档时间: |
|
| 查看次数: |
5353 次 |
| 最近记录: |