数据库索引十篇

时间:2023-03-23 20:48:59

数据库索引

数据库索引篇1

关键词:B树结构;外存储原理;MySQL索引

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)34-8079-02

本文的内容结构如下所示:

第一部分主要从数据结构及算法理论层面讨论B-Tree。

第二部分结合外存储器的存储原理,讨论使用BTree作为索引的原因。

第三部分讨论MySQL数据库中InnoDB数据存储引擎中的索引――改进的B+Tree的结构,及其优点。

1 索引的数据结构及算法基础

数据库查询是数据库的最主要功能之一,提高数据查询速度是数据库索引的主要目标,通常,研究者通过优化检索算法来提高查询速度。查找算法有几类,一种是顺序查找,算法的复杂度为O(n),另外有二分查找、二叉树查找等。一般来说,一种查找算法对应一种数据结构,例如顺序查找对应连续的数据,二分查找对应排好序的数据,二叉树搜索对应二叉查找树。但是,这类数据结构还完全不能满足各种查找需求。比如,二分查找的条件要求将数据排序,但是数据库中不可能同时将两列都按顺序存储。所以,数据库系统必须维护满足特定查找算法的数据结构――索引,以实现更高级的查找算法。

当前,大部分数据库系统都采用BTree作为索引结构,其原因在于BTree的数据结构和主流外存储器的存储原理。下面先介绍B-树的基本结构。

B-树的基本属性:

1) 定义任意非叶子结点最多只有M个儿子;且M>2;

2) 根结点的儿子数为[2, M];

3) 除根结点以外的非叶子结点的儿子数为[M/2, M];

4) 每个结点存放至少M/2-1(取上整)和至多M-1个关键词;(至少2个关键词);

5) 非叶子结点的关键词个数=指向儿子的指针个数-1;

6) 非叶子结点的关键词:K[1], K[2], …, K[M-1];且K[i] < K[i+1];

7) 非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键词小于K[1]的子树,P[M]指向关键词大于K[M-1]的子树,其它P[i]指向关键词属于(K[i-1], K[i])的子树;

8) 所有叶子结点位于同一层;

如图1所示,是B-树的基本结构。关于如何在一棵B-树中按照key的值去检索数据,描述如下:

1) 以根节点作为入口,对key集合作二分查找,如果找到目标key,则可以直接返回data数据。否则进入第二步。

2) 找到相应区间,根据区间的指针指向的point,得到对应的节点,执行1中过程。如此递归,直到找到目标节点,或者最终返回null point。

加速一个B-树的度为d,有N个key,现在为其建立索引,那么这棵B-树的高h最大为logd((N+1)/2),查找目标key,查找过程中需要遍历节点个数的复杂度为O(logdN),与二叉查找和顺序查找相比,B-树是一个效率很高的索引数据结构。

图1 B-Tree的结构

通常,数据库中数据都很多,导致建立的索引也很大,很难全部存储在内存中,因此,通常将索引保存在磁盘中。这样,在索引中查找时,就需要进行磁盘I/O,而与内存存取速度比较,磁盘I/O的速度要慢几个数量级。所以,通常我们将在查找过程中磁盘的操作次数作为我们评价一种数据结构是否适合作为索引的关键信息。那么,建立好的索引就是要尽量减少查找过程中磁盘I/O的次数。

了解磁盘的存取原理,对应理解使用B-树作为索引结构必不可少。

2 磁盘的存储原理

磁盘的内部结构如图2所示。

操作系统在读取磁盘数据时,将数据逻辑地址传给磁盘,磁盘会将操作系统传来的逻辑地址转换为物理地址以确定需要读取的数据的具置,即数据所在的磁道和扇区,那么,为了读取目标数据,磁盘需要将磁头移动到对应的那个扇区上,磁盘是通过横向移动磁头做到这点的。移动磁头的过程叫做寻道,而这个过程所耗费时间叫做寻道时间。然后磁盘需要通过旋转将目标扇区旋转到磁头下,这个过程所花费的时间叫做旋转时间。

图2 磁盘的内部构造图

磁盘的存储结构和寻址方式,导致了磁盘的存取速度比通常的主存储器慢几个数量级。磁盘在寻址过程中的需要的机械运动的时间,是导致磁盘在查找存储数据速度缓慢的主要原因。所以,如果想要提高数据库存储速度,减少磁盘IO次数是主要途径。其中一个可行的操作方案就是:每次寻址之后,预读一定的磁盘空间的内容。这样在读取相同大小空间的数据内容时,减少了机械寻址的时间,可以大大减少磁盘的存储速度。实际上,磁盘也正是这样做的。通常,磁盘在读取数据的时候,都会预取出一定长度的数据块,称为页。通常,页是4k大小。由前面对B树的介绍我们可以知道,进行一次检索需要访问h(B树的高度)个节点。那么,h的大小即是衡量一个索引好坏的标准。假设一个数据库表中需要保存N条信息,B树中每个节点保存d个key,那么由前文可知:h=logdN;d越大,h就越小。利用磁盘的预读机制,我们可以将一棵B的节点大小设定为一个页的大小,那么,在磁盘在预读的时候,取出的一个页都是有用key信息,这样大大提高了数据的存储效率,加快了检索的过程。

由以上内容可以判断,B-树非常适合作为索引结构,其查找效率是非常高的。

3 MySQL中的索引结构分析

B-树有多重改进版本,MySQL使用的B+树就是其中一种。

B+树的改进有以下两点:

1) 节点的指针数量可key数量一一对应。

2) 内节点不保存data,只保存key和指针;叶子节点只保存key和data,不存储指针。

MySQL中索引的结构如图3所示:

B+树的性能分析:

从B+树的性质我们可以知道,B+树的内节点不保存data值,只保存key和指针。那么,假设一个页的大小空间用于保存一个节点,这样在同一个节点中能够保存的key值比B-树结构会更多,即d更大。由h=logdN可知,h更小。所以B+树比B-树更适合作为索引结构。

由图3中可以看到,MySQL索引的结构,是一种改进的B+树,其每个叶子节点中都包含一个指向相邻叶子节点的指针。添加这个指针的目的是为了提高区间访问的性能。如图3所示,查询key为从18到49的所有数据记录,当找到18后,只需顺着节点和指针顺序遍历就可以一次性访问到所有数据节点,极大提到了区间查询效率。

4 总结

使用数据库索引是提高数据库查询速度的关键因素,合理利用索引,对于提高数据库性能有很大帮助。数据库的性能优化需要对数据库的索引内部结构及其原理有深入的了解。该文阐述了BTree索引的基本原理,并说明了MySQL数据库的索引实现,为索引调优和数据库性能优化提供了有效的帮助。

参考文献:

[1] D Comer.Ubiquitous B-tree; ACM Computing Surveys (CSUR), 1979.

[2] Codd E F.A relational model of data for large shared data banks L[M].Communications of the ACM, 1970,13(6):377-387.

数据库索引篇2

要]

本文对地方文献索引的编制及索引数据库的建设进行了详细论述,对公共图书馆地方文献的开发

利用有一定的借鉴意义。

佳木斯市图书馆是一个中等城市公共图书馆,从2002年11月起应用索引学的原理,利用人工和计算机相结合的方法编制地方文献索引数据库。经过半年多的学习和探索,基本上解决了相关问题,现将我们的认识及做法整理成文。

1 地方文献特点和读者需求是编制索引的依据编制地方文献索引是一项复杂艰巨的工作,这是由地方文献的特点决定的。

首先,地方文献范围广、时间长、载体多。涉及历史学、社会学、地理学以及政治、经济、文化和自然科学的许多学科知识和资料。有照片、地图、光盘、录像带、剪报、单篇文件资料、手稿等多种文献形态,其中还有大量内部出版物和非出版物。

其次,地方文献面向社会公开使用,读者对象有工人、学生、教师、科研人员、机关干部、作家、宣传媒体等多层次、多成份人员。他们查阅地方文献的目的不同,需求也不同。

第三,地方文献作为图书馆具有一定价值的文化遗产留传后世,必须考虑到后代人的检索方便和个性需要。

面对这样复杂的情况,我们要尽可能地增多检索途径,索引系统、索引款目、索引语言一定要通俗易懂、使用方便,使各类型读者都容易掌握。

2 解决好编制地方文献索引的基本问题

编制地方文献索引数据库,既要符合传统索引理论的基本原则,又要适应利用计算机建立索引数据库的现状。在具体工作中要解决好以下几个基本问题:

2.1 收录范围的界定

将历史上反映佳木斯地区的文献纳入收录范围。侧重资料性、史料性强的文献,对技术方法、管理方法和一般理论研究的文献不收,但具有地方特点的技术方法和管理方法除外。

2.2标目的标引

即从文献的篇名和内容中编选各种类型的索引标目。根据设计,拟建立的地方文献索引数据库应具有题录索引、人物索引、地名索引、单位索引等几种

类型索引。现分别论述如下:

2.2.1

题录索引。编制题录索引首先要解决各种类型文献篇名标引统一的问题。我们规定,报刊均以原有自然篇名标引;整册图书如内容全部属于地方文献的以书名作为篇名标引,而图书中有些章节属于佳木斯地方文献的则以章节名称作为篇名标引;文集、汇编等有多篇文章的以各篇文章的篇名标引;重要的照片、地图、单篇文件及录像带、光盘均应著录篇名,以篇名标引。题录索引以篇名所包含的主题概念按类序法整序编列。每个篇名都要有一个作为归类、整序依据的主要主题概念,这一主题概念必须反映 : ①为什么将这篇文章收入地方文献; ②属于地方文献类目表的哪个类目。如《乌苏春秋》是纪实小说,被收入地方文献是因为其内容描述了1946年饶河县的情况,归入解放战争时期的史料类;又如《赫哲族渔村和我的绘画道路》收入地方文献是因其反映了三江地区赫哲民族的文化,因而取"赫哲族"为主要主题概念,归入赫哲族类。

标引篇名主要有3种方法:①原篇名照录。适用于篇名不长,且表达的地方文献主题概念清楚者。②原篇名删节。对原篇名较长、特别是报刊文章,一般删除其虚词或副标题,留下反映地方文献主题概念的主标题即可。③原篇名加注。篇名中地方文献主题概念不清者应当标出。此有两种形式,一是加副标题,如《舞台上下五十年》加副标题后标为:《舞台上下五十年--评剧表演艺术家李岱山生平事迹》 ; 二是加括号,如《黑瞎子与狐狸》加括号后注为:《黑瞎子与狐狸(赫哲族民间故事)》。

2.2.2 人物姓名索引。只标引收录范围内的重要人物。对人物的曾用名、别名等均加括号在常用名后标引,不必做像手工索引那样的轮排和参照。因为计算机会自动将任意一个人名检出。

2.2.3 地名索引。考古发掘、重要事件发生地均要标引出所在市、县名以及村、屯或山川名。凡涉及地名变迁的,要将原地名加括号标于现地名之后。

2.2.4

单位名称索引。 单位名必须标引全称,并连同市、县名一起标出。已变更的单位名加括号标于现单位名之后。

2.3 排序方法的应用

