最近做一个项目,图片管理系统,客户说要把图片数据放到数据库中去,不是存图片地址, 因为以后实际应用中,每张图片容易都会在5-10M之间,现在测试的时候,添加1000张图片,就导致执行update 或者 select等语句非常慢,导致事务超时,当然程序也就执行不下去了。大家有没有什么好的建议呢,现在项目采用webwork+hibernate 。针对这种项目,是不是hibernate就不适用了,容易导致内存溢出, 数据库方面,现在图片数据和图片的基本信息(图片名称,上传者,上传时间,图片类型等)放同一张表,是不是要图片数据和图片基本信息分开比较好。请思路和有经验的朋友们赐教。谢谢。
[b]问题补充:[/b]
图片一定要放数据库,图片需要比较高的安全性,报社用的图片,客户一开始就强调要放数据库。没办法说服。
[b]问题补充:[/b]
客户的要求,当初一直和客户一直反对放数据库,但客户一直强调要这样,能有什么办法。 :oops:
如果没办法的话,就把图片放在一个单独的表(image_data)里面,(id,image_data),
图片以二进制数据的形式保存。
另外一张表存图片的相关信息(image_info)。
尽量不去对image_data表进行查询。查询的时候,先找出image_info里面的id,然后用这个id直接去抓image_data中的图片信息。
拆开吧,把图片的字段和基本信息拆开,然后update的时候先只update主表,图片先放文件夹中,再做一个定时任务或者批处理把图片更新到数据库
最好是图片的表空间和存其他信息的表空间在不同的硬盘上
你一定要说服你的客户不要把图片放数据库,让他自己google一下
我晕,安全性不用拿数据库来做吧?
用linux的用户安全机制一样可以实现安全性,比如设置某个文件夹的权限为 700
我也觉得,这个放不放数据库和安全性没关系把,你可以把文件搞成加密的然后存储啊,不是一样的么。
放在DB里面就意味着一定大多数请款下要通过网络传输,这样岂非“更加”不安全?
实在不行就把WebServer和DB放在一台机器上,这样不通过网络或许会快点点。
碰到这种半调子的客户,要努力说服之,要搞清楚你才是专业人员阿,赫赫~
暂时把图片以文件的方式放到服务器上,在某个时间段再进行统一的数据库操作,操作无异常的情况下,删除图片文件。这样web server和数据库都能减轻点压力。
以上,曲线了一下,商量商量,实在不行,弄点二锅头,闷倒他。
哈哈。。。极品客户。。。这个明显设计的问题,HIBERNATE肯定不能用了,应该直接JDBC,SQL。hibernate在orm过程中会加载到内存中并且保存很久,如果缓存的话~内存就更受不了了。
不过你可以尽量优化,比如对经常出现在where 旁边的列,主键,做索引。然后什么分布式存储,什么高科技,能上的都上。呵呵。