用.NET和SQL Server 2005保存/加载图片的最佳方法是什么?

3
在销售产品的网页中,如何处理产品图片是一种典型的方式?比如说,我有一个数据库,里面有书籍或者计算机组件等等,它们都有自己的样品图片。那么,我应该将它们保存为二进制数据存储在数据库中,还是通过代码后台处理,将它们保存到一个目录中,并在产品表中保存相应的图片文件链接?
我正在尝试创建一个销售公司的示例,虽然我可以想出几种方法来做到这一点,但我想知道在编程业务中通常使用的是什么规范?
更新:存储在另一个系统或备用数据库上不是一个选择,感谢提供未来参考的可能替代方案的信息。我只有一个计算机,上面安装了Visual Studio 2008和SQL Server 2005/2008,并且只有一个ASP.Net项目可用。因此,这些文件必须保存在网页项目的一个目录中,或者保存在它所使用的一个数据库中。

1
你会考虑使用SQL Server 2008吗?因为它有这方面的功能。 - Robert Koritnik
如果可能的话,是的。但是假设我没有 SQL Server 2008,那么答案是什么?你是不是说将其保存在 SQL Server 中而不是带有到数据库的链接的文件系统中更好? - Zan2
@Zan2:实际上两者兼备。将您的文件存储在数据库中,但在文件系统中读取。请查看下面我的答案,您肯定会非常喜欢它。通过利用这种技术,您可以同时获得最佳效果。 - Robert Koritnik
4个回答

7
将文件保存到文件系统但在数据库中
将文件保存到数据库可以使其成为应用程序数据的单个备份点,并且使应用程序的安全性更小,因为您不需要一个具有写入权限的文件夹来存储文件。
SQL Server 2008 FILESTREAM 存储解决方案
随着 SQL Server 2008 的发布,Microsoft 推出了一种称为 FILESTREAM 的新数据存储机制,将数据存储为常规文件夹。但是,您可以通过表格访问它们(以及存储它们的元数据)。您可以将文件存储为 varbinary(max),并按照配置将它们存储在文件系统中。这些文件也将被数据库备份过程所获取。这样,您就可以在一个解决方案中得到两全其美的效果。
请阅读此处的相关信息。
事后说明:我必须指出,问题的作者确实提到他们可能会在存在任何优势时使用 SQL Server 2008。这是答案与版本2008相关的唯一原因,因为这确实是他们问题的最佳解决方案。

是的,只要您可以使用 SQL Server 2008。 - RichardOD
2
@RichardOD: 我问过他关于2008版本的事情,他说可能会使用它。因此,我认为这是最佳解决方案。 - Robert Koritnik
海报说他有 SQL Server 2005。 - Mitch Wheat
除此之外,他还承认可以使用2008版本。请查看他在自己问题下的评论。 - Robert Koritnik

2
请参见:将文件存储在数据库中还是文件系统中? 如果您决定在数据库中存储,请查看我针对SQL Server 2005的工作C#代码:将文件/图像保存和还原到SQL Server数据库 已故的Jim Gray的这篇微软研究论文:BLOB或Not To BLOB:数据库或文件系统中的大对象存储给出了以下建议:

如常识所料, 小于256K的对象最适合 存储在数据库中,而大于1M的对象 最好存储在文件系统中。在256K和1M之间,读写比率和对象覆盖或替换的速率是重要因素。


双重备份等方面怎么样? - Robert Koritnik
+1 为这篇关于微软研究论文的提及点赞。我记得几年前读过这篇论文。 - RichardOD
@Robert Koritnik:关于它们呢?你仍然需要保持它们同步。 - Mitch Wheat
@Mitch:如果您将文件存储在文件系统中,则必须从数据库备份中创建单独的备份。同步两者可能会很麻烦。直接将文件存储在文件系统中还存在其他(安全)问题。 - Robert Koritnik
@Mitch:现在有新的技术和解决方案来应对这些问题。你这里的数据有点过时,但仍然很有价值。 - Robert Koritnik
显示剩余2条评论

1

不要通过二进制数据加载DBMS!让SQL Server完成它的特定工作。当文件存储在文件系统中甚至在其他计算机上时,效果更好。


0

我的首选解决方案始终是将它们保存到文件系统上的目录中,并在数据库中保存URL /位置。我发现这是最容易维护的方法,而且很容易更改数据库、数据存储而不影响文件。

这种方法不依赖于数据库。

最近我遇到了一个遗留系统,将图像和文件存储为二进制文件,这导致检索这些文件以升级数据库软件需要花费时间和精力。


它也有一个缺点,即您的数据库和文件系统的备份必须保持同步。 - Mitch Wheat
@Stuart:这可能是某些应用程序的必要障碍,具体取决于应用程序。 - Robert Koritnik
@Robert - 好的,同意,一如既往,最好的解决方案取决于每个场景。 - Stuart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接