0

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

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

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

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

4

2 回答 2

1

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

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

我不知道这适合您的应用程序的位置,无论是执行上传的桌面应用程序,还是从最终用户获取图像和附件,然后将它们上传到 blob 的网络应用程序(以及正在写入的数据库记录) )。如果是后者:我建议如下:

  1. 写消息记录(这可能会给你某种类型的唯一 ID)
  2. 收到每个图像或附件时,上传到 blob 存储,然后使用生成的 URI 更新消息

您可以启动并行任务来上传每个图像或附件,然后更新消息记录。只要您有带宽,并行上传就会在一定程度上充分利用它。每个存储帐户都有一个吞吐量上限(每秒 5,000 个事务和 3Gbps)。

当然还有其他方法,例如引入消息更新队列,使用 CQRS 模式等。部分决定将基于应用程序的架构(正如我所说,我无法判断这是否是桌面应用程序在做上传到 blob 存储或执行上传的 Web 服务器)。

于 2012-05-25T02:20:24.147 回答
0

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

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

此致,

明旭。

于 2012-05-25T08:20:04.317 回答