1、空间数据库,Spatial database,本课程主要内容,数据库系统的一般知识空间数据库的基本概念数据库的结构与实现空间数据库索引技术,本课程的学习,考查(二选一)论文:自己创造一种新的空间目标索引方式或者对已有的索引方式进行修改,并分析其查询、删除、插入的性能闭卷考试教材的使用教材中所涉及的知识本课程课堂讲授中的取舍原则,空间数据库的基本概念,空间数据库的定义,目前无统一的定义可以理解为具有空间数据管理功能的数据库系统主要管理功能包括:创建、销毁增加、删除更新、查询其它管理功能备份、用户管理、转换,等等,空间数据库的定义,空间数据库与地理信息数据库空间数据库不仅用于地理信息存储检索,在医
2、学图像分析领域,分子生物学、药剂开发分子结构空间拓扑关系分析领域,运动分析领域,交通、电信等都有广泛的应用。,空间数据库与传统关系型数据库,传统关系型数据库查询空间数据查询速度是衡量数据库性能的重要指标。对于传统查询,比如“绩点在3.03.5之间所有的男生”,数据库会很快得到结果对于查询“列出家庭所在地距离南京300公里之内的所有学生”,传统数据库会如何处理呢?1)扫描整个数据库,将所有记录的家庭所在地字段映射为经纬度坐标(如果事先已经有地点-经纬度表,则这一步能省略)2)扫描整个数据库,计算与南京的距离,写入一个临时表(尽管常用也可以事先作成表,但是,对于更为复杂的空间查询,对于传统数据库还
3、是要遍历整个数据库)3)从临时表中查找小于300公里的记录(传统数据库所擅长的)如果一个查询需要扫描整个数据库,那性能是非常低下的。实际上,对于传统查询,数据库一般不需要进行全库扫描。,空间数据库与传统关系型数据库,传统数据库存储空间数据 一个行政区建模的例子:在数据库中建表create table blocks(namestring,areafloat,populationinteger,boundarypolygon)其中polygon不是内建数据类型,没有定义与之相关的操作,传统解决办法:,空间数据库与传统关系型数据库,1)创建级联形式的表 这种方式复杂,需要同时在多个表之间不断地查询,
4、效率太低;扩展性差。2)采用触发器 一旦SQL中使用到Polygon类型的数据的相关操作,就触发存储过程,完成相关的操作。效率低,用户使用不便。,blocks,polygon,edge,Point,空间数据库与传统关系型数据库,传统数据库出现多个表级联方式存储空间数据,造成查询效率低下,关键在于,polygon不是内建数据类型,没有相关的操作,必须将其转换为传统数据类型。(对于传统的数字类型有加减乘除、大小比较等操作,字符串有比较、子串查找、连接等操作)能否自行构造数据类型(比如polygon)加入到数据库中?对象关系数据库(OR-DBMS),空间数据库与传统关系型数据库,基于对象关系型数据库
5、(OR-DBMS)的实现方式OR-DBMS支持抽象数据类型(ADT abstract data type)的插入和删除,且不影响其他数据类型;抽象数据类型中的函数可以放在SQL语句中调用。 下面给出空间数据库的体系结构图,空间数据库与传统关系型数据库,空间应用层(GIS)通过中间层与对象-关系数据库进行交互,这个中间层就是空间数据库(SDB)。中间层封装了大部分的空间领域的知识,插入到OR-DBMS当中。在不同的厂家对于这个中间层有不同的名称:空间数据刀片(Spatial Data Blade,Ilustra),空间数据盒(Spatial Data Cartridge,Oracle),空间数据
6、引擎(Spatial Data Engine,ESRI)实现了空间数据库后,可以定制空间原语,用SQL语句完成查询。比如:“找出所有与河海相邻的单位的名称”,SELECT M.Name FROM land_parcel L,M WHERE Adjacent(L,M) AND L.Name=河海大学其中Adjacent就是一个空间原语。,空间信息模型,空间信息模型类型 1、场(field)模型,包含三个组成部分空间框架(spatial framework):加在基本空间上的网格。例如经纬网。场函数(field function):是一组映射,将空间框架映射到不同属性域当中。框架映射到高程属性形成
7、DEM。场操作(field operation):用于不同场之间的联系和交互。比如同一景遥感图像的不同波段的叠加。场操作分为三类:局部操作(local),聚焦(focal),区域(zonal)。局部操作,结果只依赖独立像素取值,与周围像素无关。比如遥感分类,区分植被、沙地等。聚焦操作,结果取决于周围邻域像素的取值。比如,梯度法边缘提取。区域操作,结果取决于某个区域的所有元素取值。比如,某个区域的平均高度。 2、对象(object)模型 在基于对象的建模中,把空间信息抽象成明确的、可区分、可识别的和相关的事物或实体称为对象。(相对于场而言,对象模型是有边界的) 空间对象的最主要的特点是空间对象的
8、属性分为空间属性和非空间属性。一个空间对象可以有多个空间属性。(城市在不同比例尺中,可以是一个点,也可以是多边形),空间信息模型,空间数据类型(OGIS)空间表示体系:用于描述几何体的坐标系统。例如经纬度,公里网等几何体:点(point)线(curve)面(surface)点:表现零维对象。例如,城市、站点。线:表现一维对象。例如,河流,公路。线串(line string):直线段构成的折线,用于近似线。面:表现二维对象。例如,国家,行政区。多边形:多条直线段围成的几何体,用于近似面。几何体集合:多个面,多条线,多个点构成。,空间信息模型,空间对象的操作1.面向集合:并、交、包含,层次关系。2
9、.拓扑:对于平面上,两个对象之间的二元拓扑关系,根据在对象内部、边界和外部三种情况,可以组合生成9种拓扑关系,相离(disjoint)、相接(meet),叠合(overlap),相等(equal),包含(contain),在内部(inside)、覆盖(cover)、被覆盖(covered)。3.方位:东南西北,上下左右等。4.度量空间:例如,点与点之间的欧氏距离。5.欧氏空间:满足线性关系的空间。例如常用的xyz直角坐标系。,空间信息模型,动态空间操作 静态(static)操作:操作对象不受操作的影响。比如,计算直线的长度。动态(dynamic)操作:操作对象会被操作所改变。三种基本动态操作:
10、创建(create)、销毁(destory)和更新(update)。所有动态操作都是基于这三个操作衍生而来。例如:复制、分割、合并操作衍生自创建,平移、旋转、缩放、镜像对称等操作衍生自更新操作。,空间信息模型,常用的GIS功能1)搜索查找(区域查找、点查找)2)缓冲区、叠加、通视分析、廊道3)坡度坡向、流域河网生成4)连接性、可达性、最短路径5)变化检测、最近相邻6)中心、边缘、纹理、自相关、相似性检索、拓扑7)距离、周长、方向、形状,空间查询(检索),定义:从空间数据库中查找出满足某一条件的空间目标的过程。在GIS中,空间查询无处不在,是其它操作(增加、删除、更新等)的基础空间查询性能是GI
11、S应用系统成功的关键所在,空间查询,常见查询1、点查询(point query):给定一个空间点,查找所有包含该点的空间目标。(比如,多边形包含点)2、区域查询(region query)相交查询(intersection query):给定一个查询区域,查询所有与之相交(重叠)的空间目标(线与线,线与多边形,多边形与多边形,点与多边形)包含查询(enclose query):给定一个查询区域,查询所有包含它的空间目标(多边形包含多边形)被包含查询(containment query):给定一个查询区域,查询所有被该区域包含的空间目标(多边形包含线,多边形包含多边形)相邻查询(adjacenc
12、y query):给定一个查询区域,查询所有与之相邻的空间目标。相邻指,两个空间目标有共同边界并且没有相互包含(多边形与多边形)3、范围查询(distance query):查询与给定对象之间距离小于某个给定值的所有对象。(点、线、多边形相互之间)4、最近邻居查询(nearest neighbor query):查询给定对象最近的对象(点、线、多边形相互之间),常用欧式距离。,空间查询,空间查询的归类范围查询和最近邻居查询是区域查询的特例点查询是是相交查询的特例,此时查找区域是一个点包含与被包含查询是相交查询的特例(是相交查询特殊情况,即,查找区域完全包含的目标)结论:相交查询是实现空间查询的
13、基础,是我们重点研究的方法。,空间查询,目标近似最小包围矩形(MBR/MBB Minimum Bounding Rectangle/Box)最小包围圆 (MBS/MBC Minimum Bounding Sphere /Circle)最小包围“m边形”(Minimum Bounding m-corner)MBR称目标的MBR为数据矩形称矩形的索引空间为目录矩形(作为目录的矩形,就是MBR的MBR)基于目标近似的空间检索的目的是为了提高检索效率。,空间查询,空间数据查询的难点:任何映射都不能保证在高维(比如二维或三维)距离相近的对象映射到一维上还是相近的。排序的功能:为了提高查询速度为了分析研究
14、规律建立空间索引的目标就是为了高效定位地理对象和查询信息,提高空间操作的效率,空间查询,空间数据聚类定义在设计空间数据库时,将空间上相邻的和查询上有关联的对象在物理上存储在一起,以降低系统I/O的访问时间,提高查询效率空间数据聚类的类型内部聚类:为了加快单个对象的访问,一个对象的全部表示都存放在同一个磁盘页面中,当一个页面不够时,存放在多个物理上连续的页面中。本地聚类:为了加快多个对象的访问,一组空间对象被分配到同一个磁盘页面中。这种分组可以按照对象位置关系进行。全局聚类 :一组空间相邻的对象被分配到多个物理邻接的磁盘页面中,这些页面可以由一条单独的读命令访问。空间聚类的目的是为了提高查询效率
15、。,空间查询语言,示例数据库World,county,city,river,关系代数,选择运算:检索关系表中行的子集,不对关系表作修改。 ,从country表中列出所有位于北美洲的国家投影运算:检索关系表中列的子集,不对关系表作修改。 ,把country表中所有国家名字列出。两者复合运算: ,列出北美洲所有国家的名字。,关系代数,集合运算:集合运算的前提条件:并运算相容(union compatible)。如果两个表列数相同,列的顺序相同,共享相同的值域,称这两个表(关系)是并运算相容的。集合并(Union):如果R,S是两个关系(表),RS返回R或者S中所有元组。例子:要么位于北美洲,要么有
16、一条河流发源于北美洲的国家注意,S.origin与R.Name具有相同的值域,都是国家名字,因此,R与S是并运算相容的。集合差(Difference):R-S返回所有包含在R中,但不包含在S中的所有元组。例子:位于北美洲但不是河流发源地的国家集合交(Intersection):如果R,S是两个关系(表),RS返回既在R又在S中所有元组。集合交可以由集合差得到RS=R-(R-S)例子,既在南美洲又是河流发源地的国家,关系代数,笛卡尔积(Cross-Product):对于任意两个关系(表),RS返回一个关系(表),由R的所有属性加上S的所有属性构成。连接运算:1)条件连接对于任意两个关系(表)R、
17、S,条件连接为:RcS=c(RS) 2)自然连接自然连接是条件连接的特例,等值属性连接。,R,S,RS,SQL语言及其空间扩展,SQL语言的构成SQL语言由两部分构成,数据定义语言和数据操纵语言:DDL(data definition language),用于创建、删除、修改数据库表的定义。例如,CREATE TABLE CITYNamevarchar(35),Countryvarchar(35),Popint,DML(data modification language),用于查询、插入、删除、修改表中的数据。例如,INSERT INTO,DELETE FROM,SELECTFROM,SQL
18、语言及其空间扩展,SQL语言的不足1)数据类型太简单,只有整型、日期型、字符串型等,不能支持点线面等复杂数据类型(没有相应的操作原语)。2)所有数据类型都是固定的,无法增加新的数据类型。解决方法:1)利用BLOB类型字段存储空间信息。效率低下,依赖于宿主语言的应用程序代码。2)混合系统,空间数据以文件形式保存在数据库外部(比如,MapInfo)。无法利用数据库的服务,比如查询语言、并发控制、索引支持等。3)利用OR-DBMS自定义ADT。比如,自定义polygon数据类型,以及相应的函数方法,比如adjacent。,SQL语言及其空间扩展-OGIS,OGIS标准的SQL空间扩展OGIS操作分类
19、:1)用于所有几何类型的基本操作。例如,SpatialReference返回几何体采用的坐标系统2)用于空间对象之间拓扑关系的操作测试。例如,overlap返回两个对象是否相交。3)用与空间分析的一般操作。例如,distance返回两个空间对象之间的最短距离。OGIS标准的局限性:1)支持空间对象模型,对场模型支持不好。2)对象模型查询操作存在局限性。(GROUP BY ,HAVING存在问题)3)不支持基于方位的谓词操作(比如,东南西北,上下左右前后等)4)不支持基于形状、基于可见性等的操作。,SQL语言及其空间扩展-OGIS,基本操作,SQL语言及其空间扩展-OGIS,OGIS查询示例,以
20、World数据库为例1)美国的邻国,touch函数SELECTC1.Name AS “Neighbors of USA”FROMCountry C1,Country C2WHERETouch(C1.Shape,C2.Shape)=1 AND C2.Name=USA,county,city,river,SQL语言及其空间扩展-OGIS,2)所有河流流经的国家,CROSS函数SELECTR.Name C.NameFROMRiver R,Country CWHERECross(R.Shape,C.Shape)=1,county,city,river,SQL语言及其空间扩展-OGIS,3)对于所有河流
21、列出距离其最近的城市,DISTANCE函数SELECTC1.Name , R1.NameFROMCity C1,River R1WHEREDistance(C1.Shape,R1.Shape)C2.Name),county,city,river,SQL语言及其空间扩展-OGIS,4)距离圣劳伦斯河300公里之内的所有城市,BUFFER、 OVERLAP函数SELECTC.NameFROMRiver R,City CWHEREOverlap(C.Shape,Buffer(R.Shape,300)=1 AND R.Name=St.Lawrence,county,city,river,SQL语言及其
22、空间扩展-OGIS,5)列出每个国家的名字、人口和国土面积,AREA函数SELECTC.Name, C.Pop,Area(C.Shape) AS “Area”FROMCountry C,county,city,river,SQL语言及其空间扩展-OGIS,6)求出每条河流流经每个国家在其境内的长度,LENGTH,INTERSECTION,CROSS函数SELECTR.Name,C.Name,Length(Intersection(R.Shape,C.Shape) AS “Length”FROMRiver R,Country CWHERECross(R.Shape,C.Shape)=1,coun
23、ty,city,river,SQL语言及其空间扩展-OGIS,7)每个国家的GDP,以及其首都到赤道的距离,DISTANCE、POINT函数SELECTCo.GDP,Distance(Point(0,Ci.Shape.y),Ci.Shape) AS ”Distance”FROMCity Ci,Country CoWHERECo.Name=Ci.Country AND Ci.Capital=Y,county,city,river,SQL语言及其空间扩展-OGIS,8)按照邻国数目列出所有国家,COUNT函数,GROUP BY,ORDER BYSELECTC.Name, Count(C1.Name
24、)FROMCountry C, Country C1WHERETouch(C.Shape,C1.Shape)GROUP BY C.NameORDER BY Count(C1.Name),county,city,river,SQL语言及其空间扩展-OGIS,9)查询只有一个邻国的国家(岛国没有邻国),TOUCH、COUNT函数SELECTC.NameFROMCountry C, Country C1WHERETouch(C.Shape,C1.Shape)GROUP BYC.NameHAVINGCount(C1.Name)=1,county,city,river,SQL语言及其空间扩展-OGIS,
25、10)查询邻国最多的国家,TOUCH、COUNT函数第一步创建视图,所有国家的邻国数目CREATE VIEWNeighbor ASSELECTC.Name,Count(C1.Name) AS num_neighborsFROMCountry C, Country C1WHERETouch(C.Shape,C1.Shape)GROUP BY C.Name,county,city,river,SQL语言及其空间扩展-OGIS,10)查询邻国最多的国家,TOUCH、COUNT函数第二步,基于视图的查询,找出邻国最多的国家SELECTC.Name, num_neighborsFROMNeighborW
26、HEREnum_neighbors=(SELECT Max(num_neighbors)FROM Neighbor),county,city,river,SQL语言及其空间扩展-SQL3,SQL3概览 SQL3的两个主要扩展方向:1) ADT创建:用CREATE TYPE语句定义ADT,ADT由一组属性以及访问属性的成员函数组成。例子,创建一个Point类型,并定义成员函数Distance。CREATE TYPEPoint(x NUMBER,y NUMBER,FUNCTION Distance(:u Point,:v Point)RETURNS NUMBER); 其中,:u与:v为局部变量。2
27、)行类型行类型用于定义关系(表)时的类型,指定关系的模式。例子,创建行类型PointCREATE ROW TYPEPoint (x NUMBER,y NUMBER);创建一个表作为这个行类型的实例CREATE TABLE PointTable of TYPE Point;,SQL语言及其空间扩展-SQL3,对象关系模式 :oracle8 构造Point、LineString、Polygon1)Point类型CREATE TYPEPoint(x NUMBER,y NUMBER,MEMBER FUNCTION Distance(P2 IN Point) RETURNS NUMBER,PRAGMA
28、RESTRICT_REFERENCES(Distance,WNDS); 其中,约束参考中规定了函数Distance不会修改数据库状态,WNDS=Write No Database State例子:建表:利用Point类型可以作为一个属性(字段)类型用于关系(表,视图)中定义城市CREATE TABLECity(Namevarchar(30),Countryvarchar(50),Popint,Capitalchar(1)ShapePoint);录入INSERT INTO City(Brasilia,Brazil,1.5,Y,Point(-55.4,-23.2);,SQL语言及其空间扩展-SQL
29、3,2)LineString类型首先创建线类型CREATE TYPE LineType AS VARRAY(500) OF Point由于LineType是变长数组类型,不是类对象,不能为其定义成员函数。其次,创建LineString类型CREATE TYPE LineString AS OBJECT(Num_of _Pointsint,GeometryLineType,MEMBER FUNCTION Length(SELF IN) RETURN NUMBER,PRAGMA RESTRICT_REFERENCES(Length,WNDS);例子,建表:CREATE TABLERiver(Nam
30、evarchar(30),Originvarchar(50),Lengthnumber,Capitalchar(1)ShapeLineString);录入:INSERT INTO River(Mississipi,USA,6000,Y,LineString(3, LineType( Point(1,1), Point(1,2), Point(2,3) );,SQL语言及其空间扩展-SQL3,3)Polygon类型创建类型(两步)CREATE TYPE PolyType AS VARRAY(500) OF PointCREATE TYPE Polygon AS OBJECT(Num_of _Po
31、intsint,GeometryPolyType,MEMBER FUNCTION Area(SELF IN) RETURN NUMBER,PRAGMA RESTRICT_REFERENCES(Area,WNDS);建表:CREATE TABLECountry(Namevarchar(30),Contevarchar(50),Popint,GDPnumber,Life-Expnumber,ShapePolygon);录入:INSERT INTO Country(Mexico,NAM,107.5,694.3,69.36,Polygon(23, PolyType( Point(1,1), Point
32、(1,2), Point(2,3) );,SQL语言及其空间扩展-SQL3,1)列出所有城市两两之间的距离SELECTC1.Name,C1.Distance(C2.Shape) AS DistanceFROMCity C1,City C2WHEREC1.NameC2.Name注意非面向对象的语法Distance(C1.Shape,C2.Shape),与面向对象的语法C1.Distance(C2.Shape)的区别。,county,city,river,SQL语言及其空间扩展-SQL3,验证比较数据库表保存的河流长度与Shape计算出的河流几何长度的差别SELECTR.Name,R.Length
33、,R.Length() AS Derived LengthFROMRiver R,county,city,river,SQL语言及其空间扩展-SQL3,列出与美国接壤的国家名字,人口和国土面积SELECTC2.Name,C2.Pop,C2.Area() AS AreaFROMCountry C1,Country C2WHEREC1.Name=USA AND C1.Touch(C2.Shape)=1,county,city,river,空间数据库索引技术,B-树,定义:B-树是动态调节平衡多路检索树,定义如下:一棵2m+1阶的B-树,或为空树,或为满足下列特性的2m+1叉树: 1)非叶结点子树数
34、量:最多2m+1棵,最少m+1棵(根结点至少2棵)2)叶子结点都在最底层3)非叶结点的结构(1=i=2m+1) 关键字k顺序排列,两个关键字ki和ki+1之间指针pi所指的子树的所有关键值都在ki和ki+1之间。关键字k中包含了相关的信息内容。注意所谓阶数是指指针的数量,不是关键字的数量,两者相差1.,B-树,检索:从根结点开始,在每个结点中使用折半查找定位待查关键字对应指针,直到叶子结点。检索效率与结点中元素个数与树的高度有关。举例,查找16,63.,B-树,插入:举例说明1)原始状态插入键值12,B-树,插入:插入键值12后 插入46结点分裂,45上升到父结点,B-树,删除:删除x1)如果
35、x在叶子结点上,进行叶子结点删除2)如果x在非叶结点上,x由右子树最左叶子替代(本质上是中序排列的后继)叶子结点删除:1)如果删除后能满足B树结点下限数量要求,则直接删除2)如果产生结点x下溢,则需向其相邻的兄弟结点y借用一个元素3)借用元素后,如果造成兄弟结点y下溢,则需合并结点x和y,致使xy的父结点也减少一个元素4)如果造成父结点下溢,则继续进行借用和合并。,B-树,删除:1)原始状态,准备删除41,B-树,删除:2)删除41,直接删除下一步,删除78,B-树,删除:3)删除78,79上移入父结点下一步,删除69,B-树,删除:4)删除69,结点下溢,向兄弟结点借用元素下一步,删除12,
36、向左兄弟借,B-树,删除:5)删除12,造成所在结点下溢,并造成父结点下溢,需要两次合并第一次,合并2,7, 15以及原来的父结点元素11,成为父结点的子树,B-树,删除:5)删除12,造成所在结点下溢,并造成父结点下溢,需要两次合并第二次,合并30,66,81至根结点,B+-树,定义:2m+1阶的B+-树满足以下条件:1)每个结点至多有2m+1棵子树,至少有m+1棵子树(根结点至少2棵)【此条件与B-树相同】2)叶结点都在同一层(底层)【与B-树相同】叶结点包含有键码和指针,键码是磁盘文件数据块内容的关键码,指针是指向磁盘文件数据块的地址。【与B-树不同,B树非叶结点k中包含信息,叶结点不包
37、含任何信息】叶结点按照关键字大小顺序链接成线性链表。【与B-树不同,B树叶结点孤立存在】3)有n棵子树的非叶结点有n-1个关键码【与B-树相同】4)非叶结点中,关键字k不包含任何其它信息【与B-树不同】,实际的信息包含在叶结点中。,B+-树,检索:1)随机检索,从根结点一直查找到叶子结点才能得到数据【与B-树不同,对于B-树只需要找到对应的非叶结点就能获得数据】2)顺序检索,从顺序链表的头指针开始顺序查找叶子结点。,B+-树,插入:1)原始状态 准备插入8,B+-树,插入:2)插入8,结点分裂,在父结点插入新结点5,B+-树,插入:3) 父结点上溢分裂,B+-树,删除:1)一般情况,只需要删除
38、叶子结点,非叶结点属于索引部分,不需要改动2)如果产生下溢则需要合并结点删除举例:1)删除19,无需改动下一步,删除20,B+-树,删除:2)删除20,产生下溢,向兄弟借用结点下一步,删除24,B+-树,删除:3)删除24,27、30结点发生下溢,30与其兄弟5、13合并,,R-树,R树定义 M阶的R树结点定义叶子节点:中间结点(非叶子节点): 其中: 被称为数据项,OI为空间目标的标识,MBR为该空间目标最小包围矩形(数据矩形),点的MBR就是点本身 称为索引项,CP为指向子树根节点的指针,MBR为子树的所有目录矩形或数据矩形的最小包围矩形(目录矩形) COUNT表示索引项的个数(孩子的个数
39、) LEVEL结点所处的层次。,R-树,为了保证存储的效率,减少存储空间的浪费,需要规定结点包含索引项和数据项的下限。设m为结点包含索引项和数据项的下限,可以在2,M/2之间取值,通常取M/2。如果结点包含的项目数量小于m,称为结点下溢。此时需要结点合并。如果结点包含的项目数量大于M,称为结点上溢。此时需要结点分裂。,R-树,R-树必须满足以下特性:1)若根结点不是叶子,则至少有两棵子树。(根结点由于没有兄弟,无法合并,因此,不存在结点下溢。如果根结点没有子树,则是也是叶子节点;如果只有一颗子树,则该根结点是多余的,可以用子树替代)2)除了根结点,中间节点子树数量在m,M区间。(如果小于m则需
40、要与兄弟结点合并,如果大于M则需要分裂)3)叶子结点包含的数据项在m,M区间。4)所有叶子结点位于同一层次。5)每个结点存储空间相同(都是一个磁盘页),R-树,空间特性:1)数据矩形可以重叠2)目录矩形可以重叠3)精确查找(不是范围查找)可能需要多条查找路径(这是由于MBR存在重叠),R-树,R-树,查找查找与红色方框P相交的空间目标:1)比较P与R1、R2是否相交 ,结果P R1、PR22)P与R3、R4、R5比较是否相交,结果P R1 R53)P与叶子结点r7、p6、p7比较是否相交,结果与r7、p7相交4)P与R6、R7、R8比较是否相交,结果P R2 R85)P与叶子结点r8、p8、p
41、9、p10比较是否相交,结果与r8相交6)查找结果为r7、p7 、r8,R-树,建立高效R树的原则:1)死空间尽量小2)目录矩形之间重叠要少,以减少查找路径数量3)目录矩形尽量接近正方形(周长/面积比要小)4)尽量提高存储空间的利用率,以减少结点数目,降低树的高度,提高查找效率。,R-树,插入插入的原则:(最小覆盖面积原则) 1)包围新增目标后,目录矩形的面积增量最小的索引项 2)如果面积增量相同,选择目录矩形的面积最小的索引项插入过程(递归过程): 1)检查根结点中所有目录矩形,根据最小覆盖面积原则,找到一个索引项R 2)插入以R为根结点的子树 3)插入到叶子结点 若叶结点未满,则插入新增目
42、标 从叶子到根结点回溯,依次调整插入路径上所有目录矩形的的信息 若叶结点已满,则分裂叶结点(增加一个叶结点),父结点新增一个索引项,父结点 新增索引项指向新增叶结点 若父结点索引项数目已满,则分裂父结点,直至根结点。(结点的上溢,分裂操作向 上传播),R-树,结点分裂方法与插入原则相同,结点分裂需要保证分裂后的两个索引项的目录矩形最小。线性阶分裂算法:设待分裂的结点为N,Nij为结点N中第i项第j维的值。下面以二维为例说明:1)从N中选择两个索引项Ns,Nt作为种子。Ns,Nt是N中相距最远的两项。Ns,Nt分别划入Group1和Group22)从N中任意选取一个索引项Nk,依次做如下处理:如
43、果Group1的项数已经包含M-m+1项(此时,Group2的项数必然小于m项),则将Nk划分至Group2如果Group1的MBR面积增量小于Group2,则Nk划入Group1,反之划入Group2如果Group1的MBR面积增量等于Group2,则比较Group1和Group2的MBR面积,Nk划入面积小的Group如果面积增量和面积都相等,则Nk被划入索引项少的Group如果面积增量、面积和索引项数量都相同,则划入任意Group3)新增一个结点M,将Group1和Group2分别存入M和N4)N的父结点中插入M,如果产生上溢分裂则继续进行。,R-树,删除1)找到需要删除的叶结点2)删除
44、目标对应的数据项3)从叶结点到根结点,调整各个索引项的目录矩形删除叶结点N下溢(underflow)的处理1)将剩余兄弟叶子结点的重新插入父结点M中2)删除叶结点N在父结点M中的索引项3)父结点产生下溢则同样处理举例:删除r11)查找r1,路径为:R1R3r12)删除叶结点r1 3)调整R3的MBR使之包围p1和p44)调整R1的MBR使之包围R3、R4、R5,R-树,特性优点:具有B树的优点,自动平衡,空间利用率高,适合外存存储缺点:由于目录矩形存在重叠,因此,查找路径可能存在多条,影响查找效率。而且,数据量的增加会增加目录矩形重叠。,R*-树,重叠计算方法:1)直接计算法:目录矩形的重叠面
45、积:Ei为树的结点各项,各个索引项重叠面积计算如下: 直接计算结点内p个索引项之间的时间复杂度为O(p2),(注意这是时间复杂度,不是实际的比较次数,实际比较为连接矩阵的上三角或下三角矩阵,不包括对角线元素,实际的比较次数为p2-p/2=p(p-1)/2)2)近似最小重叠法:按照包围新增数据矩形(注意是叶子结点才有数据矩形)后,目录矩形MBR面积的增量大小,将结点中的p个索引项按照升序排列,选定前q个索引项,则各索引项的重叠计算公式为:,R*-树,R*树与R树的区别:R*树是对R树的局部改进,两者区别有以下三点:1、插入的原则孩子是叶子:1)包围新增数据矩形后,目录矩形重叠增长最小的索引项2)
46、重叠增长相同,则目录矩形的面积增量最小的索引项3)如果面积增量相同,选择目录矩形的面积最小的索引项孩子是非叶子结点:与R树相同对于非均匀分布的“小”的数据矩形或点而言,优化对检索性能提高较大。,R*-树,2、结点分裂算法(以二维空间为例)结点分裂就是要将原来的M+1个项分裂为两组,分裂算法的任务就是确定两组索引项(或数据项)的各个维度的上下限。设2维空间的矩形表示为(I1,I2),其中,Ii=(Lowi,Highi)i=1,2对于每一空间轴i,将待分裂的M+1项数据(目录)矩形分别以Lowi,Highi的值排序,(对于二维平面,就是按照x轴和y轴进行上下限排序,共4个序列:Low1,Low2,
47、High1,High2)对这四个序列分别进行划分,每个序列划分为两组Group1和Group2,每组保证至少有m个值(m为结点包含孩子的下限)。第一组分别取第mM-m+1个值;另一组取剩余的值,相应的取值数量为第M-m+1m个值。(注意序列都是有顺序的),则对于一个序列,其划分方法一共是M-2m+2种。,R*-树,通过确定优势值(goodness value)来确定每个序列的划分方法:1)area-value=areambr(Group1)+ areambr(Group2) 分裂后两组数据最小矩形的总面积2)margin-value=marginmbr(Group1)+ margin mbr(Group2) 分裂后两组最小矩形周长之和3)overlap-value=areambr(Group1)mbr(Group2) 分裂后两组最小矩形重叠面积分裂算法描述1)对于每一空间轴(维),将待分裂的M+1项数据(目录)矩形分别以Lowi,Highi的值排序,并计算所有划分得到的margin-value之和S,选取S值最小的空间轴作为分裂轴(维)2)根据选定的分裂轴,从2(M-2m+2)种(包含Low和High,Low或High划分分别都是M-2m+2种)划分中选择overlap-value最小的划分,如果overlap-value相同,则选择area-value最小者。,