地方文献索引的编制以及数据库检索中款目的排序占有重要的地位。传统的索引理论使用类序法和字序法,我们认为更应重视时间排序法的应用。

2.3.1 编制类目表。题录索引是以篇名的主要主题概念按类序法排序的。我们要做的是编制一部实用的类目表,这是一项困难的工作。我们曾两次仿照《中图法》的22大类进行编制但均告失败,其原因是《中图法》是按学科分类的,而地方文献要按事物、事件和人物分类。后来我们又进行了第三次的大胆尝试,完全依照地方文献的内容自编了一部类目表。其主要特点:①将最常见、最重要的专题放在突出地位单独立类,如"行政区划和建置沿革"、"著名人物传记"、"重要单位事迹"、"赫哲族"等设为一级类目。②设置的21个类目均为独立的专题,它们之间没有逻辑关系,但其内部的上下级类目之间严格按照逻辑关系设置类号。③尽量减少类目级次,一般只设二级类目,少数文献量较大的类目设至三级。这样设置类目表十分简洁,方便了工作人员的归类和读者的检索利用,而且类目名称及其说明注释文字使用的大部分是规范主题词,为计算机检索创造了条件。

2.3.2

人物、地名、单位名的索引,均使用汉语拼音音序排序,由计算机自动生成,在应用中比较方便。

2.3.3

时间排序法的应用。在编制和使用地方文献索引数据库中时间排序法起到了重要作用。我们规定在输入的每条索引数据中要包含一个时间项,尽可能准确地标出地方文献中事件发生的时间。如历史人物和革命领导干部要标引其到达佳木斯或在佳木斯任职的时间 ;

劳动模范、先进人物要标引出被授予荣誉的时间;优秀运动员要标引其创造纪录或夺取名次的时间;科学家要标引研究成果被评定的时间;革命英雄要标引其在佳木斯参加革命的时间;文章、讲话著作标引其出版、发表的时间等等。在索引数据库中时间成为一个检索点,并具有排序功能。它可使数据库中的数据按时间次序排列,形成一部大事记的资料线索。题录索引、人物索引、单位索引也有二次排序、三次排序的功能。对题录索引按类排序后再按时间排序,如抗日斗争史料,按时间排序后对研究抗日斗争历史有很大益处。

3

利用计算机建立索引数据库

我们设计制作的地方文献索引数据库应用软件共有4个界面。

3.1 输入界面

具有输入、储存、建库的功能。共有篇名、著者、出处、附加说明、人物、地名、单位和类号、时间等9栏,与手工索引格式完全相同。按照格式准确输入即可完成建库。其中除附加说明项内容不直接在界面反映外,其他8项均有检索、聚合、排序的功能。每输入一次即可完成分属于题录、人物、地名、单位等4个索引的功能。在输入界面上还附加浏览、编辑修改和链接已输入数据的功能。

3.2

检索界面

检索界面是地方文献数据库最重要的界面,体现了数据库的主要功能。

滚动浏览检索功能。采取列表显示的办法将每个输入界面的1组数据列为1格,一个界面可同时浏览20多条数据,并可用鼠标拖动浏览,为检索提供了有利条件。

聚合、排序检索功能。对人物、地名、单位、类号、时间5项做了排序功能的限定,只须在界面上点击列在标头上的名称,便可实现数据的聚合排序,读者可轻松查到所需的大部分数据。

专指对象检索功能。已有明确的查找对象,可以通过键入专指的篇名、人名、地名、单位名查到所需要的数据。如地方文献索引数据库收录了佳木斯市各届党政领导人员、各界名人活动的资料,只要键入人名便可将他们每个人的重要讲话和一切活动资料检索出来。一人多名者,也可以通过其任意姓名检出其全部资料。

多层次逐级检索功能。第一层次可将以人名、地名、单位名标目的标引名称检出(同名称者全部聚合在一起显示出来),确定检索对象。第二层次可在界面上通过通用款目的篇名、著作、出处等检索到检索对象在文中的地位。第三层次检索可通过附加说明项的记载了解。通过3个层次不断加深对资料的探求,读者完全可以确定自己要检索的文献对象。

分解、重组、异排检索功能。通过逻辑操作,使用大于、小于、等于、包含等标识符号,对各种数据重新分解、组合和排序。

也可通过时间途径直接进行检索,如提供"3·15"这一数据,即可查到佳木斯市1938年日寇对地下党员和爱国人士的大搜捕事件的全部资料线索。如要查找历史上各年"8月"或"8月15日"发生的事件,亦可通过这一途径使有关数据单独聚合起来。

链接检索功能。附加说明项因文字较多,没有排入检索界面列表,只在列表格式项目中标注了"MEMO"代码,用鼠标点击即可显示为附加说明项单独设立的界面。附加说明项界面的文字量不受界面限制。

3.3 印刷界面

地方文献索引数据库具有自动生成题录、人物、地名、单位4部文本索引的功能,为此设计了印刷界面,预先将要印刷的文本索引(或其部分内容)调入,进行预览,确认无误后打印出文本索引。

3.4 图片界面

以链接方式浏览储存于计算机硬盘或光盘上的与地方文献相关的照片、地图、表格等。

通过以上多个界面和多种检索功能的设立和实现,建成了较为细密的地方文献索引网络。模拟读者的检索要求做了多次实验,并不断补充使之趋于完善。我们计划配合专家学者,进行历史学、社会学、地理学、民族学、人物传记等方面的研究,为其提供丰富的资料线索。地方文献索引数据库还可为网上宣传,举办地方历史展览,编写爱祖国、爱家乡的政治思想教育材料提供丰富的资料来源。

4

边学习、边工作取得双丰收

佳木斯市图书馆最近几年没有编制过任何索引,也没有人员研究索引学,更没有自行开发任何应用软件。这次建设地方文献索引数据库中我们大胆尝试,勇于创新,积极学习索引学,举行多次报告会,召开十多次研讨会,翻阅各种类型索引达几十部,对索引学和编制索引的办法有了初步理解,为开展工作打下了坚实基础。我们本着科学性、实用性和可操作性的原则,反复研究设计,先后修改6次,其中涉及的各个问题都是从模糊到清晰逐步解决的。我们深感地方文献索引在图书馆应用的意义及计算机软件用于索引开发的价值。

[作者简介]

王微

数据库索引篇3

关键词:移动对象;移动对象索引;无限制空间;网络空间;R树

中图分类号: TP311.132

文献标志码:A

Access methods in moving objects databases

XIAO Hui1,2, LI Qing-quan1

(

1. Transportation Research Center, Wuhan University, Wuhan Hubei 430079, China;

2. School of Remote Sensing and Information Engineering, Wuhan University, Wuhan Hubei 430079, China

)

Abstract:

In the paper, the access methods of moving objects are summarized. Firstly, we classify moving objects indexing based on their underlying structure: moving objects indexing in unconstrained space and moving objects indexing in network space. And then, the analysis of indexing for the past, now and the future location is presented. Finally, we discuss the future research direction of moving objects indexing.

In the paper, the access methods of moving objects were summarized. Firstly, the moving objects indexing was classified according to the underlying structure: moving objects indexing in unconstrained space and moving objects indexing in network space. And then, the analysis of indexing for the past, now and the future location was presented. Finally,the future research direction of moving objects indexing was discussed.

Key words:

moving object; moving objects index; unconstrained space; network space; R-tree

0 引言

近年来,移动对象的管理逐渐成为研究的热点。越来越多的与位置相关的应用需要处理位置随时间变化的空间对象,例如出租车、飞机、油罐车、犯罪分子和野生动物等。这些应用服务的主要目的是有效地存储并查询连续运动的移动对象,这就需要一个良好的索引结构。

根据移动对象的特点,移动对象m是一个空间位置随着时间不断变化的对象,可表示为一系列的三元组m(id,siti), id是移动对象的标识符,si表示移动对象的位置,ti是表示时间戳。因此,一个随着时间变化位置的点对象可以表示为三维时空中的线段集。由于移动对象时空数据的特性,移动对象索引应该考虑当前时空数据以及历史轨迹数据的处理,具体说来,就是在索引树结构中插入及分裂操作,压缩及删除操作。移动对象索引是一个动态树,需要不断地插入移动对象当前的时空信息,插入与分裂操作算法的优劣直接影响着索引的性能。同时随着时间的进步,会产生大量过时的数据,并占用大量的空间,这些数据需要采用压缩与删除操作,以减少数据存储空间的占用,这也是索引结构所需要考虑的操作。

时空数据库中,数据具有时间与空间双重变化的属性,数据结构相当复杂,并具有海量的时空数据,位置服务应用也要求能实时响应,所以时空数据的索引结构更为重要。根据移动对象的运动空间,可将移动对象分为无限制空间的移动对象和网络空间的移动对象两类。据此,本文分别讨论了两种空间下移动对象索引发展情况。移动对象索引不仅要考虑索引空间还要考虑索引时间,为了支持对移动对象的查询,必须对移动对象的不同时态进行索引,包括移动对象的完整历史轨迹索引、移动对象的当前及未来位置的索引。

1 无限制空间内移动对象索引

1.1 当前及未来位置索引

为了预测移动对象未来位置,需要存储运动附加信息(例如,速度和目标位置)。在D 维空间中,通过一个参考位置,一个移动对象的运动可以建模为x┆ref=(x1,x2,…,xd),其中参照时间是t┆ref=0,速度向量是v=(v1,v2,…,vd)。那么,在t>t┆ref的任意时刻,移动对象预测位置xt=x┆ref+v(t-t┆ref)。简而言之,可以假设对象在一维空间中运动。对象运动可以用线性方程表示xt=at+b,a和b是常量。这里a是移动对象常量速度,b是移动对象起始位置。另外,可以把时刻t┆ref=0位置作为参考位置。当前及未来位置索引方法主要可以分为三类,原时空索引方法、空间转换索引方法、参数化时空索引方法;其中参数化时空索引方法是对当前及未来位置索引比较有效的方法。

1.1.1 原时空存取方法

索引移动对象的PMR-quadtree[1]方法利用了PMR-quadtree作为底层结构来索引移动对象未来轨迹。主要问题是当对象更新时,整个索引就被破坏掉,然后需要根据给定新位置信息重新构建索引。为了避免过量更新操作,索引在每ИΔt时间后重构。在抽象层次上,有限的时间维被分割为等大小的时间片,每个时间片对应一个Δt。对于每个时间片Δt,Ц据运动方程建立一个PMR-quadtree。然而,由于存储有限,只存储了当前的PMR-quadtree。这种方法的缺点是:1)因为通过MBR表示轨迹,所以产生了大量的死空间;2)由于所有轨迹有相同的时间值,所以数据是分散的。

1.1.2 空间转换方法

为了克服这些缺点,提出了将时间空间域转换到另一个空间的方法。主要思想是在新的空间中,容易表示和查询数据。

文献[2]中采用对偶变换(Duality Transformation,DT)将时空域中的线段(移动对象轨迹)变换为二维空间中的一个点来进行索引,即把原始空间时态域中的线性运动方程x=at+b表示为二维变换空间中的一个点(a,b),其中速度大小a表示水平轴方向,参考位置b表示垂直轴方向。由于二元变换空间中数据分布的不均匀性,二元变换空间点使用kd树来进行索引。相应地,原始空间时态域中的窗口查询则被映射为二元空间的多边形区域查询。

