2016-06-29 13 views
0

Azureでブロブ名のリストを取得しようとしています。この操作を大幅に高速化する方法を探しています。所与のサブフォルダ内で、ブロブの数は150,000エレメントを超えることができる。ブロブのファイル名は、実際に取得する必要があるエンコードされたIDですが、メタデータまたはメタデータの1つのフィールドだけをクエリする方法があれば、それを何らかのメタデータとして格納できます。Azureブロブ名を問い合わせるための高速なメカニズム

私がいることを、次のような単純なものを見つけています:Azureの中でホストされたVM上で動作しているとき

var blobList = container.ListBlobs(null, false); 

は私のデスクトップから実行するように60秒の上向きに取り、典型的には約15秒でできます。これらの時間は、空のコンテナ内の125kブロブのテストに基づいており、アップロードされてから数時間経過しているため、確かに「解決」する時間がありました。

私は複数のバリエーションを試してみましたが、ListBlobsSegmentedを使ってみましたが、関数が必要のない多くの追加情報を返すので、実際には役に立ちません。私はちょうどblobの名前が必要なので、現在保存されているものとそうでないものを見るために、エンコードされたIDを取得できます。

ブロブ名のクエリとエンコードされたIDの抽出には多少の時間がかかるため、1秒未満にするとうれしいです。ファイルをローカルに保存すると、数ミリ秒でファイルのリスト全体を取得できますが、これはオプションではないため、Azureストレージを使用する必要があります。

利用可能なブロブを特定するのにかかる時間を短縮できると思うのは、特定のフォルダに追加または削除されたブロブの名前を追跡し、別のブロブに保存することだけです。次に、そのフォルダ内のブロブ名を知る必要があるとき、ListBlobを使用するのではなく、メタデータでBLOBを読み込みます。同様の方法でAzure Tableストレージを使用することもあると思いますが、コンテナ内の特定のフォルダに関する情報をキャッシュするように強制されているようです。

これを行うにはより良い方法がありますか、これは一般的に、1つのフォルダに数十万個のブロブがある場合に人々がやっていることですか?

+0

このタイプの質問は、以前と同様の変形([this one](http://stackoverflow.com/questions/8158452/is-it-better-to-have-many-small-azure -storage-blob-containers-each-with-some-bl/8160317#8160317))。ブロブのストレージはデータベースシステムではないため、ブロブのメタデータやバルクのリストを見る以外に、検索のための機能はありません。ブロブのメタデータを格納するために、ある種のデータベースを使用して検索可能なコンテンツを作成し、特定のBLOB URIとBLOBに直接アクセスできるようにする必要があります。 –

+0

私はその質問を十数個の他の変種と一緒に見ていました。そのため、私はそれらを個別にリストアップするのを邪魔しませんでした。私が解決しようとしている問題は、彼らの名前を得ることです。これは主張することができるのは検索の形ですが、実際はそうではありません。私はちょうど名前のリストがほしいです。しかし、同じフォルダにある125kのアイテムでは、2.6MBのデータしか保存されませんが、この関数は10MBのデータを返します。私が必要とするのは彼らの名前だけなので、それは次のようなものです。他のすべてのプロパティや名前なしで名前を取得することは可能ですか? –

答えて

0

前述のとおり、Azure Blobストレージはストレージシステムであり、コンテンツのインデックス作成には役立ちません。 Azure Search IndexerはAzure Blobストレージにアップロードされたコンテンツのインデックスを作成します。https://azure.microsoft.com/en-us/documentation/articles/search-howto-indexing-azure-blob-storage/を参照してください。Azure Searchでサポートされているすべての機能を実行できます。検索、ページング、並べ替えなどがあります。これが役立つことを願っています。

関連する問題