2016-05-10 2 views
1

私は読んだり、最新のほんの数行の情報だけを取り込む必要があるかなり大きなBLOBファイルを持っています。私のアプリが最小限の情報を取り込めるように、終了するまでファイルを読み込むAPI(C#)はありますか?Azure Blobストレージのテキストファイルを最後から読み取ることはできますか?

+0

簡単な質問....ブロブに挿入された各レコードが固定長であるかどうかを教えてください。言い換えれば、各行は固定サイズであるか、それとも変化する可能性がありますか? blobファイルにあなたのレコードに構造体がありますか? –

+0

構造体がありますが、レコード長が異なる可能性があります(つまり、特定のフィールドは可変長です) – Igorek

答えて

2

確かに、私は答えに同意しません。ページ・ブロブはランダム・アクセス用に設計されているのは事実ですが、それらはすべて異なる目的のために用意されています。

私はまた、しかし、何も途中からブロックブロブの内容を読んでからあなたを防ぐことはありません、ブロックブロブは、シーケンシャルアクセス用に設計されていることに同意するものとします。ブロックBLOBの範囲読み取りをサポートすることで、ブロックBLOBの部分的な内容を完全に読み取ることができます。

あなたの例を与えるために、あなたは10メガバイトのブロブ(Blobサイズ= 10485760バイト)を持っていると仮定しましょう。今度は、下からブロブを読みたいと思っています。一度に1MBのチャンクを読み込みたい場合は、開始範囲に9437184(9MBマーカー)、終了範囲に10485759(10MBマーカー)を指定して、DownloadRangeToStream(またはその非同期バリアント)を呼び出し、9437184内容を読んで、探しているものが見つかったら参照してください。そうでない場合は、blobの内容を8MBから9MBに読み込んで処理を続行できます。

3

ブロックブロッブはアクセス用に設計されていますが、ページブロブはrandom用に設計されています。あなたのケースでは私たちが探しているものではないAppend操作のためのAppendBlobs。

あなたの解決策は、デフォルト値BlockBlobではなく、PageBlobとしてブロブを保存することだと思います。ページブロブを作成したら、GetPageRangesAsyncのような素晴らしいメソッドがあり、IEnbumerableをPageRangeに戻します。後者はToString()メソッドをオーバーライドして、ページの文字列の内容を取得します。

関連する問題