在将数千个小 Blob 写入 Azure 存储时,我试图找出性能最佳的方法。应用场景如下:
- 安装在 Windows Azure VM 上的持续运行的 Windows 服务正在创建或覆盖数千个文件
- 写入虚拟机可用的临时存储,该服务每秒可以创建超过 9,000 个文件
- 文件大小介于 1 KB 和 60 KB 之间
- 在运行相同 sw 的其他 VM 上,正在以相同的速率和标准创建其他文件
- 鉴于需要构建并保持更新中央存储库,每个 VM 上运行的另一个服务将新创建的文件从临时存储复制到 Azure Blob
- 然后其他服务器应在其更新版本中读取 Azure Blob
请注意,对于我没有列出的许多限制,目前无法修改主要服务以直接创建 Blob 而不是临时文件系统上的文件。...从我目前看到的情况来看,这意味着创建速度较慢,按照原始要求是不可接受的。
我正在对 10,000 个文件进行紧密循环测试的此复制操作似乎被限制为每秒创建 200 个 blob。在调整此处找到的名为“Windows Azure ImportExportBlob”的示例代码后,我已经能够达到此结果:http ://code.msdn.microsoft.com/windowsazure/Windows-Azure-ImportExportB-9d30ddd5 以及在中找到的异步建议这个答案:在一个小的天蓝色实例中使用 Parallel.Foreach
我在具有 8 个内核的超大型 VM 上获得了每秒 200 个 blob 创建的明显最大值,并相应地设置了“maxConcurrentThingsToProcess”信号量。测试期间的网络利用率最大为任务管理器中显示的可用 10Gb 的 1%。这意味着大约 800 Mb 中的 100 Mb 应该在该 VM 大小上可用。
我看到在经过的时间内复制的总大小给了我大约 10 MB/秒。
您可以生成的 Azure 存储流量是否存在一些限制,或者在编写如此多的小文件时我应该使用不同的方法吗?