【问题标题】:Storing and retrieving images with MVC and Sql Server使用 MVC 和 Sql Server 存储和检索图像
【发布时间】:2011-01-05 12:04:08
【问题描述】:

我正在设计一个需要存储图像的应用程序原型,类似于 facebook。这将是一个面向公众的网站,我不确定最终会获得多少用户,但我正在寻找一种有效检索用户的方法。

到目前为止,我正在考虑将它们存储在 SQL Server varbinary 列中。这是一个好主意吗?我有上传代码和存储代码。我关心的是找回它们。我可以随时退休并构建图像标签,但我担心必须为每个标签访问数据库。

我一直在考虑获取用户的所有图像并将它们缓存在 asp.net 缓存中 10 到 30 秒。我从来没有做过这样的事情,所以我有兴趣听到一些不同的方法。显然图像的大小可能会有所不同,我正在考虑定义一个大小限制,但我还没有做到这一点。

感谢您的帮助。 保罗·斯佩兰萨

【问题讨论】:

    标签: asp.net sql-server asp.net-mvc image


    【解决方案1】:

    不要将图像存储在数据库中。这会损害您的数据库和网站的性能。

    唯一的例外是如果您要使用 SQL 2008 的 FILESTREAM 类型,它基本上使用文件系统来存储文件,并且只是在数据库中保留对它的引用。

    绝对不要将原始图像数据存储在varbinary 列中。

    【讨论】:

      【解决方案2】:

      首先,您可以在将图像放入 sql server 之前重新调整它们的大小。 此外,您可以创建一个从 sql server 检索图像的 http 处理程序,但我会将缓存设置为一两分钟,而不是更少。它们没有太大变化。

      context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(10));
      

      另一种选择是存储在文件服务器上,您可以将这些文件写入任何 IIS 具有权限的位置,并将文件“url”存储在数据库中,如“C:\images\test.jpg”。但是当记录被删除时,你必须写一些东西来删除文件。

      【讨论】:

        【解决方案3】:

        我认为 IIS 在缓存静态内容方面已经做得很好,所以我可能只是将图像保存在磁盘上,并保存有关它们在数据库中的位置的信息。

        【讨论】:

        • 我同意。将 Uri 存储在数据库中,并将文件存储在磁盘上。如果您的网站增长,则可以将物理文件移动到 SAN。
        • 谢谢你们两位的cmets。由于我从未使用过 SAN,我的下一个问题是,即使使用 SAN 会将文件保存在另一台设备上,它是否比使用数据库更有效?
        猜你喜欢
        • 1970-01-01
        • 2011-01-26
        • 2014-08-13
        • 1970-01-01
        • 2016-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-22
        相关资源
        最近更新 更多