存储图片和二进制大对象文件
存储图片和二进制大对象文件
二进制大对象,即BLOB,英文全称为binary large object。所谓二进制数据,换而言之,就是非文本数据。像MP3、可执行文件、图片等都是BLOB文件。这些类型的文件通常是大型图片存储数据库项目的一个组成部分。
问题也就随之而来了:要怎样存储这些文件呢?而将它们存到哪里呢?存在文件系统里还是放到关系数据库管理系统数据库内部呢?无论采用哪种存储方法,都有其各自的道理。笼统一点说来,如果文件比较小,就将它们存放在关系数据库管理系统数据库内部。而且,支持将二进制数据存储在关系数据库管理系统内部的另一个原因是有利于事务控制。例如,如果你在进行下一个处理步骤之前需要确认已经更新或删除了某张图片,那可以通过关系数据库管理系统内部控制这些过程。而另一方面,如果二进制文件很大,或者是视频流文件,那存储在Windows的文件系统中比存储在关系数据库管理系统内部对数据库的性能更有利。再者,文件系统对碎片的处理要优于关系数据库管理系统。
在本系列文章中,主要为大家介绍了如何将BLOB文件存储在关系数据库管理系统内部。本文将为大家介绍第二种存储BLOB文件的方法,也就是把BLOB文件存储到Windows文件系统当中,并利用关系数据库管理系统从一个网页对这些文件进行管理。
首先,如果不是通过网页应用程序而是通过其他方法删除或添加文件的话,关系数据库管理系统就无法察觉,因此不能做到和文件系统同步。第二个就是网店图片存储备份问题。实施上述方法后,我们不仅需要备份关系数据库管理系统,还需要备份文件存储的目录路径。此外,对于这些文件的安全问题,关系数据库管理系统也无法控制。
关系数据库管理系统 2008提供了解决这些问题的方法,那就是采用新的FILESTREAM数据类型。FILESTREAM文件就和标准的MDF或LDF文件一样,是存放在Windows的NTFS分区中的,不过FILESTREAM文件是专门为存储二进制数据而设计的。用CREATEDATABASE命令来创建一个特殊的文件组,并将其标记为“流(stream)”。创建该数据库后,可以将表内的一个列指定为“VARBINARY(MAX) FILESTREAM”数据类型。想要从文件系统访问存储在FILESTREAM内的BLOB是不可行的。我们无法打开Windows文件浏览器并访问这些文件,这意味着其安全是由关系数据库管理系统数据库负责处理的。此外,可以对这些BLOB文件使用标准的插入、更新和删除指令进行操作。因此对于大型的BLOB文件或像视频流这样性能要求很高的BLOB文件,关系数据库管理系统现在就有了一个可行的办法来处理这种类型的文件了。
关系数据库管理系统提供了多个方法来管理二进制数据文件,如关系数据库管理系统 2005中的VARBINARY (MAX),更老版本中的IMAGE数据类型、以及 关系数据库管理系统 2008中新的FILESTREAM选项。与标准的数据类型相比,要熟练运用这些数据类型需要稍微努把力了,不过使用的方法和使用的对象都还是比较简单易用的。需要留意,在上述的例子中并没有包括错误检查。实际应用当中,必须确保图片存储网站文件上传控件测试上传没有问题之后,再将数据传送到关系数据库管理系统数据库。