首页 > 新闻系统 > 编程天地 > 文章正文

达梦数据库的大对象存取优化

2008-01-07 10:00:16 来源:IT专家网 作者:周淳 点击:
本文详细讨论了达梦数据库大对象存取优化的方法和思路,化后的DM5.6要比优化前快约30%左右;在读取速度上,优化后的DM5.6比优化前快90%左右,接近1倍,基本上与Oracle9i的读取速度基本持平。

  
  前言

  在数据库系统中,大对象往往是指这样一种类型的数据:这些数据的体积较大,占用的字节数在KB级或MB级,有的甚至达到GB级。对于DBMS来说,这些数据不具备结构性,只是单纯的字节流,存储时需一次性存入,读取时需一次性取出。日常生活中常见的图片、视频、音频以及大数据量大文本文件,都属于大对象数据的范畴。现有的各种关系型数据库管理系统也都提供了丰富的数据类型和完备的存取方法来管理大对象数据。毫无疑问,作为大型通用的数据库管理系统,达梦数据库为大对象的存储类型提供了全面的支持,在大对象数据的存储组织方式上采用B树结合从表的方式达到了很好的存取效率。然而,与Oracle的大对象存取效率相比,达梦数据库还有差距。为此,达梦数据库开发部门在近期对达梦数据库的存取策略进行了改进和优化。测试结果表明,优化后的达梦数据库在大对象存取效率方面与Oracle相比,要略微胜出。本文详细讨论了达梦数据库大对象存取优化的方法和思路,其目的主要有两个:(1)为使用达梦数据库的广大开发人员详细解释系统中大对象的存取方法,使他们能够基于达梦数据库开发出高效的应用系统;(2)抛砖引玉,向广大开发人员介绍达梦数据库,希望能够引起更多人的关注,获得更多的改进建议。

  1. 原有的大对象存取方法及其不足

  1.1 大对象存储组织方式及其不足

  不同于Oracle的簇存储方式,达梦数据库中,大对象数据的存储结构采用和普通数据一样的B树结构。对于每一个具有大对象字段的表(称之为主表),系统会为其设置一个从表,此表专门用来存储这个表的大对象数据。从表的命名规则是主表名加DMBLOB后缀。普通用户对从表亦有访问权限,但不建议对从表直接进行操作。从表的记录格式固定如下:

主表中此大对象数据所在记录的行编号

主表中此大对象数据所在元组的列编号

将大对象数据分片后的分片编号

大对象数据

ROWID

COLID

FRAGID

DATA

表1 达梦数据库中大对象从表结构

  当往主表插入一条含大对象的记录时,系统将判断此记录的大小是否超过950字节,如果小于950字节,那么系统将这条记录直接插入到主表之中;反之,将这条记录中的大对象数据插入到从表之中。系统中同时规定,从表中每条记录的DATA字段的最大值为950个字节,如果一个大对象数据超过950B,那么需要将这个大对象划分成若干分片,每个数据分片表1中的其余三个字段组成一条从表记录插入到从表中。

  原有系统的这种做法简单易行,在基本的存储模块上增加了分片模块和重新组装模块即可实现了对大对象的存取。然而,这种做法有两个缺陷。

  1.从表记录中数据分片允许的最大值太小(为950个字节),导致一个体积较大的大对象在存储时,需要被分解成很多分片,在提取该大对象时,又需要重新组装众多分片。这些操作将耗费大量CPU时间。

  2.数据分片的最大值太小还导致了空间利用率过低。达梦数据库中,从表中的ROWID,COLID,FRAGID字段长度分别为8,2,4字节,每条物理记录另有控制信息26字节。这样,从表中每个数据分片需要有40个字节的数据来进行标识。假设需要往某主表插入100万个大小为1K的大对象,由于1KB > 950B,每个大对象都需要拆成两条记录插入到从表中。简单计算可以得出,存储每个大对象需要的额外字节为80B,100万个大对象,共1GB大约需要80MB额外空间,将近有10%的空间被用来标识大对象的数据分片,由此可以看出空间浪费较为严重。

  将数据分片的最大值设定为950字节

9 7 3 1 2 3 4 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

本周软件下载排行

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203