Gor*_*ski 26 .net linq lazy-loading azure-storage-blobs azure-sdk-.net
我使用Microsoft.WindowsAzure.StorageClient来操作Azure存储上的blob.我已经到了用户需要列出上传文件并修改/删除它们的地步.由于一个容器中有许多文件,因此查询azure存储服务以仅返回所需文件的最佳方法是什么.此外,我希望能够只返回特定数量的blob,以便我可以实现分页.
CloudBlobContainer中有一个名为ListBlobs的方法,但它似乎正在返回容器中的所有blob.这对我不起作用.
我在这个主题上搜索了很多,找不到任何有用的东西.此链接仅显示基础知识.
---------编辑
我在下面的回答并不是懒惰地检索blob,而是检索容器中的所有blob,然后过滤结果.目前还没有解决方案懒惰地检索blob.
Gor*_*ski 33
该方法ListBlobs检索该容器中的斑点懒惰地.因此,您可以针对该方法编写查询,直到您循环(或使用ToList或其他方法实现对象)列表时才执行该查询.
只有少数例子,事情会更加清晰.对于那些不知道如何获取Azure存储帐户中容器的引用的人,我建议使用本教程.
按上次修改日期排序并获取第2页(每页10个blob):
blobContainer.ListBlobs().OfType<CloudBlob>()
.OrderByDescending(b=>b.Properties.LastModified).Skip(10).Take(10);
Run Code Online (Sandbox Code Playgroud)
获取特定类型的文件.如果您在上传时设置了ContentType(我强烈建议您这样做),这将有效:
blobContainer.ListBlobs().OfType<CloudBlob>()
.Where(b=>b.Properties.ContentType.StartsWith("image"));
Run Code Online (Sandbox Code Playgroud)
假设您使用扩展名设置文件名,获取.jpg文件并按文件大小排序:
blobContainer.ListBlobs().OfType<CloudBlob>()
.Where(b=>b.Name.EndsWith(".jpg")).OrderByDescending(b=>b.Properties.Length);
Run Code Online (Sandbox Code Playgroud)
最后,在您告诉它之前,查询将不会被执行:
var blobs = blobContainer.ListBlobs().OfType<CloudBlob>()
.Where(b=>b.Properties.ContentType.StartsWith("image"));
foreach(var b in blobs) //This line will call the service,
//execute the query against it and
//return the desired files
{
// do something with each file. Variable b is of type CloudBlob
}
Run Code Online (Sandbox Code Playgroud)
Nat*_*nSr 19
我对Windows Azure blob存储的认识是它很简单.就像极其简陋的骨头一样.您应该仅使用它来存储文档和关联的元数据,然后按ID检索单个blob.
我最近将一个应用程序从MongoDB迁移到Windows Azure blob存储.来自MongoDB,我期待一系列不同的有效方法来检索文档.迁移之后,我现在依靠传统的RDBMS和ElasticSearch以更可搜索的方式存储blob信息.
Windows Azure blob存储如此受限制真的太糟糕了.我希望将来能够看到更多增强的搜索功能(例如,通过元数据,属性,blob名称正则表达式等进行搜索)此外,基于map/reduce的索引将非常棒.如果他们做了这些事情,微软有机会将很多人从其他文档存储系统转换过来.
| 归档时间: |
|
| 查看次数: |
20742 次 |
| 最近记录: |