动态数据结构对偶变换[3]是对偶变换的另一种形式。二维空间(x,y)中的移动对象加入时间维表示为(x,y,t),轨迹分别可以投影到(x,t), (y,t)平面。对偶转换分别在这两个平面上进行。范围查询的结果是这两个平面上范围查询结果的综合。这个方法没有使用类kd树的结构,而是使用了运动数据结构索引对偶空间。

┑4期 ┬り偷:移动对象数据库索引研究综述

┆扑慊应用 ┑30卷

SV模型[4]采用了更激进的方法,它将移动对象建模为四元组(s,e,ts,v0),而不是轨迹。4个参数分别表示起始位置s,目的地e,开始时间ts和初始速度v0,在二元空间中使用起始时间t和移动对象目的位置e分别作为水平轴和垂直轴。同样原始空间时态域中窗口查询则被转换为二元空间中多边形查询,并使用SS树来进行索引。由于SV模型限定速度为常量,在公路交通控制系统、飞机调度中有较好的应用。

PSI[5]称为参数空间索引技术。利用R树索引2d+1维空间,d维对应于参考位置x┆ref,并且d维对应速度,而1维对应时间维v。对象运动被建模为一个在2d+1维中被MBR包含的轨迹。主要的思想是时间范围[ts,te],在这个范围内,对象运动时有效的,被存储在索引中。同时,没有全局时间参照的概念。

对偶转换方法的缺点是:1)二维空间不能捕捉原始空间中的所有信息;2)不能保证在原始空间中彼此接近的对象在二维空间中仍然彼此接近;3)在原始空间的矩形范围查询总是被转化为二维空间多边形范围查询,导致算法非常复杂。

1.1.3 参数化时空存取方法

鉴于对偶转换的缺点,利用参数矩形索引原始时空数据的索引方法逐渐为大家认可。主要思想是构造时间的边界矩形框函数,并将覆盖的移动对象保存在相同的矩形框内。在这种情况下,可以查询任何时刻的对象。

TPR树[6]是建立在R树上的一种结构,定义了时参范围框形,能在时间上持续地跟随其包围的移动对象移动。在构建时刻,TPR树建立一个保守的时参范围矩形框,来覆盖一个移动对象集合。时参范围矩形框的下界根据所覆盖对象的最小速度设置,而上界根据所覆盖对象的最大速度设置。因此,保守矩形框的边界不会收缩,只会扩大,这样可以保证总是覆盖移动对象。为了避免边界矩形框变得很大的情况,当更新对象位置时,所在路径的边界框都要重新计算。移动对象的运动利用线性函数表示,当线性函数参数变化时,则更新索引。

PR树[7]与TPR树类似,但PR树考虑了移动对象的运动空间范围,利用参数矩形表示移动对象运动的空间范围。每个参数矩形有一个时间间隔特征,时间间隔表示移动的开始时间与结束时间。TPR树中,移动对象被认为是不停运动的,PR树考虑了移动对象的结束时间。因此,移动对象是被表示为多边形而不是一条轨迹。在移动结束时刻,移动对象的边界矩形可以通过移动对象的凸包计算得到。

VCIR树[8]的主要思想是为R树中的节点增加一个v┆max的属性,v┆max存储这个节点包括的所有对象的最大允许速度。对于时间t上的查询,所有的边界矩形是利用v┆maxЮ沟摹N南[8]认为用散列的方法管理移动对象,随着时间的推移必会带来过多的溢出页面,因此建议使用查询索引(Query Indexing,QI)和速度约束索引(Velocity-Constrained Indexing,VCI)来管理移动数据。与TPR树类似,它们都随着时间变化扩展边界矩形从而尽可能地包含移动对象,但其基础模型是不同的。VCI索引中,并不需要知道每一个移动对象的精确速度,它仅仅限定了一个最大的速度,所有移动对象速度不能超过这个速度值。TPR树中,必须知道每一个移动对象的速度。VCI索引是特别针对连续查询的共享执行处理提出的。

REXP树[9]是TPR树的扩展,它给移动对象赋予了失效时间的概念,主要想法是避免对移动对象长期的不更新。为了利用失效时间信息,REXP树使用了一种新的边界区域。在边界区域被重新计算之前,REXP树从索引中移除失效的节点。

TPR*树[10]利用了与TPR树相同的结构和假设。TPR树利用了与R*树相同的插入和删除函数,而TPR*树提出了一种新的插入和删除算法,并满足最小代价函数。

1.2 历史轨迹索引

历史轨迹随着时间的增长而增加,移动对象持续地发送位置信息,若要保存移动对象每个时刻的位置几乎是不可能的。把对移动对象轨迹的索引方法分为三类,第一类方法是扩展现有的空间索引方法,将时间维简单地视为空间维的扩展;第二类方法是区别空间与时间数据,并考虑时间维单调递增的特性,而不是简单地将时间维视为空间的另一维;第三类方法是首先索引轨迹数据的时间维,然后索引空间维,这是从结构上解决轨迹索引的有效方法。

下面介绍各种索引方法。

1.2.1 空间索引扩展方法

这类索引主要关注空间域的处理,时态域作为辅助对象处理。

RT树[11]是结合空间索引方法R树[12]和时态索引方法TSB树[13]而产生的。RT树是在R树中加入了一个新的数据项来表示当前对象的开始时间和结束时间。一个RT树记录的形式为(id,MBR,ts,te),其中id是对象的标识,MBR是对象的最小外接矩形,ts,te是对象有效的时间间隔。在空间查询方面,RT树的效率与R树相同,但是,在进行时间片查询或者时间段查询时,通常要遍历整棵树。

3D R树 [14]是2D R树在时空中的自然扩展,它把时间维看作时空对象另一个空间维度,主要思想是避免区分空间查询和时间查询。3D R树适于位置与范围随时间变化较小的时空对象,它的优点是实现简单,支持时间和空间查询。缺点是对于生命期较长或者位置变化较大的对象,三维MBR也过大,导致大量重叠,降低索引效率;另外,时间片查询不再依赖于查询时间上的单元,而是依赖于历史数据中的所有单元。

STR树[15]是R树的扩展。它以最小包围盒(Minimum Bounding Box,MBB)组织移动轨迹中的每一个线段,叶节点的形式为(id,tid,MBR,o),其中id是轨迹标识,o是轨迹在MBR中的方向。STR树的主要思想是保证空间的紧凑以及保留轨迹信息,同一轨迹的线段在R树中尽量保持邻近。参数p表示保存轨迹所需的层次数目,用来平衡空间相邻属性与轨迹保存之间的关系。当插入一条新线段时,在R树中要尽量让这条线段在层次p内保持与它的前一条线段的相邻。pг叫蛟嚼于保持轨迹线段的相邻性,但越不利于轨迹的保存。STR树采用了不同于R树的插入/分裂算法,传统R树在插入时遵循的是空间上的最小扩张原则,而STR树不仅要考虑空间上的邻近关系,而且要考虑部分轨迹保持,也就是说尽量使插入的线段与同一轨迹在一起。其分裂算法也是从部分轨迹保持目的出发,使得操作后的索引结构仍然保持较高的效率。

1.2.2 重叠及多版本结构

这类索引把时间维与空间维独立表示,每个时刻的空间数据对应一个索引结构(例如R树),整个轨迹将是由若干个时刻对应的独立索引结构(例如R树)组成。这种方法的缺点是存储空间的开销非常大。

MR树[11]在R树中利用了重叠B树的思想。主要思想是避免R树在每个时间戳分开存储带来的巨大存储量,通过在连续的R树中消除对象的冗余存储来节省存储空间,不同的父节点指向在不同时间戳下保持不变的同一个节点。在时间片查询中,这种方法堪称完美,查找总是直接指向对应时间片的根节点,然后在对应的R树上进行空间查询即可。然而,对于时间窗口查询,这种方法是低效的。

HR树[16]称作历史R树,非常类似于MR树。HR树有具体的算法并给出了在R树上重叠B树的执行细节。在四叉树利用了重叠树的思想,产生了重叠四叉树。

HR+树[17]是为了避免HR树中中间节点的重复问题。HR树中存在中间节点的重复问题是由于任意节点容纳属于同一根节点的唯一记录,同一根节点的R树属于同一时间戳。HR+树放松了这个条件,它允许不同时间戳的中间节点指向同一叶节点。然而,每棵R树中这个叶节点的父节点具有唯一的权限存取与它同一时间戳的叶节点数据部分。换句话说,叶节点可以有多个父节点,但每个父节点只有权存取它对应的部分。

MV3R树[18]主要是基于多版本B树的思想。主要方法是建立两棵树,一个MVR树用来处理时间戳查询,一个3D R树用来处理长时间间隔查询。短时间间隔查询根据阈值来判断由哪棵树进行处理。它结合了多版本R树对时刻查询的有效性和三维R树对长时段查询的有效性,同时又克服了两者的缺点。

PPR树中的贪婪算法[19]扩展了PPR树,以便支持时空应用,PPR树是主要用于双时态数据库的索引结构。将PPR树直接用于时空引用,这将导致产生大量死空间,为了解决这个问题,使用了人工目标更新的方法。最优贪婪算法用于为线性移动对象的人工更新找到最优位置。在文献[20]中利用了多项式函数来支持目标的移动。

1.2.3 面向轨迹存取方法

这类索引主要考虑面向轨迹查询,但也支持空间查询以及空间聚集查询。

TB树[15]称作轨迹束索引,它保存了轨迹,是类R树的结构,每个叶节点仅包含属于同一轨迹的线段,它是第一个支持轨迹查询的索引结构。它与其他R树变体的区别在于TB树的插入算法不依赖移动对象的时空关系而是依赖移动对象标识ID。这种方法的缺点是空间上邻近的不同轨迹的线段被存储在不同的节点中。TB树的增长是自左向右的。最左边的叶节点是最早插入的节点,最右的叶节点是最后插入的。TB树是仅处理轨迹的STR树 的扩展。

SETI[21]索引方法将静态的空间区域进行非重叠的分区,这种想法主要是考虑到相对于时间维的持续连续变化可以认为空间维是几乎静态的,另外,它使用六边形替代传统的矩形作为索引目标的外接框,并对空间进行分区。在每一个分区内,使用R树索引轨迹段。分区函数尽量将同一轨迹的线段存储在同一分区内,轨迹的存储主要考虑最小化R树中空间维度的影响。穿过两个空间分区的轨迹段将被截断,并且在两个分区都存储轨迹段的信息,但缺点是导致查询结果的重复。

SEB树[22]即起止时间戳B树(The Start/End timestamp B-tree),与SETI的思想类似。空间分区为若干可重叠的区域,这些区域利用SEB树索引,SEB树只考虑移动对象在区域内的开始与结束时刻,移动对象散列在区域中。与SETI的区别在于,SEB树中并不直接索引轨迹,而是索引二维点。在空间分区过程中,具有相似轨迹的点尽量保持在一起。

