并行上传图像到Azure blob什么是更好的选择?

时间:2012-05-24 07:26:37

标签: c# parallel-processing message-queue azure-storage-blobs

我有一个列表,每条消息都有一个图像和列表现在我需要更新每个消息的图像和附件的blol URL

  
    

解决方案1:     为图像调用UploadBlob,为每个附件调用UploadBlob,然后使用Blob url更新DB中的消息对象

         

解决方案2     一次上传图像和所有附件并使用并行上传和更新Blob URl并在DB中保存消息,每条消息都有一个唯一ID,所以在上传到blob时我可以设置此id来创建一个唯一的blob网址,所以更新消息我需要映射消息ID与Blob Url,其中包含消息Id

  

如果您有任何其他解决方案来提高代码可读性和性能请咨询

2 个答案:

答案 0 :(得分:1)

不确定我是否完全理解这个问题,但是......似乎每条消息都有一个图像和零个或多个附件,并且消息对象需要引用图像和相关附件。

如果这是正确的解释:每次上传都会进入自己的blob。即使使用上面的解决方案#2,在所有上传后你仍然会得到多个blob URI。

我无法分辨这适合您的应用,无论是上传的桌面应用,还是从最终用户获取图片和附件的网络应用,然后将其上传到blob(以及数据库)正在写的记录)。如果是后者:我建议如下:

  1. 写下消息记录(可能会给你一些类型的唯一ID)
  2. 接收每个图像或附件时,上传到blob存储,然后使用生成的URI更新消息
  3. 您可以启动并行任务以上传每个图像或附件,然后更新消息记录。只要你有带宽,并行上传就会更多地使用它,直到某一点。每个存储帐户都有吞吐量上限(每秒5,000个事务,3Gbps)。

    肯定有替代方法,例如引入消息更新队列,使用CQRS模式等。部分决策将基于应用程序的架构(正如我所说,我不知道这是否是一个桌面应用程序执行上传.blob存储,或执行上传的Web服务器。)

答案 1 :(得分:0)

根据我的理解,看起来解决方案2更好。

我们可以在任务并行库的帮助下并行上传多个文件:http://msdn.microsoft.com/en-us/library/dd460717.aspx。我们也可以使用异步模式(调用Begin / End方法)。但如果我们不同时上传太多文件会更好。如果发生了太多未决的Web请求,则其中一些可能会失败。例如,我们可以选择创建10个任务,等待1完成,然后创建第11个。

最诚挚的问候,

徐明。