2016-05-10 82 views
1

我有相當大的BLOB文件,我需要閱讀和攝取最新的幾行信息。有沒有一個API(C#)會從最後讀取文件,直到我想停止,這樣我的應用程序就可以獲取可能的最小信息?是否可以從最終讀取Azure Blob存儲中的文本文件?

+0

一個簡短的問題....你能告訴我們,如果插入blob每個記錄是固定長度?換句話說,每行是固定大小還是可以變化?在blob文件中,您的記錄是否有一些結構? –

+0

有結構,但記錄長度可能不同(即某些字段是可變長度) – Igorek

回答

2

恭敬地,我不同意答案。雖然Page Blobs是爲隨機訪問而設計的,但它們是爲了不同的目的一起使用的。

我也同意Block Blobs是爲順序訪問而設計的,但是沒有什麼能阻止你從中間讀取blob的內容。通過支持塊blob中的範圍讀取,您完全可以讀取塊blob的部分內容。

舉一個例子,假設您有一個10 MB的blob(blob size = 10485760 bytes)。現在你想從底部讀取blob。假設您想每次讀取1MB塊,您可以調用DownloadRangeToByteArrayDownloadRangeToStream(或其異步變體),並指定9437184(9MB標記)作爲起始範圍,並指定10485759(10MB標記)作爲結束範圍。閱讀內容,看看你是否找到你要找的東西。如果沒有,您可以將blob的內容從8MB讀到9MB並繼續處理。

3

您應該已經知道BlockBlobs是專爲sequential訪問設計的,而Page Blobs專爲random訪問而設計。 AppendBlobs for Append操作,在你的情況下,這不是我們正在尋找的。

我相信你的解決方案是將你的斑點保存爲PageBlob而不是默認的BlockBlob。一旦你有一個頁面Blob,你有很好的方法,如GetPageRangesAsync,它返回一個IEnbumerable PageRange。後者重寫ToString()方法給你頁面的字符串內容。

相關問題