PA树[23]中作者认为最小外接矩形不能表示轨迹的平滑,应该将轨迹近似地表达为一系列连续地多项式运动函数,并提出了PA树。PA树是一个参数式索引,它索引表达轨迹的多项式。PA树与R树类似,它们的区别在于R树结构中的最小外接矩形在PA树中用多项式系数表示。

2 网络空间内移动对象索引

在现实世界中,大多数的移动对象其实都不是无限制的,它们往往是被限制在网络中,例如汽车总是在道路网络中运行。网络空间中移动对象的表达也更为简洁,不需用二维地理坐标,可以利用网络中的线性参考位置表示移动对象的位置。这种简洁的表达方式也有助于提高了移动对象索引的效率。下面介绍几种重要的网络空间内移动对象索引方法。

FNR树[24]是道路网络中移动对象索引方法。FNR树是移动对象历史轨迹的索引,它是一个混合树结构,由一个二维R树与一维R树组成。二维R树索引道路网络的每一个路段,每一个叶节点中包含指向一维R树的指针。一维R树索引在某个时间间隔内与路段对应的动态移动对象。这种方法的缺点在于选用了道路每个交叉点之间的路段作为索引基本元素,这样R树中就产生了庞大的叶节点以及对应的巨大更新。这种方法的主要缺点是使用的以道路路段为索引元素的道路网络模型,这种模型导致了索引树结构中大量节点的产生,以及移动对象在路段变更时产生的大量更新。

文献[25]把道路网络与轨迹从复杂的三维空间转换为两个低维子空间,在低维子空间索引移动对象轨迹,移动对象与道路网络分别用两棵二维R树索引,道路网络索引的基本元素也是路段。与FNR树相比,它们的移动对象索引方式不同。利用Hilbert曲线将二维移动空间映射到一维线性空间,道路网络的路段,以及移动对象的位置都映射到一维线性空间中。由于移动对象的索引也采用了二维R树,所以在查询处理时,相比FNR树对移动对象的索引更复杂些。但这种方法对移动对象的运动表达较为合理,移动对象在路段中的表达可以任意改变运动方向与速度,而FNR树不能做到这点。

MON树[26]存储了道路网络中移动对象的整个历史轨迹,并可对过去时态进行查询。使用路径作为索引的基本元素,路径由同名道路构成,将道路网络的道路表示为多段线,由于道路表达上的区别,MON树对移动对象轨迹的表达比FNR树更为简洁,同时索引效率有所提高,但由于路径过长,容易产生较大的死空间,影响查询效率。MON树支持窗口查询以及范围查询,但不能对与网络拓扑有关的查询提供支持,例如最近邻查询。

AU[27]方法是一种动态数据结构在分组网络中具有相似运动特征的移动对象,道路网络利用R树进行索引并构建在AU之上,从而形成道路网络上移动对象的索引结构。主要目的在于通过AU分组提高单个移动对象更新的效率。它是针对移动对象当前及未来位置的索引方法。

3 结语

综上所述,移动对象数据库系统往往具有海量数据以及复杂的时空运行特征,对于移动对象索引缺乏公认有效的,且能满足各种实际查询需求的方法。目前人们对移动对象索引研究取得了一定的成果,但尚有很多问题亟待解决,移动对象索引的发展方向如下所示。

1)网络空间内的移动对象索引方法将三维时空索引的问题转换为两个低维空间索引的问题,即分别索引网络数据及移动对象。通过从高维到低维的转换,可以将移动对象索引的问题转换两个简单的低维空间索引问题,低维空间索引结构也远没有三维时空的索引结构复杂,这是解决移动对象索引的一个有效思路,但如何有效地将移动对象索引从高维空间分解到低维空间,这是目前亟待解决的问题。

2)索引的目标主要是为了高效的查询处理,而在时空应用中,时空查询种类繁多,则索引支持的查询越多,这样的索引应用就越广泛。选择性查询、最近邻查询、持续查询和连接查询等是时空查询中常见的查询要求,但现在大多数的索引结构仅支持选择性查询,对于最近邻查询,索引通常需要考虑道路网络的拓扑性,现今的绝大多数索引结构都没有考虑道路的拓扑连接特征,索引结构中如何高效地索引道路以及道路网络的拓扑连接性,以便支持最近邻查询,也是目前的研究方向之一。持续查询是比较复杂且实时的查询要求,如何在海量的移动数据中保持持续查询结果的实时性以及准确性,这对索引结构也提出了较高的要求。

3)移动对象的位置是连续变化的,也导致了索引的更新是一个巨大的难题。若显式地对移动对象的位置变化进行更新,则造成系统效率低下,若存储移动对象过期的位置,则不能满足位置服务的需要。为了保持索引的实时性与正确性,通常利用时态函数表示移动对象的变化,当参数(例如速度、方向等)变化时,才进行必要的更新。当前的方法对移动对象的位置变化主要是线性近似,现实世界中,车辆的运行轨迹往往是非线性的,如果高效、正确地索引这种非线性的位置变化,是可能的研究方向。移动对象未来位置的预测精准性也极大地影响更新的效率,结合交通具体情况,提出更精确的预测模型以及索引结构,也是目前的研究方向。

4)MBR(最小外接矩形)作为对近似索引目标的技术,在空间及时空索引中被广泛的应用,例如R树、TRP树,具有计算简单,容易理解的优点,但对索引目标的近似比较粗糙,容易产生死空间。移动对象索引中,为了缓解这个问题,发展了六边形、八角形、多项式表达等技术来近似索引目标,以便更平滑地表示移动对象轨迹,提高索引的命中率。但这些方法也存在结构复杂、函数组成较多等问题,提出一个计算简单,近似精确的方法,仍然有待研究。

参考文献:

[1]TAYEB J, ULUSOY O, WOLFSON O. A quadtree-based dynamic attribute indexing method[J]. The Computer Journal, 1998,41(3): 185-200.

[2]KOLLIOS G, GUNOPULOS D, TSOTRAS V J. On indexing mobile objects[C]// Proceedings of the ighteenth ACM SIGMOD-SIGACT-SIGART Symposium on Principles of Database Systems. Philadelphia, Pennsylvania: ACM Press, 1999: 261-272.

[3]AGARWAL P K, ARGE L, ERICKSON J. Indexing moving points [J]. Journal of Computer and System Sciences, 2003, 66(1): 207-243.

[4]CHON H D, AGRAWAL D, ABBADI A E. Storage and retrieval of moving objects[C]// Proceedings of the Second International Conference on Mobile Data Management, LNCS 1987. London:Springer-Verlag , 2001:173-184.

[5]PORKAEW K, LAZARIDIS I, MEHROTRA S. Querying mobile objects in spatio-temporal databases[C]// The 7th International Symposium on Advances in Spatial and Temporal Databases. Redondo Beach: Springer Berlin, 2001: 59-78.

[6]SALTENIS S. Indexing the positions of continuously moving objects[C]// International Conference on Management of Data Proceedings of the 2000 ACM SIGMOD International Conference on Management of Data. Dallas: ACM Press, 2000: 331-342.

[7]CAI M. REVESZ P. Parametric R-tree: An index structure for moving objects [C]// The 10th International Conference on Management of Data. Pune: ACM Press, 2000: 234-243.

[8]PRABHAKAR S. Query indexing and velocity constrained indexing: Scalable techniques for continuous queries on moving objects [J]. IEEE Transactions on Computers, 2002, 51(10): 1124-1140.

[9]SALTENIS S, JENSEN C S. Indexing of moving objects for location-based services [C]// Proceedings of the 18th International Conference on Data Engineering. San Jose: IEEE Computer Society, 2002:463-472.

[10]TAO Y, PAPADIAS D, SUN J. The TPR*-tree: An optimized spatio-temporal access method for predictive queries [C]// Proceedings of 29th International Conference on Very Large Data Bases. Berlin: Morgan Kaufmann, 2003: 790-801.

[11]XU X, HAN J, LU W. RT-tree: An improved R-tree index structure for spatiotemporal databases [C]// Proceedings of the 4th International Symposium on Spatial Data Handling. Zurich: Springer, 1990: 1040-1049

[12]GUTTMAN A. R-trees: A dynamic index structure for spatial searching[C]// Proceedings of the 1985 ACM SIGMOD International Conference on Management of Data. Boston: ACM Press, 1984: 47-57.

[13]LOMET D, SALZBERG B. Access methods for multiversion data [C]// Proceedings of the 1989 ACM SIGMOD International Conference on Management of Data. Portland: ACM Press, 1989: 315-324.

[14]THEODERIDIS Y, VAZIRGIANNIS M, SELLIS T. Spatio-temporal indexing for large multimedia applications [C]// Proceedings of the 1996 IEEE International Conference on Multimedia Computing and Systems. Hiroshima: IEEE CS, 1996: 441-448.

[15]PFOSER D, JENSEN C S, THEODORIDIS Y. Novel approaches in query processing for moving object trajectories [C]// Proceedings of 26th International Conference on Very Large Data Bases. Cairo: Morgan Kaufmann, 2000: 395-406.

[16]

NASCIMENTO M A, SILVA J R O. Towards historical R-trees [C]// Proceedings of the 1998 ACM symposium on Applied Computing. Atlanta: ACM Press, 1998: 235-240.

[17]TAO Y, PAPADIAS D. Efficient historical R-trees [C]// Proceedings of the 13th International Conference on Scientific and Statistical Database Management. Fairfax: IEEE Computer Society, 2001: 223-232.

[18]TAO Y, PAPADIAS D. MV3R-tree: A spatio-temporal access method for timestamp and interval queries [C] // Proceedings of 26th International Conference on Very Large Data Bases. Roma: Morgan Kaufmann, 2001: 431-440.

[19]KOLLIOS G. Indexing animated objects using spatiotemporal access methods[J]. IEEE Transactions on Knowledge and Data Engineering, 2001,13(5): 758-777.

[20]HADJIELEFTHERIOU M. Efficient indexing of spatiotemporal objects [C]// Proceedings of the 8th International Conference on Extending Database Technology. Prague: Springer, 2002:251-268.

[21]CHAKKA V P, EVERSPAUGH A C, PATEL J M. Indexing large trajectory data sets with SETI [C]// First Biennial Conference on Innovative Data Systems Research. Asilomar: Online Proceedings, 2003:450-460.

[22]SONG Z, ROUSSOPOULOS N. SEB-tree: An approach to index continuously moving objects [C]// The 4th International Conference on Mobile Data Management. Melbourne: Springer,2003:340-344.

[23]NI J, RAVISHANKAR C. Indexing spatio-temporal trajectories with efficient polynomial approximations [J]. IEEE Transactions on Knowledge and Data Engineering, 2007,19(5):1-16.

[24]FRENTZOS E. Indexing objects moving on fixed networks [C]// Proceedings of the 8th International Symposium on Advances in Spatial and Temporal Databases. Santorini Island:Springer,2003:289-305.

[25]PFOSER D, JENSEN C S. Indexing of network constrained moving objects [C]// Proceedings of the 11th ACM International Symposium on Advances in Geographic Information Systems. New Orleans: ACM Press,2003:25-32.

数据库索引篇4

孙纳新1,赖江轶1,王玉萍2

(1. 武警后勤学院信息技术教研室;2. 武警后勤学院附属医院心理科,300309)

