并行将映像上传到 Azure Blob 什么是更好的选择
本文关键字:什么 更好 选择 Blob Azure 映像 并行 | 更新日期: 2023-09-27 18:35:06
我有一个列表,每封邮件都有一个图像和列表,现在我需要更新每封邮件的图像和附件的 blob URL
解决方案 1 : 调用 UploadBlob 以获取图像,并为每个附件调用 UploadBlob,然后使用 Blob URL 更新数据库中的消息对象
解决方案 2 一次性上传图像和所有附件,并使用并行上传和更新 Blob URl 并将消息保存在数据库中,每条消息都有一个唯一的 ID,因此在上传到 blob 时我可以设置此 ID 以创建一个唯一的 blob URL,因此要更新消息,我需要将消息 ID 与包含消息 ID 的 Blob URL 映射
如果您有任何其他解决方案来提高代码可读性和性能,请提供建议
不确定我是否完全理解这个问题,但是...似乎每封邮件都有一个图像和零个或多个附件,并且邮件对象需要具有对图像和相关附件的引用。
如果这是一个正确的解释:每个上传都将在自己的 blob 中进行。即使使用上面的解决方案 #2,在所有上传后仍会得到多个 blob URI。
我无法判断这在您的应用程序中的位置,无论是执行上传的桌面应用程序,还是从最终用户获取图像和附件,然后将它们上传到 blob 的 Web 应用程序(以及正在写入的数据库记录)。如果是后者:我会提出以下建议:
- 写下消息记录(这大概会给你某种类型的唯一 ID)
- 接收每个图像或附件时,上传到 Blob 存储,然后使用生成的 URI 更新消息
您可以启动并行任务以上传每个图像或附件,然后更新消息记录。只要你有带宽,并行上传就会更多地利用它,在一定程度上。每个存储帐户都有一个吞吐量上限(每秒 5,000 个事务和 3Gbps)。
当然还有其他方法,例如引入消息更新队列、使用 CQRS 模式等。 部分决定将基于应用程序的体系结构(正如我所说,我无法判断这是执行上传的桌面应用程序。 到 blob 存储,还是执行上传的 Web 服务器)。
根据我的理解,看起来解决方案 2 更好。
我们可以在任务并行库的帮助下并行上传多个文件:http://msdn.microsoft.com/en-us/library/dd460717.aspx。我们还可以使用异步模式(调用 Begin/End 方法)。但是如果我们不要同时上传太多文件会更好。如果出现过多的待处理 Web 请求,则其中一些请求可能会失败。例如,我们可以选择创建 10 个任务,等待 1 个完成,然后创建第 11 个。
此致敬意
徐明.