【问题标题】:Azure Append Blobs Slow Read PerformanceAzure 追加 Blob 读取性能缓慢
【发布时间】:2020-04-16 04:48:51
【问题描述】:

我观察到,当一个 blob 被附加到几千次或更多时,从 Azure Append Blob 读取非常慢。写入/追加速度很快,但读取具有数千个附加的典型日志 blob,每个附加大小为几 KB,总大小为几 MB 需要一分钟以上!读取类似大小的标准博客或页面 blob 需要几毫秒。有什么方法可以加快从附加 blob 中读取的速度,即通过扁平化内部结构?

到目前为止,最好定期“存档”/将附加 blob 转换为块 blob,然后对其进行处理。有什么建议吗?

如果没有,推荐的日志替代存储是什么? 可以使用 Azure 表,但它需要更多的读取,即使使用批量操作也是如此。

【问题讨论】:

    标签: azure azure-blob-storage


    【解决方案1】:

    我确实切换到 Azure Tables 并且读取性能合理,1.5K 项目大约 1 秒,以批量模式读取。尽管如此,读取具有相同内容的块或页面 blob 只需几毫秒,速度要快得多。如果有一种方法可以附加到页面 blob,那将非常有效。这可以手动完成,所以也许 Append(或其他类型的)Blob 可以在未来的某个版本中自动完成。 Deep dive in Append Blob 内部的追加 Blob 非常复杂,这可能是读取速度慢的原因。

    【讨论】:

      【解决方案2】:

      这是因为许多小的附加会导致 blob 变得严重碎片化,以快速写入换取慢速读取。

      目前,您最好的选择是,如您所写,定期将附加 blob 复制到块 blob 中并从中读取。

      但是,Azure 存储团队计划(自 2018 年 6 月起)添加de-fragmentation feature。有了这些,我们最终也可以快速读取小附加内容。

      【讨论】:

        【解决方案3】:

        请注意附加 Blob 是由块组成的。单个附加 blob 最多可以包含 50,000 个块,每个块最多 4MB。如果将新内容附加到现有文件中,则会导致文件性能变慢。我们可以像下面的截图一样找到提交号:

        向 Append blob 中存在的文件追加新内容不是一个好主意。当我们需要将内容附加到 blob 并且我们不关心顺序时,应该使用附加 blob。如果您想使用 append 记录一些应用程序信息,我们可以将新的日志信息写入新文件并保存到 Azure append blob。 Azure 表也是我们记录应用信息的一个很好的服务。如果想查询日志信息,可以使用Microsoft Azure Explorer

        【讨论】:

        • 感谢您的澄清,Jambor。不过,如果附加 Blob 不适用于日志,则尚不清楚它们的主要用例是什么。我确实切换到 Azure Tables 并且读取性能合理,1.5K 项目大约 1 秒,以批量模式读取。仍然是一个 blob 或页面
        • 它非常适合通过 Append blob 存储日志记录或遥测数据,如果您想要良好的性能,我建议您每小时或每天创建一个 append blob 文件。这样我们就可以避免每个 Append blob 文件中的提交块过大。
        • 这个答案和评论令人困惑。一方面它说 AppendBlobs 不适合追加,但另一方面它说它们适合追加遥测和日志数据。回答者是否暗示它适合追加但只能达到一定大小?
        • 看起来像this answer(同一作者)的副本,但有更多细节。特别是它最适合每个附加接近 4MB 限制的情况。
        猜你喜欢
        • 2015-11-09
        • 2012-07-02
        • 1970-01-01
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        • 2018-08-17
        • 2014-11-08
        • 1970-01-01
        相关资源
        最近更新 更多