2018多媒体信息数据库存取优化方法研究
[摘要] 本文通过实际图像存取速度与对数据库容量影响的量化比较研究,得出在Visual Basic环境下快速数据库图像存取的方法,对于其他多媒体信息存取与编程环境也有一定的借鉴作用。[关键词] 图像存取ICB方法CKA方法
图形图像、音频视频等多媒体信息在数据库中存储不同于传统的文本、数字等有着非常规范的结构化形式,程序设计中采用不同的存取方法,对数据库访问速度,以及数据库文件容量有非常大的影响,程序的运行效率当然也是相差甚远。
一、图像的存储优化
SQL Server用Image字段(Access用OLE对象字段)来存储图形图像甚至音视频等多媒体信息,在库中以“长二进制数据”的形式存放。以图形图像为例,VB传统的做法是将图像字段与图像控件绑定,加载图像后刷新近期件并更新记录集即可完成图像的存储,这里称为图像控件绑定(Image Control Binding,ICB)方法。这种方法的优点是代码简单、容易理解和实现,特别是对于库中所存图像的浏览尤为方便。但由于其不管源图像格式,统一按24位位图进行处理,故只适用于小型图像的存取,如人事档案中的相片,而对于较大的尤其是压缩格式的图像,ICB方法的存取速度就会慢得让人无法忍受,数据库的膨胀幅度也会大得惊人。
为提高图像的存储速度,最大限度地减小数据库增幅,对普通图像(如BMP)文件,需要先将其转化成压缩格式文件(如Jpeg格式)。图像存储时,先把图像文件按二进制文件打并开读入到相应的Byte型数组,再用记录集对象的追加大块数据方法(AppendChunk方法)将其写入数据库,这里称之为大块数据存取(Chunk Access,CKA)方法。
CKA方法图像存入数据库代码:(ICB方法略)
Dim bytData() As Byte
'以二进制文件方式打开临时图像文件
Open App.Path “\temp1.jpg”For Binary As #1
ReDim bytData(FileLen(App.Path “\temp1.jpg”))
Get #1, , bytData()'读入图像→二进制数组
Close #1
'用AppendChunk方法将二进制数组入库
Me.Adodc2.Recordset(“Pic”).AppendChunk bytData()
Me.Adodc2.Recordset.Update
表1所示是ICB方法和CKA方法存储JPEG图像速度与存储图像后数据库文件大小的测试数据对照表。
为突出效果,选用9张2048×1536像素的JPEG数码相片进行测试,图像大小介于1.3MB到2MB之间。分析测试结果得出,
注:①测试环境:P4 1.7G CPU,352MB DDR RAM,32MB显存,Access 2003数据库;②数据库初始大小:140.0KB(空)。
ICB方法存储JPEG相片的平均速度为120B/ms,CKA方法则为2848 B/ms。CKA方法的存储时间与图像大小成比例,ICB方法的存储时间波动范围较大,这是由于存储时间本身较长(12~15s),测试期间受其他进程影响较多造成的。
对于图像存储后库文件的大小,ICB方法对应的库文件呈线性膨胀,每次增量为9.2MB左右,即2048×1536像素的24位图文件的大小;CKA方法对应的库文件每次增量则与Jpeg文件的大小相吻合,如果需要,可在图像格式转换时在保证视觉效果的前提下增大图像压缩率,从而降低图像对数据库大小的影响。
二、图像的查询优化
图像查询时使用ICB方法基本不需要写任何代码就可完成查询,借助控件的导航按钮可以方便地实现对数据库中图像的浏览。但若图像记录较多或图像较大,查询操作就会变得异常缓慢,出现类似“死机”的现象。
图像的查询优化包含两方面内容,其一为图像查询与普通数据查询分开进行,避免一次检索过多图像造成查询延时过长;其二需要把存放在数据库图像字段中的信息用CKA方法分段读出写到一个临时文件中,重新组装成原来的图像,再进行图像加载和显示。
页:
[1]