答案家

 找回密码
 立即注册
查看: 556|回复: 0

2018多媒体信息数据库存取优化方法研究

[复制链接]

1

主题

1

帖子

41

积分

幼儿园

Rank: 1

积分
41
发表于 2018-8-20 16:47:09 | 显示全部楼层 |阅读模式
   [摘要] 本文通过实际图像存取速度与对数据库容量影响的量化比较研究,得出在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方法分段读出写到一个临时文件中,重新组装成原来的图像,再进行图像加载和显示。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

CopyRight(c)2016 www.daanjia.com All Rights Reserved. 本站部份资源由网友发布上传提供,如果侵犯了您的版权,请来信告知,我们将在5个工作日内处理。
快速回复 返回顶部 返回列表