【问题标题】:Which storage is good for read performance哪种存储有利于读取性能
【发布时间】:2014-11-26 18:58:11
【问题描述】:

我有一个自定义数据文件。在我的本地计算机上高速读取此文件。在我的测试中,读取速度平均为 0.5 毫秒(带搜索的简单读取操作)。我想在 azure 上使用相同的操作。尝试通过以下步骤使用 Blob 存储:

  1. 创建云存储帐户
  2. 创建 blob 客户端
  3. 获取容器
  4. 获取 blob 引用
  5. OpenRead 流

此步骤大约需要 10-15 秒。这是一个只读文件。我能做些什么来提高阅读性能?什么是大量读取操作的最佳存储。在这个时候,阅读速度对我来说更重要。我不想使用具有 web/worker 角色的数据文件。我必须在云存储上。

【问题讨论】:

    标签: azure-storage azure-blob-storage


    【解决方案1】:

    您必须分析您的访问模式才能进一步调试此问题。例如,OpenRead 为您提供了一个易于使用的流,但如果您在文件中查找,它的预读缓冲策略可能不是最佳的。默认情况下,流将一次缓冲 4MB,但如果调用者搜索超出该 4MB 范围,则必须丢弃此缓冲区。根据每次搜索后阅读的内容,您可能希望减少 read-ahead buffer size 或直接使用 DownloadRangeToStream API。或者,如果您的 blob 足够小,您可以使用 DownloadToStream API 一次性下载它,然后在内存中处理它。

    我建议使用Fiddler 来观察您的应用程序向 Azure 存储发出的请求,看看这是否是您的方案的最佳方法。如果您发现每个单独的请求都需要很长时间,您可以enable Azure Storage Analytics 分析这些请求的端到端延迟和服务器延迟。请参阅Monitor, diagnose, and troubleshoot Microsoft Azure Storage 文章,了解有关如何解释 Analytics 数据的更多信息。

    【讨论】:

    • 感谢您的回答。我的数据需要按顺序读取。从零到文件末尾的一种方法是寻找(而不是结束)。第一次读取文件更慢。您能否更喜欢任何专门针对 Blob 存储的存储文档?
    • 如果它是连续的并且您需要整个文件,我建议使用 DownloadToStream 一次性下载。我在关于诊断和故障排除的答案中提到的上一篇文章对于调查性能问题非常有用。
    • 我不需要阅读整个文件。我想读取特定的字节。步骤:从位置 0 读取 10 个字节,转到位置 200 并读取 20 个字节,转到位置 500 并读取 3 个字节......从一个位置跳到另一个位置需要读取的内容。下一个位置信息存储在当前位置读数中。所以在开始读取文件之前我不知道我在读取什么位置。
    • 如果 blob 足够小,完全下载它仍然可以执行得更好。如果没有,我建议您查看 DownloadRangeToStream API,因为它允许您指定要在每个请求上下载的范围(偏移量和长度)。还请确保启用 Azure 存储分析,以便查看每个请求所花费的时间。
    猜你喜欢
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多