摘要:垂直搜索引擎技术的发展使得大数据时代特定专业的信息获取成为可能,通过对武警部队心理数据库数据采集过程中

使用异步非阻塞聚焦爬虫策略,大大提高了数据采集性能。

关键词:垂直搜索引擎;爬虫;心理数据库

The Application of Vertical Search Engine Technology On

Construction of the Armed Police Psychological Database

Sun Naxin1,Lai Jiangyi1,Wang Yuping2

(Information Technology Department,Logistics University of Chinese People’s Armed police Forces,

Tianjin 300309,China )

Abstract :The development of vertical search engine technology makes acquisition of specific professional

information possible in the big data era,we greatly improve the data collection performance with asynchronous

non-blocking focused crawler strategy in construction of the armed police psychological database.

Keywords :Vertical search engines;The crawler;Psychological database

易出现心理问题,所以有关军人心理的研究工作已是当前部队

科研的一个重点;而结合武警部队实际,应用当前心理学最新研

究成果,则是现阶段武警部队心理工作的普遍方法。但针对我军

官兵心理特点的科学研究是近一时期才逐步发展并形成的,一方

面我们要检索具有武警部队针对性的文献资源,另一方面武警部

队自己的研究点滴也需积累。随着我军信息化进程不断深化,针

对武警心理研究文献资料的检索查阅以及经验累积已不仅是科

研人员的工作所需,也逐步成为基层官兵学习心理知识并调整自

身心态的一个有效的途径。因此,建立武警部队心理文献索引以

及心理研究数据的武警部队心理数据库具有极大的实用意义。本

文将主要论述如何利用垂直深度搜索引擎技术实现心理数据库

的数据采集和萃取。

1 搜索引擎技术

图1 搜索引擎工作原理

搜索引擎技术是指用户通过查询界面输入搜索信息,通过网

络或数据库得到相关信息反馈的技术,搜索引擎的工作原理如图

1 所示。目前常用的搜索引擎有采用通用搜索引擎技术的囊括所

有学科和主题的综合性搜索(如google、百度等)、采用垂直搜索

引擎技术面向特定学科和专业的专业搜索引擎以及面向搜索引

擎的搜索引擎指南。垂直搜索引擎基于结构化数据和元数据的结

构化抓取,因此使抓取的数据更符合专业特点、有针对性,用户可

以利用这种技术从互联网、外部数据库抓取自己需要的信息构建

自己的数据库应用系统,利用垂直搜索引擎进行数据采掘的搜索

引擎技术是我们实现心理数据库信息采集的基础,如图2 所示。

搜索引擎主要是利用爬虫(Spider)程序去自动地在互联网

中搜索信息,主要有以下几个部分构成:数据采集(抓取)、数据

处理(筛选去噪去重)以及数据存储,图3、4 分别是它的体系结

构和系统结构。网页由文本、图片以及链接等元素构成,搜索引擎

根据用户需求,选定一个种子,利用爬虫开始抓取

另一个网页,遍历各个相关站点,把符合要求的页面抓取到索引

库采集资料。从数据采集的角度来看,用户关心的是数据资源,

Internet 上的网页以及数据库就是一个巨大的数据资源矿山,

搜索引擎是开采数据资源矿山的机器,具有搜索勘探、提炼萃取、

收集存储的功能。而对搜索引擎技术的研究就集中在各个采集阶

段,主要涉及到爬行策略(爬虫)、分词技术、索引(存储)、排序检

索算法等。

2 垂直深度搜索引擎技术与部队心理数据库

随着互联网信息化的深入发展,出现了大量业务型Web 应用

系统即Web 数据库。这些数据库的web 面之间的关系是非平行的

垂直逻辑关系,垂直搜索引擎应运而生。它针对某一特定行业对

网页库中的某类专门信息进行整合,可以定向挖掘专用数据进行

处理,再以用户需要的某种形式返回给用户。武警部队心理科研

成果、资源数据及心理学文献材料通常分散收录于多个文献数据

库以及某些特殊数据库内,不但检索查阅不便效率低下,其覆盖

范围也不足,经常存在“坏链”“死链”现象;采取通常方法检索,

其搜索结果均是基于关键字的简单拆分查询,不具备高级关键字

分析处理功能,更达不到心理领域的专需效果,而且各文献数据

库产品不同形式的人机交互界面(UI)也为科学检索带来了不便,

因此利用垂直搜索引擎技术完成心理学专业相关的信息采集,设

计并研究开发一套武警部队心理领域专需数据库,包括文献、成

果、数据资源是我们的出发点。

分析搜索引擎的工作过程以及实际建库需要,其要完成的是

一个人工智能系统,就是借助爬虫技术反向解析网络数据库大海

中最原始的数据,取出数据,组织建立自己的数据库。也就是说爬

行策略的核心是以用户关注的内容为根本,通过一种有效的方法

将内容相关的WebPage 重新分类,这需要爬虫通过多路径搜索对

网页进行遍历, 制定爬行策略,对每个工作步骤进行优化设计。

武警部队心理数据库所需数据目的明确、专业特性非常强,

适合使用垂直搜索。在实际操作过程中,我们使用了垂直深度搜

索引擎技术利用聚焦爬虫获取心理文献数据。其原理是:爬虫要

访问的文献数据库一般比较固定(如中国知网),爬取数据时,外

层采用通用方法进行主题聚焦,对爬取到的数据进行特征分析,

定位分析,制定爬虫爬取深度,通过一层层定位分析,将数据从最

底层爬取出来。

3 性能优化的技术实现

由于心理数据库主要是针对特殊站点爬取大量的原始数据,

其速度、爬全率以及稳定性是我们考虑的重点,因此在我们的实

验中重点做了数据采集阶段爬虫性能上的改进研究。通常数据采

集阶段的爬虫使用多线程并行采集(图5),由于这种同步方式线

程太多,发一次请求响应一次,若采集量较大则需要等待挂起,会

引起阻塞,造成死机现象,因此我们采取了异步非阻塞的单线程

方法进行采集。这种串行异步单线程采集方式,可以连续发送请

求,一次发送多个请求,进入队列进行等待回答,因此不会引起阻

塞;另外由于抓取URL 后系统要通过DNS 解析分析对URL 进行

分析、消重去噪,在DNS 解析时采取多线程分析,可以缩短系统解

析时间;对垂直深度聚焦爬虫,由于采取的是针对某类服务器进

行数据抓取,其ip 地址固定,将DNS 进行缓存,可以实现一次解

析多次抓取的通道全连接模式,直到完成所有请求之后才断开连

接,大大提高了采集性能。另外在此过程中,增加容错设计,若某

一URL 抓取不成功,设定阈值,防止死锁,并将其缓存到另一台服

务器上,必要时再重新抓取。

经过上述技术处理后,数据采集爬虫的性能得到了大幅提

高。以下是抓取结果对比:

表1 抓取网页对比

4 结论与改进

搜索引擎技术的发展使得大数据时代的专需数据不至于被

淹没在信息大海中采集不到,但要想数据采集的准确、全面需要

在搜索引擎工作的各个阶段进行深入研究提高性能。本文采取异

步非阻塞的爬行策略对心理数据库所需资源进行了垂直深度搜

索,数据采集性能上有很大提高,下一步将要进行的工作是心理

专用分词技术以及排序检索算法的研究。

参考文献

[1] 李晓明, 闫宏飞, 王继民. 搜索引擎——原理、技术与系统

(第二版)[M]. 科学出版社.2012.5

[2] 王晓艳, 于光华,刘双春. 经典搜索引擎排序算法的比较与

分析 [J]. 产业与科技论坛.2012.(11).24:49-51

[3] 马慧. 面向特定网页的Web 爬虫的设计与实现 [D]. 吉林大

学大学.2012.12

[4] 邱晓俊. 面向特殊主题的排序与检索算法研究[D]. 江西理

工大学.2011.12

[5] 焦赛美. 网络爬虫技术的研究[J]. 琼州学院学报.2011.

(18).5:28-30

[6] 罗武,方逵,朱兴辉. 网络搜索引擎排序算法研究进展[J].

湖南农业科学.2010.7 :137-140

数据库索引篇5

【关键词】 SQL Server 数据库 性能优化

随着数据库应用系统的不断扩展,数据库用户数量的不断增多,需要处理的业务数据量在不断增加,数据库海量数据存储在迅速增长,数据库性能的好坏变得越来越重要。数据量的快速增长是数据库性能优化研究的主要驱动力,在当前已有的软硬件基础之上,如何在数据库应用系统中获得最大的吞吐量和提高系统的处理能力是目前数据库应用系统的一个研究热点。

一般情况下,数据库的优化指的就是查询性能的优化,让数据库对查询的响应尽可能的快。仅对数据库系统本身而言,影响到查询性能的因素从理论上来讲包括数据库参数设置,索引,分区,SQL语句。

一、有效的利用索引

索引在数据库的查询优化中起着至关重要的作用,一个数据库索引的好与坏,其查询性能相差很多倍。如何选择索引可显著影响所产生的磁盘 I/O,并因而影响查询性能。常用的索引有聚集索引、非聚集索引,对于非聚集索引,选择性很重要,因为如果在只有少量唯一值的大型表上创建非聚集索引,使用非聚集索引将不会节省数据检索中的 I/O。因为数据库中的索引都注重一种比较性,这样它可以快速的确定范围,定位位置,例如,某表的性别字段,非男即女,不具有可比性,如果以它为非聚集索引,查询的时候也只能一个个节点去比较。

在这种情况下产生的 I/O 可能比对表进行连续扫描所产生的 I/O 多得多。比较适合非聚集索引的有票据编号、唯一的客户编号、社会安全号码和电话号码,简单来说,就是基于某种可比较的,有规律的数据。

索引对于检索性能的提高有一定的帮助,但是更多的索引或是不正确的一定程度上会导致系统低效。由于用户在每次向表中添加一个索引时,数据库就得相对的做更多的工作。太多的索引甚至会产生索引碎片。因此,我们才需要建立一个“适当”的索引体系,尤其是在创建聚集索引的时候,更应该精益求精,确保数据库能够得到高性能的发挥。

二、有效改善SQL语句

SQL的语句大概有编译优化、执行、取值三个阶段,而第一阶段编译优化绝大多数情况下都要花掉60%的时间,所以变量的绑定是尤为重要的,SQL Server数据库有缓存区,存放一些最近使用过的SQL语句,当有一条SQL语句到达数据库服务器时,首先数据库会搜索缓存区,看它是否存在可以重用的SQL语句,如果存在,可以不用编译优化,因为缓存区里都是编译优化好了的SQL语句,直接可以执行,节约很多时间。

如果没有发现可以重用的SQL语句,则必须要完全经过语句编译分析,优化计划,安全检查等过程,这不仅仅会大量耗费CPU功率,而且还在相当长的一段时间内锁住了一部分数据库缓存,这样执行SQL语句的人越多,等待的时间越长,系统的性能会大幅度的下降。

三、合理利用SQL Server的分区

