transactions - 我应该为文件使用 Blob 存储还是 Azure VM 存储?

标签 transactions asp.net-mvc-5 storage azure-storage azure-virtual-machine

我正在编写存储在 Azure VM 上的 MVC 5 互联网应用程序。在此互联网应用程序中,用户可以上传图片和视频等文件,公众可以通过 url 访问这些文件。

我的问题是:

我应该将此上传的数据存储在与 Azure VM 相同位置的 Azure Block Blob 容器中,还是让用户将此数据上传到 VM 存储的硬盘驱动器,然后可以通过 url 访问?

使用 Blob 存储还是在 VM 上存储文件更便宜?

例如,如果我将以下文件存储在 Blob 存储和 Azure VM 上,并且每个文件都被访问和查看了 100 次,哪个会更便宜?

  1. 10 * 1MB 图片
  2. 10 * 5MB 视频

此外,除了存储成本和交易成本,我还应该考虑哪些因素?

提前致谢。

最佳答案

在这种情况下,您似乎应该为上传的 blob 创建一个单独的容器并将其标记为公开。您的应用程序应将用户上传的文件保存到此公共(public)容器。然后用户可以通过 blob 的 URL 直接访问容器中的文件。

这个建议有几个原因:

  1. 成本:正如您提到的, block blob 的成本比 VHD 上的空间便宜
  2. IOPS:您的 VHD 有每秒 500 次 IO 操作的限制。您已经在此 VHD 上运行您的应用程序和操作系统,这意味着您所有上传的文件加起来剩余的 IOPS 更少
  3. 吞吐量:通过直接通过存储为这些 blob 提供服务,您不会使前端 VM 成为带宽瓶颈(如果下载流量很高,VM 的网络可能会饱和)
  4. 可管理性:您可以从任何资源管理器管理 blob,并使用任何存储资源管理器手动添加/删除,而无需登录您的 VM 来执行这些操作。
  5. 可扩展性:如果将其放在 VM 的磁盘上,则只有该 VM 可以访问这些文件。借助 blob,您可以使用多个虚拟机作为前端,以随着负载的增加而横向扩展。

关于transactions - 我应该为文件使用 Blob 存储还是 Azure VM 存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30421079/

相关文章:

c# - MySqlBulkLoader 与事务中的 MySqlCommand

transactions - 有没有办法检查事务授予的锁

c# - 显示总行数 Grid.MVC 列表的最佳方式

c# - 发现多个与 mvc5 api 应用程序中的请求匹配的操作

java - 在android中获取外部SD卡的正确路径

sqlite - 同一个 sqlite 数据库的不同连接可以同时开始事务吗?

Java类调用使用hibernate的方法 - 多次运行时出错

c# - asp.net 值 ' 1 ' 无效

Android:在外部存储上找不到文件

java - 在服务器中使用 Firebase 存储