浅析Gigabase数据库查询优化的设计与实现

红薯 发布于 2009/07/13 13:10
阅读 1K+
收藏 1

摘   要:介绍了Gigabase数据库的特点及查询语言,详细讨论了Gigabase数据库中查询优化的具体实现。
关键字:Gigabase、查询优化、指针、反向指针、并行查询Implementation of Query Optimization In Gigabase
Wangxingfang
(Jinan University   GuangZhou  510630)
Abstract : Introduce the features of  Gigabase and discuss the implementation of query optimization in Gigabase in details.
Keys: Gigabase、query optimization、references 、Inverse  references、parallel query
 
1.引言
现 在许多大型的数据库系统在传统的关系型数据库理论基础上揉和了一些面向对象的特征,结合关系数据库和面向对象数据库的优点,使其可以处理复杂数据类型、提 供功能强大的查询语言及高保护性。Gigabase就是一个建立在关系模型之上的面向对象的对象—关系数据库,它支持结构、数组、字符串及指针等复杂的数 据类型,能够处理复杂的一对多、多对多的关系,提供了功能强大的查询语言及高速的查询功能,而且提供了方便灵活的接口。另外,Gigabase最优越的一 点还在于:数据库可以作为一个文件进行复制,而不需进行数据库的安装及复杂的配置。正是基于以上优点,目前Gigabase在许多应用领域都很受欢迎。
2.查询语言(Query Language)
Gigabase支持类SQL语法的查询语句,它为面向对象的编程和相关的数据库提供了更普遍的使用符号。与SQL语句不同的是,Gigabase的查询语句面向的是对象的工作,所以,每个查询的结果是一个类的一个对象集。Gigabase中的查询语句和标准的SQL语句之间的的显著不同是:
l       没有几个表之间的连接(join)和嵌套子查询,查询从一张表中返回一个对象集。
l       结构和数组能够被用作记录成员。exists保留字用来为数组中的元素定位。
l       既能为记录(对象)也能为记录成员定义用户方法。
l       支持对象之间的指针包括自动支持反向指针(Inverse Reference)。
虽 然Gigabase没有几个表之间的连接(join)和嵌套子查询,但它可以通过适当的查询语句来实现类似的功能,如下面定义了三个结构:Detail 、Supplier 、Shipment ,如果想得到某些供应商提供的某些具体货物的交货时间,那么在关系数据库中,实现此功能需查询语句为:
     select from Supplier,Shipment,Detail where
                 Supplier.SID = Shipment.SID and Shipment.DID = Detail.DID
                  and Supplier.company like ? and Supplier.address like ?
               and Detail.name like ?
而GigaBASE中通过dbQuery查询语句来实现;
dbQuery q = "detail.name like",name,"and supplier.company like",company,
                "and supplier.address like",address,"order by price";
三个结构Detail 、Supplier 、Shipment的声明:
struct Detail {
    char const* name;
    double      weight;
    TYPE_DESCRIPTOR((KEY(name, INDEXED), FIELD(weight)));
};
struct Supplier {
    char const* company;
    char const* address;
    TYPE_DESCRIPTOR((KEY(company, INDEXED), FIELD(address)));
};
struct Shipment {
    dbReference<Detail>   detail;
    dbReference<Supplier> supplier;
    int4                  price;
    int4                  quantity;
    dbDateTime            delivery;
    TYPE_DESCRIPTOR((KEY(detail, HASHED), KEY(supplier, HASHED),
                       FIELD(price), FIELD(quantity), FIELD(delivery)));
};

另外,Gigabase通过支持位处理操作扩 展了ANSI标准的SQL操作。操作符and/or不但能够适用于Boolean类型,而且还适用于整型。整型操作数应用and/or操作符的结果是整型 值按位进行与/或运算的结果。位运算能够用来使小集合有效的执行。同时,Gigabase支持消除整型和浮点指针类型的一个强力操作~。
3.查询优化的具体实现
为了减少查询执行时间, Gigabase数据库中应用了指针(indices), 反向指针(inverse references)与并行查询(query parallelization)。下面各小节详细介绍这些方法的优化策略。
3.1 指针
    指针是增强关系型数据库管理系统性能的传统方法。在Gigabase中应用了B-树结构来实现指针对数据的访问,这样大大提高了数据查询速度。
3.2 反向指针
3.2.1 反向指针简介
 Gigabase反向指针为建立数据库多个表的联系提供了高效与可靠的方法,并为数据库表记录的插入、更新、删除与查询优化提供了很大的方便。