SQL Server的分区在一些超大型的表中是有着非常重要的作用。分区是逻辑上的一种区分,在数据访问的情况下,由于一个表就是一个整体,所以也就是对整个表或整个表的索引进行了访问,所谓分区,通俗点讲,就是把表按一定的规律划分成更小的逻辑单位,在进行数据访问的时候,不以表为单位进行访问,而是在表的基础上,判断数据在哪个分区,然后对特定的分区进行访问。正确的分区对于提高查询性能有很大的作用。例如,有一个非常大的表,存储了一些销售记录,现在查询总是按销售季度来执行这个查询,而每个销售季度包含几十万个记录,通常你只是要查询这个数据集的一个相当小的数据,但是给予销售季度的检索却的确是不太可行的。

这个索引可能指向无数个记录,而以这种方式执行索引范围扫描是可怕的。为了处理许多查询任务,系统需要执行全表扫描,但是结果却必须扫描几百万个记录,其中绝大部分不使用我们的查询任务。使用智能分区方案,就可以按季度隔离数据。这样当我们为任意指定的季度去查询数据时,结果将只是扫描那个季度的数据。这是所有可能的解决方案中最好的方案。

数据库优化是一个很广的范围,涉及到的东西也比较多,并且每个特定的数据库,其具体的优化过程也是不一样的。因为优化的很大一部分最终都要跟具体的数据库系统细节打交道,在此只能就常用的数据库以及经常用到的的东西进行一些分析,以期使数据库系统的效率得到提升,方便我们的使用。

参 考 文 献

数据库索引篇6

关键词:数据库 查询优化 查询 优化

0 引言

随着计算机应用的深入,计算机技术的成熟,各种应用软件的普及,应用数据也随着日常工作而迅速增长,作为数据仓库的数据库的重要性也日益显著。

数据库系统作为管理信息系统的核心,各种基于数据库的联机事务处理以及联机分析处理正慢慢的转变成为计算机应用的最为重要的部分,根据以往大量的应用实例来看,在数据库的各种操作中,查询操作所占的比重最大,而在查询操作中基于SELECT语句在SQL语句中又是代价最大的语句。如果在使用中采用了优秀的查询策略,往往可以降低查询的时间,提高查询的效率,由此可见查询优化在数据库中的重要性。本文就数据库查询优化中的策略进行介绍及探索。

1 基于索引的优化

数据库的优化方法多种多样,不同的方法对提高数据库查询效率也不相同。

索引作为数据库中的重要数据结构,它的根本目的就是为了提高查询的效率。而优化查询的重要方法就是建立索引,建立适合关系数据库系统的索引,这样就可以避免表扫描,并减少了因为查询而造成的输入输出开销,有效提高数据库数据的查询速度,优化了数据库性能。然而在创建索引时也增加了系统时间和空间的开销。所以创建索引时应该与实际查询需求相结合,这样才能实现真正的优化查询。

1.1 判断并建立必要的索引 对所要创建的索引进行正确的判断,使所创建的索引对数据库的工作效率提高有所帮助。为了实现这一点,我们应做到以下要求:在熟记数据库程序中的相关SQL语句的前提下,统计出常用且对性能有影响的语句;判断数据库系统中哪些表的哪些字段要建立索引。其次,对数据库中操作频繁的表,数据流量较大的表,经常需要与其他表进行连接的表等,要进行重

点关注。这些表上的索引将对SQL语句的性能产生重要的影响。

1.2 对索引使用的一些规则 索引的使用在一些大型数据库系统中会经常使用到,这样可以有效的提高数据库性能,使数据库的访问速度得到提高。但索引的使用要恰倒好处,所以我们在使用索引时应遵守使用原则:建立索引可以提高数据库的查询速度,但索引过多,不但不能实现优化查询,反而会影响到数据库的整体性能。索引作为数据库中实际存在的对象,每个索引都要占用一定的物理空间。所以对于索引的建立要考虑到物理空间容量,以及所建立索引的必要性和实用性。

1.3 合理的索引对SQL语句的意义 索引建立之后,还要确保其得到了真正的使用,发挥了其应有的作用。首先,可以通过SQL语句查询来确定所建立的索引是否得到了使用,找出没有使用到的索引。分析索引建立但没有使用的原因,使其真正发挥作用。其次,索引得到使用以后,是否得到了预期的效果,对数据库的性能是否实现了真正意义上的提高,只有合理的索引才能真正提高数据库的性能。

2 优化SQL语句

在使用索引时可以有效的提高查询速度,但如果SQL语句使用不恰当的话,所建立的索引就不能发挥其作用。所以我们应该做到不但会写SQL,还要写出性能优良的SQL语句。下面,就如何优化引用例子进行说明。

首先,在进行查询时,返回的值应该是查询所需要的。在查询中应该尽量减少对数据库中的表的访问行数,使查询的结果范围最小,这就意味着在查询时,不能过多的使用通配符,如:select*from table1语句,而应该做到最小化查询范围,要查询几行几列就选择几行几列,如:select col1 from table1;多数情况下,用户并不需要查询到的所有数据,而只是部分或靠前的数据时,我们也可以通过SQL语句来进行限制查询的结果,如:select top 50 col1 from table1。

其次,对于一些特殊的SQL语句,在使用时应正确选择。我们用一组例子来说明,如:EXISTS,NOT EXISTS。

语句一:select sum(t1.c1) from t1 where((select count(*)from t2 where t2.c2=t1.c2)>0)

语句二:select sum(t1.c1) from t1 where exists(select*from t2 where t2.c2=t1.c1)

两个语句所得到的结果相同,但,语句二的效率要远高于语句一,因为语句一在查询中产生了大量的索引扫描。

在对数据库查询时,所使用的语句多种多样,但选择恰当的的字句能够有效的提高查询效率。

最后,WHERE子句在使用时应该注意的问题。

在WHERE子句中可以使用exist 和not exist代替in和not in。应该尽量避免使用in,not in,or 或者having。可以使用表链接代替 exist。Having可以用where代替,如果无法代替可以分两步处理。

3 其他优化方法

数据库的查询优化方法不仅仅是索引和SQL语句的优化,其他方法的合理使用同样也能很好的对数据库查询功能起到优化作用。我们就来列举几种简单实用的方法。

3.1 避免或简化排序 应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。

3.2 避免相关子查询 如果在主查询和WHERE子句中的查询中同时出现了一个列的标签,这样就会使主查询的列值改变后,子查询也必须重新进行一次查询。因为查询的嵌套层次越多,查询的效率就会降低,所以我们应当避免子查询。如果无法避免,就要在查询的过程中过滤掉尽可能多的。

3.3 创建使用临时表 在表的一个子集进行排序并创建临时表,也能实现加速查询。在一些情况下这样可以避免多重排序操作。但所创建的临时表的行要比主表的行少,其物理顺序就是所要求的顺序,这样就减少了输入和输出,降低了查询的工作量,提高了效率,而且临时表的创建并不会反映主表的修改。

3.4 用排序来取代非顺序存取 磁盘存取臂的来回移动使得非顺序磁盘存取变成了最慢的操作。但是在SQL语句中这个现象被隐藏了,这样就使得查询中进行了大量的非顺序页查询,降低了查询速度,对于这个现象还没有很好的解决方法,只能依赖于数据库的排序能力来替代非顺序的存取。

4 结论

对于数据库的优化,我们要抓住关键问题,提出改善查询效率,这样才能真正使数据库服务得到根本提高。本文在对数据库查询优化的方法上,进行了分析,提出了部分见解,有效的提高数据库查询效率。

参考文献

[1]王珊,孟小峰 《数据库系统导论(第七版)》 机械工业出版社.2000年10月

数据库索引篇7

关键词:大型数据库;数据库设计;执行效率;索引;查询

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)26-6321-03

Method Research of Large-scale Database

HUA Yan

(Department of Information, Higher Normal School of Wuxi, Wuxi 214021, China)

Abstract:The implementation efficiency of large databases is always the biggest problem to the users. This paper will discuss four methods of database design: logical database design, index design, query design and table optimization ,and by these ways,the database structure can be designed to avoid poor design and to improve the implementation efficiency.

Key words: large database; database design; implementation efficiency; index; query

随着计算机应用系统的扩大,大型数据库已成为大中型企业管理应用的首选数据库平台。而大型数据库的执行效率一直是困扰系统用户的最大问题。软件项目在设计时,由于测试用例的数据量很小,很多有关执行效率的问题都反映不出来。但当项目交付使用并运行一段时间后,随数据量的增大,执行效率将成为突出的问题,进而影响系统实际运行的性能。本文将从对大型数据库系统执行效率带来影响的结构设计进行综合研究,从逻辑数据库设计、索引设计、查询设计和表的优化设计四个方面探讨数据库优化设计的方法,从而使数据库在结构设计时就能规避不良设计方式,提高数据库执行效率。

1 逻辑数据库的设计

在数据库逻辑设计过程中,为了保证数据库的一致性和完整性,数据库要按照关系数据库的规范化要求设计。

以函数依赖为基础的关系模式的规范化等级主要有五种: 1NF、2NF、3NF、BCNF和4NF,满足这些范式条件的关系模式可以在不同程度上避免冗余、插入和更新异常问题。在基于表驱动的系统中,基本表的设计规范是第三范式3NF。但是,满足3NF的数据库设计,往往不是最好的设计。没有冗余的数据库可以设计出来,但是,没有冗余的数据库未必是最好的数据库。有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。

合理使用冗余会为查询带来很大的好处,如经常被查询的汇总数据,可以在平时工作中就累加好,不需要到查询时再使用如sum之类的函数。

比如:一个学生管理系统中有成绩表,其字段有学号SNO , 课程号CNO , 成绩GRADE,而进行平均成绩统计时,是用户经常要在查询和报表中用到的。在表的记录量很大时,有必要把平均分作为一个独立的字段加入到表中,这里可以采用触发器以保持数据的一致性,从而提高数据库的执行效率。

2 索引设计

索引即将表数据按索引要求而产生有序的数据副本。在关系数据库的表上建立合适的索引,可以提高数据库数据查询的速度,改善数据库的性能。除了聚集索引,每一索引的使用都以磁盘容量作为代价,当使用一个索引,数据库引擎必须执行两个数据读取,这两个数据读取是数据库记录所必需的,第一个数据被读取到实际数据指针的索引,第二个数据被读入到指针指定的位置。因此创建索引时必须要与实际应用系统的查询需求密切结合,在提高查询速度和节省存储空间之间寻求最佳的平衡点:

2.1 在合适的列上建立索引

1)在经常用作过滤器或者查询频率较高字段上建立索引;

2)为包含了大量的空值列建立索引,使包含空值的记录集中排在表的末端,数据从无序变得有序, 可减少对这部分数据的遍历,提高查询效率。

3)有一列或多列经常被使用在where或join条件里,则为该列或多列建立简单或复合索引以提高查询效率。

4)在频繁进行排序(group by) 或分组(order by)的列上建立索引。

2.2 不需要创建索引的情况

1)如果表很小,包含的数据量很少,则无须建立索引。

2)列不经常被用在查询条件里, 无须建立索引。

3)不同值少的列,比如在学生表的“性别”列上只有“男”与“女”2 个不同值, 就无必要建立索引;

4)由文本、图像等数据类型定义的列。

