【发布时间】:2011-05-05 10:20:45
【问题描述】:
我有一个网站,其中一个页面是一组静态图片。用户希望能够上传自己的图片并显示它而不是静态列表。我看到这样的代码解释了good way to have an upload interface for pictures。我想弄清楚我是否应该将图片存储在我的网络服务器文件系统或我的 SQL 服务器数据库或其他地方。
这里有什么关于最佳实践的建议吗?
【问题讨论】:
标签: c# asp.net-mvc image
我有一个网站,其中一个页面是一组静态图片。用户希望能够上传自己的图片并显示它而不是静态列表。我看到这样的代码解释了good way to have an upload interface for pictures。我想弄清楚我是否应该将图片存储在我的网络服务器文件系统或我的 SQL 服务器数据库或其他地方。
这里有什么关于最佳实践的建议吗?
【问题讨论】:
标签: c# asp.net-mvc image
在链接的示例中,您建议程序员使用 xml 文件。 该解决方案非常适合低频段站点和少量图像。 但是如果两个用户同时尝试上传一个文件会怎样呢?可能第二个用户会收到错误,因为 xml 文件已在使用中。
我建议您将图片存储在文件系统中,并将图片元数据(描述、标签、地理标签...)存储在数据库中。
避免将二进制数据存储在数据库中。您将获得非常低效的数据库性能和非常大的大小。
【讨论】:
在文件系统中存储更容易实现,您可以利用目录结构。但是,如果您需要的不仅仅是简单的分层结构(例如标记),那么您很可能需要一个数据库来执行索引(可以是 SQL 服务器或 XML Dbs)。
第二个问题来了。如果需要索引,元数据存储在 DB 中,那么实际的二进制图像数据呢?将二进制放入 SQL 中很容易维护,但是您需要从 Web 服务器实现自定义缓存策略(将图像数据转储到 Web 服务器本地磁盘驱动器),以避免 web/db 之间的流量过多。
另一方面,你可以将密钥保存在数据库中,并将图像保存在本地磁盘(Web服务器),这很容易实现,但可能会出现两个问题:
更难扩展。想象一下,您需要多个 Web 服务器,同步这样的内容可能是个问题。
文件系统索引。如果您将文件存储在本地,很可能所有文件都驻留在一个文件夹中。对于任何文件系统,存储在一个位置的文件越多意味着它查找或从中获取内容的速度越慢。图片库可以增长到成千上万的文件,这可能会导致问题。 (当然,您可以采用一些策略来分离存储,但这会增加复杂性)。
【讨论】: