日期:2014-05-18  浏览次数:20714 次

数据库里能否存储大量的文件?
我的软件需要管理大量的文件,包括 Word、Excel、图片、pdf 等等,总大小大概有 300 GB。
这些文件是用 Blob 字段直接存储的数据库中好呢?
还是数据表中只存文件路径,然后把文件存到服务器的硬盘上好?

我在网上查过了,两种方式都有支持者。

这两种方式各有什么优缺点?

------解决方案--------------------
在SQL Server中可以用image数据类型存储这些文件。

存在数据库中比较方便维护一致性,关键在于数据库的使用和管理机制。
------解决方案--------------------
理论上支持,不过速度是问题。
------解决方案--------------------
用存储过程实现:
create PROCEDURE sp_textcopy ( 
@srvname varchar (30), 
@login varchar (30), 
@password varchar (30), 
@dbname varchar (30), 
@tbname varchar (30), 
@photoname varchar (30), 
@filename varchar (30), 
@whereclause varchar (40), 
@direction char(1)) 
AS 
DECLARE @exec_str varchar (255) 
SELECT @exec_str = 
'textcopy /S ' + @srvname + 
' /U ' + @login + 
' /P ' + @password + 
' /D ' + @dbname + 
' /T ' + @tbname + 
' /C ' + @photoname + 
' /W "' + @whereclause + 
'" /F ' + @filename + 
' /' + @direction 
EXEC master..xp_cmdshell @exec_str ,no_output 

create table photo(id int identity(1,1),photo image,memo nvarchar(50) default 'my photo')
go
insert photo(photo) values(0x) -- 必须的,且不是null
select * from photo
--truncate table photo

sp_textcopy 'roy','sa','wuxi','test','photo','photo','E:\photo\myphoto\roy3.jpg','where id=5','I' --注意条件是 id=1


3、读入
sp_textcopy 'roy','sa','wuxi','test','photo','photo','E:\photo\photo\21.jpg','where id=1','I' --注意条件是 id=1

sp_textcopy 'roy','sa','wuxi','test','photo','photo','E:\photo\photo\33.jpg','where id=2','I' --注意条件是 id=2

go

4、读出成文件
sp_textcopy 'roy','sa','wuxi','test','photo','photo','E:\photo\roy.jpg','where id=1','O' --注意条件是 id=1
sp_textcopy 'roy','sa','wuxi','test','photo','photo','E:\photo\roy1.jpg','where id=2','O'
sp_textcopy 'roy','sa','wuxi','test','photo','photo','E:\photo\roy2.jpg','where id=3','O'
sp_textcopy 'roy','sa','wuxi','test','photo','photo','E:\photo\roy3.jpg','where id=4','O'

sp_textcopy 'roy','sa','wuxi','test','photo','photo','c:\bb.doc','where id=5','O' --注意条件是 id=2

------解决方案--------------------
为了速度,建议数据库存放路径,磁盘存放文件。
------解决方案--------------------
个人感觉放盘里好点...

放盘里的话,只不过对你的程序要求多了一点.比如删除记录后,要找到对应的文件进行删除,等等
------解决方案--------------------
存数据的话量一大会影响速度,好处就是易于维护;存路径的话维护比较麻烦一些,访问效率要高。300G的数据量建议存路径,当然你也可以折中,把比较大一些的那种文件存路径,小一些的文件类型存数据。
------解决方案--------------------
建议数据库保存路径
如果保存在数据库里的话会非常满 服务器维护也比较麻烦 备份还占用空间
------解决方案--------------------
如果要完全备份数据库的话 备份文件就要 有 300G 以上
备份时间也会很长
备份过程数据库会变的很慢
------解决方案--------------------
存路径比较好,只是要注意数据库中存的路径要随时和实际路径保持一致

数据量太大的话存在数据库中读写的时候确实很影响数据库的性能,如果量小由数据库来管理还是很不错的选择