5)表频繁被更新, 这样如果建立了索引,开销会很大,还会降低DML(INSERT、UPDATE、DELETE)操作执行的效率, 所以此种情况无须建立索引。

2.3 聚集索引和非聚集索引

聚集索引是指行的物理顺序与行的索引顺序相同的索引。一个表只能有一个聚集索引。非聚集索引是指定表的逻辑顺序索引,行的物理顺序与索引顺序不尽相同,每个表可以有多个非聚集索引。缺省情况下建立的是非聚集索引,但是在一些特定的情况下建立非聚集索引会极大的缩短查询的时间。建立索引时, 应考虑对两者的选择。

1)对有大量重复值、且经常有范围查询(between,>,=,

2)对于频繁修改的列、或者返回小数目的不同值的情况应避免建立聚集索引。

3)当以某字段作为查询条件,需要回传局部范围的大量数据时,应在此字段上建立聚集索引,而当查询所获得的数据量较少时,有必要在此字段上建立非聚集索引。

比如:回传2010年1月1日到2011年1月1日这个时间段之间的数据,可考虑在日期字段上建聚集索引,那么数据本来就是按照日期的顺序排列的,只要找到开始和结尾日期的数据就可以了,可以极大的节省时间。而如果使用非聚集索引,必须查到这个时间段中每个日期对应的位置,然后在根据位置存取数据,明显效率很低。

在实际应用中,要综合各要素点具体分析,以达到系统的性能综合最优。

3 查询设计

从大多数系统的应用实例来看, 查询操作在各种数据库操作中所占据的比重最大。许多程序员在开发数据库应用程序时,只注重用户界面的华丽,并不重视查询语句的效率问题,导致所开发出来的应用系统效率低下,资源浪费严重。因此,如何设计高效合理的查询语句就显得非常重要。

3.1 正确地使用索引

索引作为数据库中的重要数据结构,它的根本目的就是为了提高查询的效率。建立适合关系数据库系统的有用索引,这样就可以避免表扫描,并减少因为查询而造成的输入输出开销,有效提高数据的查询速度,优化数据库性能。

比如,在学生表中,如果创建学号为单列索引, 那么查询时WHERE 子句中应使用学号这个字段,使之成为有用索引。如果使用了其他字段, 那么学号这个索引就是无用索引:

SELECT SNO , SNAME, SEX

FROM S

WHERESNO = ’S1’

使用复合索引时, 必须保证在条件子句中首先使用复合索引的第一列。比如:在成绩表中,如果创建学号SNO和课程号CNO为复合索引, 那么在查询语句的WHERE子句中应这样使用:

SELECT SNO , GRADE

FROM SC

WHERESNO = ’S3’ANDCNO = ’C1’

否则,下列复合索引的使用是没用的, 系统仍然采用顺序扫描方式:

SELECT SNO , GRADE

FROM SC

WHERECNO = ’C1’ANDSNO = ’S3’

3.2 模糊匹配的避免

LIKE关键字支持通配符匹配,技术上称为正则表达式。但这种匹配特别耗费时间,应尽量避免使用这种模糊匹配。

比如: SELECT SNO FROM SC WHERE CNOLIKE′4 ′

即使在CNO字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。

可改写为: SELECT SNOFROM SC WHERE CNO >′400′

这样,在执行查询时就会利用索引来查询,显然会大大提高速度。

3.3 子查询合并

子查询合并是将某些特定的子查询重写为等价的多个表的连接操作。子查询合并的作用在于能使查询语句的层次尽可能地减少,从而可提高查询的效率。子查询合并的一般规则为:

1) 如果外层查询的结果没有重复,即SELECT子句中包含主码,则可以合并其子查询,并且合并后的SELECT 子句前应加上DISTINCT 标志;

2) 如果外层查询的SELECT 子句中有DISTINCT标志,那么可以直接进行子查询合并;

3) 如果内部子查询结果没有重复元组,则可以合并。

比如:查询选修201号课程的学生基本信息。

SELECT S.SNO , SNAME ,AGEFROM SWHERE SNOIN( SELECTSNOFROM CNOWHERECNO =′201′)

3.4 善于使用存储过程

存储过程是存储在数据库中的一段程序,它可以接受参数、返回状态值和参数值,并且还可以嵌套调用,它是在建立时就已经编译和优化的程序。另外存储过程是一种模式化的程序设计,通过将公共集合编写为合理的存储过程,可避免冗余代码,减少程序员的工作量。因此善于使用存储过程会提高大型数据库的执行效率。

4 表的优化设计

基于第三范式设计的库表虽然有其优越性,然而在实际应用中有时不利于系统运行性能的优化,比如:需要部分数据时而要扫描整表,许多过程同时竞争同一数据,反复用相同行计算相同的结果,过程从多表获取数据时引发大量的连接操作,这都消耗了磁盘I/O和CPU时间。针对这些情况,可通过引入临时表来简化查询。

比如:查询每个系中年龄最大的学生的"学号"。

SELECT SNO FROM S AS s1 WHERE AGE=(SELECT MAX(AGE) FROM S AS s2 WHERE s1.SDEPT=s2.SDEPT)

以上的查询对于外层的年龄关系s1中的每一个元组,都要对内层的整个年龄关系s2进行检索,因此查询效率不高。可以构建临时关系提高查询效率。

SELECTMAX(AGE) AS maxage,SDEPTINTO tempFROMS GROUP BY SDEPT

SELECT SNO FROM S,temp WHERE AGE=maxage AND S.SDEPT=temp.SDEPT

又如,查询有最多男生的系的名称。使用单条查询语句获得查询结果较为困难,则可建立临时表 TEMPS (院系(SDEPT )、人数(NUMBER) ) ,先将各院系男生人数的统计结果写入此表, 再在表TEMPS中查出人数最多的院系名称。通过分解操作过程,使解决办法得以简化。

使用临时表时要注意对它的更新操作,以保持与原始表之间数据的一致性。使用完毕后,应对其删除,释放其所占用的空间。

总之,数据库的优化设计工作对提高系统执行效率起着重要的作用,但它又是一项综合性的工作,受到各种各样因素的制约,有些要求往往是彼此矛盾的。因此,设计结果常常是有得有失,设计者必须根据实际情况,将上述几个方面的优化策略有机地结合起来,尽可能使系统效率达到最优。

参考文献:

[1] 萨师煊,王珊.数据库系统概论[M].4版.北京:高等教育出版社,2007.

[2] 杨学全.SQL Server 实例教程[M].3版.北京:电子工业出版社,2010.

[3] 黄明辉.大型数据库的性能优化方法[J].计算机时代,2010(6):33-34.

数据库索引篇8

[关键词]B树;索引;数据库管理软件

中图分类号:TQ1 文献标识码:A 文章编号:1009-914X(2014)23-0252-02

1 引言

索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。表的存储由两部分组成,一部分用来存放数据页面,另一部分存放索引页面。通常,索引页面相对于数据页面来说小得多。数据检索花费的大部分开销是磁盘读写,没有索引就需要从磁盘上读表的每一个数据页,如果有索引,则只需查找索引页面就可以了。所以建立合理的索引,就能加速数据的检索过程。

数据库索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。

2 B树的定义

2.1 B树的结构

本文删除记录时引起的结点内部数据变化,甚至整个结点内的记录都无效时,会调用刷新函数。该函数以树的根为参数,在遍历树时调用结点类的写入函数将新数据覆盖到数据库文件的原地址上。而有些被删除了的结点,在内存中的B树已经无法联系到,所以无法写入覆盖,也无需操作。所以实际上本系统的删除操作不会减少数据库文件的大小。

4 总结

本文描述了设计和实现了一种基于B树的小型数据库管理系统的过程。详细叙述了B树在本系统中的实现和应用,以及本系统如何构造了如常见数据库的表与字段,以及各个操作的流程。对B树性能进行分析计算。最终实验表明,B树非常适合作为存取辅助设备的数据结构。

参考文献

[1] Thomas H.Cormen, Charles E.Leiserson等著,潘金贵等译.算法导论(第2版) [M].北京:机械工业出版社,2006.9.

数据库索引篇9

1.1中央数据库

中央数据库部署在北京数据中心,采用Ora-cle/SqlServer群集,具体随方案选择而定。入库方式:通过人工或网络传输的方式获取数据库备份,经过导入程序入库;中央数据库存储项目的历史数据,其存储数据量比现场数据库要高出1~2个数量级。中央数据库要支持快速的数据查询、文件导入导出和Web访问,主要功能如下:将经过处理的实时数据写入现场数据库;支持数据的历史回放和离线分析;支持历史海量数据库的实时备份、清除和异地恢复;提供与评估软件平台的文件导出和数据接口;支持数据的后期操作和查询、编辑、更改[3]。各模块功能见表1,整体结构设计见图2。

1.2现场数据库

现场数据库针对具体项目,部署在现场监控中心,存储的是处理后的实时数据,要求定期备份、删除、异地恢复、更新。实时数据的特点是数据量大,数据入库较快。在设计现场数据库的时候,主要考虑如下:各个监测类型原始数据互不干扰;数据写入要求实时,考虑拥堵策略和故障恢复策略;灵活配置监测项、监测点的数据存储库表结构[4];一定时期的历史数据在线回放和分析;单一监测类型数据存储(由于处理系统需要在较长时间内持续对采集数据进行处理,即使一种设备,持续累计多天的时候,数据量也会非常大,需要考虑以何种方式对多天数据进行组织)。现场数据库配置版本为SQLServer数据库。

1.3结构特征值数据库

本数据库主要存储桥梁结构采集数据的特征值,包括结构应变、加速度、索力等原始数据的最大值、最小值、平均值及方差等,特点是数据量相对较小,但数据计算频繁,使用频率较高。此数据库数据量小但关系较复杂,由于其入库频率相对于原始数据来说比较低,故采用较为简单的单库表结构。特征数据库配置版本为SQLServer数据库。

2海量数据库详细设计优化方案

2.1高速大容量数据存储与管理

通过对系统的总体评估,拟采用以下措施解决系统中大数据量的存储与管理问题。通过使用OracleRAC(集群)模式加强底层数据库的处理性能;使用存储过程的方式来进一步加强数据库的交互性能;定期进行数据备份与清理,避免存储过多的低使用率数据(比如,数据库一般可以保持6个月到1年的数据,其它数据通过磁带库等存储介质将数据备份转移,减轻数据库的处理压力);对海量数据进行分区操作(例如针对按年份存取的数据,我们按年进行分区,不同的数据库有不同的分区方式,而不同的文件组存于不同的磁盘分区下,这样将数据分散开,减小磁盘I/O,减小了系统负荷,而且还可以将日志、索引存放于不同的分区下);建立广泛的索引[5]。对大表建立索引,例如针对大表的分组、排序等字段,都要建立相应索引,一般还可以建立复合索引。当插入表时,首先删除索引,插入完毕,建立索引,并实施聚合操作,聚合完成后,再次插入前还是删除索引。要注意索引使用的时机,索引的填充因子和聚集、非聚集索引都要考虑。在对海量数据进行查询处理过程中,查询的SQL语句的性能对查询效率的影响是非常大的[6]。在对SQL语句的编写过程中,例如减少关联,少用或不用游标,设计好高效的数据库表结构等都十分必要。

