关于数据库存储图片的问题

Ainan 2013-04-15 09:23:09
目前一般采用两种方法:
1.图片存在服务器文件系统上,数据库中保存文件路径。
2.直接将图片存储在数据库中。

如果是做一个B/S的系统我会选择第一种,但是现在我要做一套系统,要求C#+SQL Server2005,多个客户端链接一个数据库服务器,我考虑第二种方法实现可能更方便,但是图片存在数据库中会导致数据库内数据量太大,会不会影响服务器的性能?

还有没有高手能提出些更好的解决方案?小弟在此拜谢。

ps:单张图片大小大约为1M,总共大概1W-2W张。
...全文
2413 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2013-04-16
  • 打赏
  • 举报
回复
图片存放的列必然很大,维护和直接查询都不会很高效,同时万一你还要匹配图片是否相同这些也是问题,早上去面试了,现在才上,没及时回复,不好意思
Ainan 2013-04-16
  • 打赏
  • 举报
回复
引用 10 楼 ap0405140 的回复:
如果产生的数据量大,可以分月存储为表,如tab201303,tab201304... 或考虑使用分区表.
这个确实是个方法,感谢指导。大家说的方法我都会好好研究下的
唐诗三百首 2013-04-16
  • 打赏
  • 举报
回复
如果产生的数据量大,可以分月存储为表,如tab201303,tab201304... 或考虑使用分区表.
Ainan 2013-04-16
  • 打赏
  • 举报
回复
引用 7 楼 ap0405140 的回复:
如果对图片浏览的性能要求比较高,建议用数据库存储的方式, 若用路径存储,则需读数据库得到路径-->读服务器的文件-->一起返回.. 另:建议压缩一下图片再存储,如转为jpeg格式.
数据库直接存图片实现最方便,包括信息维护也容易些,不过,这个数据量会不会对数据库的性能有影响?我还是学生,这种问题以前还没遇到过,能够多给些指点?
Ainan 2013-04-16
  • 打赏
  • 举报
回复
引用 3 楼 DBA_Huangzj 的回复:
那个方法是以前用过的,但是我只复杂存,至于用,是由前端人员开发的,具体代码还没来得及看电脑就被偷了,不然还有点例子给你。你说的第一种不是就是路径吗?
我的意思是您说的那种SQL Server2008 filestream的那种方法我还不太懂,是把图片直接用文件流传送到客户端显示吗?
唐诗三百首 2013-04-16
  • 打赏
  • 举报
回复
如果对图片浏览的性能要求比较高,建议用数据库存储的方式, 若用路径存储,则需读数据库得到路径-->读服务器的文件-->一起返回.. 另:建议压缩一下图片再存储,如转为jpeg格式.
Ainan 2013-04-16
  • 打赏
  • 举报
回复
引用 4 楼 shoppo0505 的回复:
作为应用程序中的图片大小,1m还是太大了。考虑再次压缩。建议使用gif格式的矢量图。 关于数据库设计,也赞成楼上的,就是在数据库中只保存文件地址连接。因为图片一般都是不作处理的,转化成二进制再转换回来太耗费资源,非常没有意义。如果你做的Winform系统的话,一般都是把图集成在安装程序中的,webform的话就放在服务器上就OK了。
其实我要做的是基于winform的一个信息管理系统,客户端会放置一个局域网内的多个设备上,图片的数量还是挺多的,大概有不到两万张,集成在安装环境中是不是每个客户端本地都会保存一整套提片,这样会不会重复数据量太大了?信息维护是不是也有点困难?
shoppo0505 2013-04-16
  • 打赏
  • 举报
回复
引用 6 楼 Program_MyLife 的回复:
引用 4 楼 shoppo0505 的回复: 作为应用程序中的图片大小,1m还是太大了。考虑再次压缩。建议使用gif格式的矢量图。 关于数据库设计,也赞成楼上的,就是在数据库中只保存文件地址连接。因为图片一般都是不作处理的,转化成二进制再转换回来太耗费资源,非常没有意义。如果你做的Winform系统的话,一般都是把图集成在安装程序中的,webform的话就放在服务器上就OK了。 其实……
图片集成在winform程序中是常用手段,既然是常用手段,当然有他的道理。 主要还是看你这些图片是干什么用的。 目前我遇到的,不管是楼上说的使用数据库管理图片还是,我说的集成在winform程序中,一般这些图片都是icon,gif,少量JPG,而且都只是很小的50kb左右的文件,量也很小,基本都是为按钮服务的。 我不知道你现在这么多图片的作用是什么。如果这些图片在你程序中会常用,肯定是打包进winform安装程序了。
叶子 2013-04-16
  • 打赏
  • 举报
回复
我觉得第一种方法是可以的,多个客户端链接一个数据库服务器也可以的。
Mr_Nice 2013-04-15
  • 打赏
  • 举报
回复
还是存路径吧。必将图片处理的磁盘处理,跟纯数据库的磁盘处理不太一样。另外,前台相关图片显示,不是简单的引用原图片的。 大多数就跟4楼说的,需要转换为可发行的图片,一个是节省存储以及显示的数据要求,另外,还需要统一化图片质量。 说来又话长了,还是存路径引用吧.
shoppo0505 2013-04-15
  • 打赏
  • 举报
回复
作为应用程序中的图片大小,1m还是太大了。考虑再次压缩。建议使用gif格式的矢量图。

关于数据库设计,也赞成楼上的,就是在数据库中只保存文件地址连接。因为图片一般都是不作处理的,转化成二进制再转换回来太耗费资源,非常没有意义。如果你做的Winform系统的话,一般都是把图集成在安装程序中的,webform的话就放在服务器上就OK了。
發糞塗牆 2013-04-15
  • 打赏
  • 举报
回复
那个方法是以前用过的,但是我只复杂存,至于用,是由前端人员开发的,具体代码还没来得及看电脑就被偷了,不然还有点例子给你。你说的第一种不是就是路径吗?
Ainan 2013-04-15
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
我个人觉得存路径更好,如果是SQLServer2008,你那个图片大小已经满足使用FILESTREAM的要求了,不过是05,存路径可以直接读取服务器本地文件,不需要经过二进制转换。
您说的第二种通过路径读取服务器本地文件的方法我了解了,但是第一种网我还不太明白,能否说的更详细些或者推荐些资料给我,因为数据库的版本并不是硬性规定,我想充分了解下这两种方法。 我菜鸟一只,还希望耐心赐教。
發糞塗牆 2013-04-15
  • 打赏
  • 举报
回复
我个人觉得存路径更好,如果是SQLServer2008,你那个图片大小已经满足使用FILESTREAM的要求了,不过是05,存路径可以直接读取服务器本地文件,不需要经过二进制转换。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