这里数据库表记录的关系可以是一对一、一对多(或多对一)和多对多的关系,利用反向指针具体实现方法为:
一对一的关系通过在自身记录与目标记录中的指针字段来表示
一对多的关系通过在自身记录中的指针数组字段与目标表记录的指针字段来表示。
多对一的关系通过在自身记录中的指针字段与目标表记录的指针数组字段来表示。
多对多的关系通过在自身记录与目标表记录的指针数组字段来表示。
例表Detail与Contract是一对多的关系,下面声明:
class Contract;
class Detail {
  public:
    char const* name;
    char const* material;
    char const* color;
    real4       weight;
    dbArray< dbReference<Contract> > contracts;
    TYPE_DESCRIPTOR((KEY(name, INDEXED),
                KEY(material, INDEXED),
                KEY(color, INDEXED),
                KEY(weight, INDEXED),
                RELATION(contracts, detail)));
};
其中,dbArray< dbReference<Contract> > contracts与 RELATION(contracts, detail)就表示了表Detail与表Contract是一对多的关系,其他关系表示方法同理。
3.2.1 利用反向指针执行查询
Gigabase引进了反向指针,不仅使Gigabase可以处理复杂的关系,确保所有指针的一致性,而且可以选择更有效的查询执行计划,提高查询效率。
如查询某公司已发出的货物情况,查询语句为:
    q = "exists i:(contracts[i].supplier.company=",company,")";
最 直接的查询方法是:搜索表Detail,顺序检查符合该条件的每一条记录。若采用反向指针,首先利用指针在表Supplier 中搜索给定公司名的记录,然后用反向指针把从表Supplier已选出的记录在表Detail中定位,这样就可完成此次查询。由于指针查询明显地比顺序查 询要快,以及反向指针访问记录也是一种快速操作,测试表明这样查询执行的总体时间比直接的查询方法要快得多。
3.3 并行查询
3.3.1 并行查询技术
GigaBASE采用了查询内并行技术,即单个查询在多个处理器和磁盘上并行执行。GigaBASE在顺序扫描数据库表时,可以实现查询并行化,它能够把查询任务分为几个不会产生任何冲突的并行处理工作, 通过启动N个线程来分割表的查询,每个线程检测数据库表中的第 N-s 个记录,即线程0检测数据库表中的第 0,N,2*N,...个记录, 线程1检测数据库表中的第1,1+N,1+2*N,... 个记录,以此类推。每一个线程建立自己的查询表,当所有的线程都结束时,把这些查询表连接起来构成单个的查询结果表。如果N个线程分配到N个处理器上去执 行,那么执行查询时间比非并行查询减少N倍或更多。
3.3.2 并行查询实现
并行查询执行由两个参数控制: 产生的线程数、并行搜索极限值。第一个参数在dbDatabas类构造时指定或在方法dbDatabase::setConcurrency中设置,当该参数值为0时,要求 GigaBASE自动侦察系统中的CPU在线数目并且正好产生此数目的线程(线程的缺省值为1 );第二个参数是dbDatabas类的静态成员,规定为数据库表记录的最小值,应用程序在任何时间都可以改变该值。
注意:在下列情况下不能应用并行查询:
l 非顺序查询
l 查询执行中有指针
l 表中的记录数少于并行查询极限数
4.结束语
Gigabase采用了面向对象程序开发的思想,它可以处理各种复杂的关系,利用了指针与反向指针,大大地提高了数据库存取、查询、数据自动恢复等的效率,作为嵌入式数据库(或本地数据库)及Web 服务器数据库有很大的优越性。

参考文献:
1 现代数据库技术  刘云生著  国防工业出版社
2数据库系统概念 (美) Abraham Silberschatz  Henry F.Korth  S.Sudarshan 著  杨冬青 唐世渭等译
 机械工业出版社
3 数据库系统实现 (美)Hector Garcia-molina  Jeffrey D.Ullman  Jennifer Widom著  杨冬青 唐世渭等译 机械工业出版社
4 GigaBASE (Post Relational Database Management System)   Version 1.0   1999   K.A. Knizhnik     
5 ORR:Object-Ralational Rapprochement.  The Twenty-Third Annual International Computer Software and Applications Conference ,42—48,1999 IEEE

加载中
0
lei_wang168
lei_wang168
有没有关于oracle数据库的查询优化案例啊
返回顶部
顶部