2.2数据库优化设计

桥梁结构桥梁索力数据量较大,由于实时数据处理系统平时的主要操作是桥梁索力的插入及数据查询,对数据的实时性及可恢复性要求不高,并不要求绝对的精度,允许一定的数据损失,对数据库的一致性、并发性及事物的隔离性要求不高,但对于大数据的吞吐量要求较高,故可将其定位为针对插入操作的OLTP系统及部分的OLAP系统[7]。所以考虑降低数据库的隔离级别和并发一致性控制以提高数据库性能,优先满足海量数据插入的吞吐量要求。Oracle版本的数据库优化设计如表2所示。

3系统应用项目及领域

数据库索引篇10

关键词:Oracle数据库;数据库配置优化;SQL 语句优化

中图分类号:TP312文献标识码:A文章编号:1009-3044(2010)22-6151-02

Oracle10g Database Performance Optimization and Adjustment

ZHEN Fu-dong

(Civil Aviation Air Traffic Control Branch of Gansu, Lanzhou 730087, China)

Abstract: Oracle database is currently the most widely used large-scale databases, database data with the increase of the number of concurrent users increases, the throughput of the system often appears lower, longer response time performance problems, how to effectively optimize and adjust database performance, avoid system bottlenecks and to ensure efficient operation of the base Oracle database. This paper analyzes Oracle database system performance impact factor, we focused on the Oracle10g database system optimization strategy, including the memory area to adjust and optimize disk I / O optimization, disk fragmentation, rollback segment set, CPU performance tuning and optimization of SQL statements and so on, through the introduction of these optimization strategies, hopes to Oracle10g database system for optimum performance.

Key words: oracle database; database configuration optimization; optimizing SQL statement

Oracle 数据库是现在使用最广泛的大型数据库之一,选用Oracle 作为数据库的应用系统一般规模比较大, 需要处理的用户数目较多,对于这样的数据库系统来说,效率是最重要的指标之一,在实际应用中,随着系统数据库中数据的增加,访问量的加大,数据库系统性能将会下降,数据库的优化逐渐突显出其重要作用。

1 影响Oracle 数据库系统性能的因素

Oracle 数据库系统性能受到数据库运行的诸多方面的影响与制约,包括数据库服务器性能、数据库配置、网络I/O、应用程序性能等。

1) 数据库服务器性能

数据库服务器是整个系统的核心,它的性能直接影响到整个系统的性能。数据库服务器的性能主要取决于服务器上运行的操作系统以及服务器的硬件配置。

2) 数据库配置

数据库的配置情况直接决定了数据库的性能优劣,是数据库性能优化的核心。[1]主要包括内存区的设置、I/O 设置、参数设置、CPU 调整、回滚段设置以及碎片整理等。数据库配置及其调整贯穿于数据库设计、创建、运行的各个阶段。

3) 网络I/O

应用程序与数据库服务器之间的交互需要通过网络来进行,网络的性能,特别是网络I/O 对整个系统性能有重要的影响。

4) 应用程序实现

应用程序的实现方法对数据库性能也有很大的影响,特别是SQL 语句的应用、数据库连接方式的选择、数据库端程序设计以及数据库对象的使用情况等,都影响系统的执行效率。

2 Oracle10g数据库系统性能优化与调整策略

Oracle 数据库的性能优化,可以从数据库的体系结构、软件结构、模式对象以及具体的业务和技术实现出发,进行统筹考虑。优化是有目的地更改系统的一个或多个组件,使其满足一个或多个目标的过程。下面从几个不同方面介绍Oracle 数据库优化设计方案。

2.1 内存区调整与优化

Oracle 数据库实例的内存结构主要由SGA 和PGA 构成,其中SGA 主要包括数据缓冲区、共享池、日志缓冲区,它们的分配是否合理直接决定了数据库性能。

1) 数据缓冲区调整与优化。数据缓冲区用于存储从数据库中检索的数据。如果用户请求的数据在数据缓冲区中,则数据从数据缓冲区中直接返回给用户,查询时间短。如果用户请求的数据不在数据缓冲区中,则先由服务器进程将数据从数据文件读取到数据缓冲区,然后再从数据缓冲区中将数据返回给用户,查询时间延长。因此,保证尽量多的用户请求数据在缓冲区中,避免读取数据文件,可以大大提高数据的操作性能。[2]

2) 共享池调整与优化。设置共享池的目的为了缓存已经被解析过的SQL,而使其能被重用,不再解析。[3]通过确保大多数语句能够在共享池中查找到它们自己的一个已分析版本,就可以提高语句分析和执行的效率,降低资源消耗。共享池中存放的信息是应用程序需要经常访问的,因此需要保持这些信息的高命中率。共享池大小是否合适,主要体现在库缓冲区和数据字典高速缓冲区的命中率上。

3) 日志缓冲区调整与优化。日志缓冲区用于存放数据的修改信息。日志首先写入日志缓冲区,在一定条件下由L GWR 进程将日志缓冲区的信息写入日志文件。如果日志缓冲区已满,但还没有写入日志文件,则日志写入处于等待状态,即日志缓冲区写入失败。过多的日志写入失败,说明日志缓冲区偏小,影响数据库性能。

4) PGA 区调整与优化。PGA 区主要由私有会话区以及排序区构成。其中,排序区设置是否合理对数据库性能有一定的影响。在Oracle 数据库中,排序可以在PGA 的排序区或临时表空间的临时段中进行,由于使用临时段时需要对磁盘进行I/O 操作,降低的排序的效率,因此Oracle 建议尽量在排序区中进行排序操作。

2.2 磁盘I/O 调整

对于数据库系统来说,磁盘I/O 操作是数据库性能最重要的方面,影响磁盘I/O性能的主要原因有磁盘竞争、I/O次数过多和数据块空间的分配管理。减少磁盘I/O操作的最根本的方法就是利用高速缓存存放频繁使用的数据信息,最小化磁盘I/O,降低Oracle 服务器查找和返回行所花费时间的最有效的方法之一就是利用索引、分区。

1) 索引Index 的优化设计。索引是数据库中重要的数据结构,是优化的基础,索引把表中的逻辑值映射到RowID,因此索引能进行快速定位数据的物理地址。索引必须充分利用才能加快数据库访问速度, 建立索引根本目的是提高查询效率,利用索引行记录定位,减少磁盘的读写次数,从而达到提高查询速度的目的。一个建有合理索引的数据库应用系统可能比一个没有建立索引的数据库应用系统效率高几十倍,但并不是索引越多越好,在那些经常需要修改的数据列上建立索引,将导致系统性能的下降和存储空间的浪费。

2) 使用Oracle 分区技术。分区将数据在物理上分隔开,不同分区的数据可以制定保存在处于不同磁盘上的数据文件里。这样,当对这个表进行查询时,只需要在表分区中进行扫描,而不必进行FTS(Full Table Scan,全表扫描),明显缩短了查询时间,另外处于不同磁盘的分区也将对这个表的数据传输分散在不同的磁盘I/O,一个精心设置的分区可以将数据传输对磁盘I/O竞争均匀地分散开。

2.3 回滚段设置

回滚段用于保存回退条目,将被修改的数据的初始版本保存在回退条目中,利用该信息,用户可以撤销未提交的事务,Oracle 可以维护数据库的一致性,并从实例崩溃中恢复。因此,回滚段在数据库事务处理中起着关键的作用,其设置是否合理直接影响到系统的性能。

在Oracle 10g 中,可以使用撤销表空间自动进行回滚段的管理,也可以手动进行回滚段的管理。在手工管理中,应该根据事务大小不同建立不同大小的回滚段,并分散到不同的表空间中。回滚段的数量与事务的数量有关,假设有n 个并发事务,当n < 16 时,需要建立4 个回滚段,当16 ≤ n < 32 时,需要建立8 个回滚段;当n ≥32 时,需要建立n/ 4 个回滚段[4] 。

2.4 碎片整理

由于数据库中数据库对象不断变化以及数据操作不断进行,导致磁盘碎片的产生。数据库中碎片可分为表空间级、表级、索引级三类。

1) 表空间级碎片是由于段的建立、扩展和删除引起的。可以通过重组表空间、执行AL TER TA2BL ESPACE . . . COAL ESCES 命令或先通过EXPORT程序将数据先导出,然后利用TRUNCATE 删除表中数据,最后利用IMPORT 程序将数据导入的方法消除表空间级碎片。[5]

2) 表级碎片是由于行迁移或行链接导致数据存储不连续而形成的。可以通过设置合适大小的数据块以及PCTFREE、PCTUSED 参数以尽量避免表碎片的产生。通常在创建数据库时,根据应用中记录的大小来设置标准数据块大小,保证其可以存储一条完整的记录。

3) 索引级碎片是由于索引太多、索引值变化频繁而导致B - TREE 结构失衡、叶节点排序混乱引起的。可以通过减少表上索引数量,以及在数据变化频率较低的列上创建索引或先进行数据的插入操作,然后再为表创建索引等方法,减少索引表的变化,降低索引碎片的产生。

2.5 CPU 性能调整

服务器的CPU 使用情况对数据库的性能影响很大,调整CPU 可以更有效地利用服务器的各种资源, 提高数据库的运行速度和效率。

1) 尽量利用多个CPU 处理器来执行事务处理和查询CPU 的快速发展使得Oracle 越来越重视对多CPU 的并行技术的应用,只要可能,应该将数据库服务器和应用程序的CPU 请求分开,或将CPU 请求从一个服务器移到另一个服务器。

2) 使用PQO 方式进行数据查询PQO 方式不仅可以在多个CPU 间分配SQL 语句的请求处理,当所查询的数据处于不同的磁盘时,一个个独立的进程可以同时进行数据读取。

2.6 SQL 语句优化

对数据库进行的各种操作(包括添加、删除、查询等等)最终都是通过数据库的SQL 语句来执行,因此SQL 语句的执行效率最终决定了Oracle 数据库的性能高低, SQL 语句的书写,通常应该遵循以下原则:

1) 尽量避免对全表扫描。

2) 对经常查询的表创建合理索引, 对大表的查询应在索引上进行。

3) 在字符串查询中尽可能少用通配符。

4) 如果多个表经常被查询,尽可能使其放在同一数据块中。

5) 尽量使用(not)exists 的操作替代(not)in 这样的操作。

6) 连接查询时, 要有充分的连接条件。

3 结束语

Oracle10g数据库系统性能优化与调整是一个复杂、繁琐的系统工程,贯穿于数据库系统开发的整个过程。数据库系统的优化和调整,包括内存结构调整、磁盘I/O 调整、磁盘碎片调整以及CPU 性能调整等,直接决定了整个数据库系统的性能,应该充分利用各种性能优化与调整策略进行反复的调整,以获得系统的最优性能。

参考文献:

[1] 藤永昌.Oracle数据库管理员大全[M].北京:清华大学出版社,2004.

[2] 布莱拉,马树其.Oracle 10G 新特性学习指南[M].北京:电子工业出版社,2005.

[3] 王海亮.精通Oracle 10G系统管理[M].北京:中国水利水电出版社,2005.