是否可以从最后读取 Azure Blob 存储中的文本文件?
Is it possible to read text files from Azure Blob storage from the end?
我有相当大的 blob 文件,我只需要从中读取和提取最新的几行信息。是否有 API (C#) 会从末尾读取文件直到我想停止,以便我的应用程序尽可能摄取最少的信息?
您应该已经知道 BlockBlob 是为 sequential
访问而设计的,而页面 Blob 是为 random
访问而设计的。以及用于追加操作的 AppendBlobs,在您的情况下,这不是我们要找的。
我相信您的解决方案是将 blob 保存为 PageBlob
而不是默认的 BlockBlob
。一旦你有了一个页面 Blob,你就有了很好的方法,比如 GetPageRangesAsync which returns an IEnbumerable of PageRange. The latter overrides ToString() 方法来为你提供页面的字符串内容。
恕我不同意这个答案。虽然页面 Blob 确实是为随机访问而设计的,但它们一起用于不同的目的。
我也同意块 Blob 是为顺序访问而设计的,但是没有什么能阻止您从中间读取块 blob 的内容。支持block blob范围读取,完全可以读取block blob的部分内容。
举个例子,假设您有一个 10 MB 的 blob(blob 大小 = 10485760 字节)。现在您想从底部读取 blob。假设你想一次读取 1MB 块,你会调用 DownloadRangeToByteArray
或 DownloadRangeToStream
(或它们的异步变体)并指定 9437184
(9MB 标记)作为起始范围和 10485759
(10MB 标记)作为结束范围。阅读内容,看看是否找到您要查找的内容。如果没有,您可以读取 blob 的内容,从 8MB 到 9MB,然后继续该过程。
我有相当大的 blob 文件,我只需要从中读取和提取最新的几行信息。是否有 API (C#) 会从末尾读取文件直到我想停止,以便我的应用程序尽可能摄取最少的信息?
您应该已经知道 BlockBlob 是为 sequential
访问而设计的,而页面 Blob 是为 random
访问而设计的。以及用于追加操作的 AppendBlobs,在您的情况下,这不是我们要找的。
我相信您的解决方案是将 blob 保存为 PageBlob
而不是默认的 BlockBlob
。一旦你有了一个页面 Blob,你就有了很好的方法,比如 GetPageRangesAsync which returns an IEnbumerable of PageRange. The latter overrides ToString() 方法来为你提供页面的字符串内容。
恕我不同意这个答案。虽然页面 Blob 确实是为随机访问而设计的,但它们一起用于不同的目的。
我也同意块 Blob 是为顺序访问而设计的,但是没有什么能阻止您从中间读取块 blob 的内容。支持block blob范围读取,完全可以读取block blob的部分内容。
举个例子,假设您有一个 10 MB 的 blob(blob 大小 = 10485760 字节)。现在您想从底部读取 blob。假设你想一次读取 1MB 块,你会调用 DownloadRangeToByteArray
或 DownloadRangeToStream
(或它们的异步变体)并指定 9437184
(9MB 标记)作为起始范围和 10485759
(10MB 标记)作为结束范围。阅读内容,看看是否找到您要查找的内容。如果没有,您可以读取 blob 的内容,从 8MB 到 9MB,然后继续该过程。