第3章多维索引
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.2.2 K-d树(k维搜索树)
• 早期建立多维空间索引的一种简单树形结构。 • 每个节点将一个空间划分为两个子空间。划分首 先通过树顶层节点的一个维进行,然后在紧接的 下一个层节点上用另一个维进行划分,以此类推。 • K-d树的数据结构特点
– 是二叉树的变种或推广; – 每个内结点关联1个属性及其属性值,将数据记录点在 该属性维上划分为两部分; – 不同层结点关联不同属性; – 所有属性在层间循环; – 叶结点是存储块,存储尽可能多的记录。
第二部分 数据存储管理
第3章 多维索引
• 关系
– account(branch-name, loan-number, balance), 在branch-name和balance属性上分别都有索引。
• 考虑针对该关系的一个多维查询:
SELECT loan-number FROM account WHERE branch-name=’Perryridge’ and balance=1000
• 一个网格文件有一个网格数组(grid array) 和两个与搜索键对应的线性标度(linear scale) 。 • 网格数组的每个单元(Cell)含有一个指向桶 的指针,每个桶可以是一个块或物理相邻 的块组,桶中直接存放记录。为了节省空 间,网格数组的多个单元可以指向同一个 桶。
插入一个搜索键为(70, 3.5K)的记录:
地理数据可分为两类 :
• 矢量数据(vector data)
– 由基本几何对象构成,如点、线段、三角形和二维多边 形,以及圆柱体、球体、立方体和其它多维几何体。 – 光栅数据(raster data)。这种数据由二维或更高维的位 图或象素图组成。二维光栅图的典型例子是卫星云图, 其中每个象素存储了特定地区的云层可见度。这种数据 也可以是三维的,例如,同样在卫星的帮助下测得的不 同地区在不同高度下的温度分布。时间可以形成另一个 维度。设计数据库通常不存储光栅本身数据。
k-d树及其所隐含的空间划分
K-d树
薪水1.5K 年龄60 年龄47
薪水0.8K
70, 1.3k 85, 1.4k
薪水3.0K
51, 2.75k 60, 2.6k
年龄38
51, 1.0k 51, 1.28k
30, 2.6k
26, 4.0k 45, 3.5k
26, 0.6k
45, 0.6k 51, 0.75k
5K 4K 3K 2K 1K * 0K 0 20 * * * * 40 60 * * * *
地理数据库的用途
• 地理数据库有多种用途,包括联机地图服务、交通 导航系统、公共服务设施分布网络信息等。 • 当前,基于Web的道路地图及相关设施服务,已 成为广受人们青睐的WEB应用程序。 • 交通导航系统是装载在车辆上的、提供道路地图和 旅行计划服务的移动地理信息系统。GPS是移动 GIS的一个有效附件,能利用GPS卫星,以几十米 的精度确定当前位置。
• 设销售事实表为
– Sales(dt_id, area_id, product_id, sales_count)
– 它通过dt_id、area_id、product_id三个属性分别关联到 时间维表dt_dim、地区维表area_dim和产品维表 prod_dim。 – 我们可通过发出如下的SQL语句,来获得与示图等效的 数据立方体。
几何信息表示方法
• 在DB中,各种几何结构有很多规范化的表示 形式。 • 可采用顺序列出多边形顶点来表示多边形, 也可用三角形剖分多边形的方法表示多边形。 复杂多边形被赋予一个标识符。
地理数据
• 地理数据实际上就是空间数据。 • 地图和卫星图像就是典型的例子。地图不 仅可以提供位置信息,如边界、河流和道 路等,而且还可提供很多与位置区域相关 的信息,如海拔、年降水量等。
网格文件对多维查询支持:
• 对指定点的查找,若无溢出块,仅需1次 I/O; • 部分匹配:可能需要查找桶矩阵的某行或 某列的所有桶,I/O数可能很大; • 范围查询:检查与范围区域有相交的所有 桶;
要回答简单范围查询:Age>20 and salary<1K
• 满足这个条件的所有单元第0行的1~4列上。 找出这些单元所指向的桶(本查询,有两个 桶),并有在桶中查找相应的记录。 • 由于桶中可能包含其它一些不满足查询条 件的记录,因此,需要对桶中记录的搜索 键进行逐个检查。但为了回答这个查询, 我们只需要检查很少的几个桶。
3.1.2 空间数据与地理信息系统
• 有两种类型的空间数据特别重要。
– 计算机辅助设计(CAD)数据:包括如何构造物体 的一些空间信息、集成电路设计信息等。 – 地理数据:例如道路地图、行政区域地图。地 理信息系统(GIS)是适用于存储地理数据的专用 数据库系统. – 许多数据库系统都添加了对地理数据的支持, 如IBM DB2 Spatial Extender, Informix Spatial Datablade和Oracle Spatial。
• 首先,我们用顾客月薪的线性标度,来定 位新Cell的行,按顺序它应位于第3行。如 果搜索键≥所有现有标度元素,则取最后一 行。 • 其次,我们用顾客年龄的线性标度定位新 Cell的列。本例中,应定位到第3列。存储 包含搜索键值(70, 3.5K)的记录到桶j中。
• 必须选择线性标度,使得记录能尽可能均匀分布在 各Cell上。当需要往一个已经满的桶中插入记录时, 系统必须为该桶添加挂接溢出块。但如果一个桶挂 接的溢出块过多,会影响系统的性能。 • 为改善这种情况的性能,
网格文件存在主要问题
• 概念上,将二维网格扩展到n维网格数组, 也是很简单的;但实际很少使用。 • 对于多键查询,网格文件有效减少查询处 理时间。然而,它也带来了:
– 额外的空间负荷(存放含桶指针的网格数组、各 搜索键的线性标度信息); – 额外的性能负荷(进行记录插入和删除时)。此外, 为搜索键选择合适的标度划分,使得记录能尽 可能均匀分布,也往往是很困难的一件事。 – 若插入到网格很频繁,还必须定期执行重新组 织,这往往也需要付出很高的代价的。
– 如果指向有溢出块桶(令为A)的Cell数超过1,可先分裂 A桶,即增加1个桶(令为B),并调原先指向A桶的部分 Cell指针,使其指向B桶。 – 如果指向有溢出块桶的Cell数只有1个,这是,我们只 有重新组织网格文件,扩展网格数组和扩展某个搜索键 的线性标度,这一过程很类似可扩展散列中扩展桶地址 表。
• 执行查询所需的I/O数估算公式: B-树查找的少量I/O+B-树需被检查的叶结点数 +读数据记录块的I/O数
示例问题
• 考虑一个含100万个记录点的关系(x,y),随机分布在 (0,0)-(1000, 1000) 矩形区域内。设:
– 每个块可存放100个记录点的数据,B-树的1个叶结点约 有200个键值-指针对; – x值落在[450,550]范围内的记录点数约有10万个, y也是 如此,而x和y同时落在[450,550]范围内的记录点数约有1 万个。
SELECT dt_dim.season,area_dim.city,prod_dim.prodtype,sum(sales_count) FROM sales INNER JOIN dt_dim ON sales.dt_id=dt_dim.dt_id INNER JOIN area_dim ON sales.area_id=area_dim.area_id INNER JOIN prod_dim ON sales.prod_id=prod_dim.prod_id WHERE dt_dim.year=2009 GROUP BY dt_dim.serson,area_dim.city,prod_dim.prodtype
有三种策略可处理这个查询:
• 用基于branch-name的索引来找出所有branchname=’Perryridge’的记录。然后,再检查这些记录,进一 步挑选出balance=1000的记录。 • 用基于balance的索引来找出所有balance=1000的记录。 然后,再检查这些记录,进一步挑选出branchname=’Perryridge’的记录。 • 先根据两个索引,分别找出满足branch-name=’Perryridge’ 和balance=1000的记录指针,然后,在内存中求这两组指 针交集,再通过属于交集中的指针找出所有目标记录。利 用位图索引可以加快这种方法的交集操作。
3.1 需要多维索引的应用简介
3.1.1 数据仓库的数据立方体
– 在数据仓库中,通常需要建立一种称为“数据立方体” 的多维数据结构,以更好支持决策分析。例如,一个全 国连锁店,可能记录每一笔销售,包括销售时间、销售 地区和商品的种类等。 – 可以把销售量、销售金额等数据作为希望观察的事实数 据,而把可能影响这些销售事实数据的各因子,如时间、 地区和商品类型等属性,作为不同的观察维度。 – 每个元组是该空间的一个点。然后,分析人员可按某些 维对数据进行分组,并通过聚集汇总这些分组。
多维索引结构
• • • • 网格索引结构 (类散列结构) kd树 (类树结构) 四叉树 (类树结构) R树 (类树结构)
3.2.1 网格索引结构
本章后面介绍常使用的一个例子: • 有一个存放顾客购买金首饰记录的 关系表(age, salary, …) • 表中有12个顾客,他们的记录表示成下列的年龄薪水对: (26, 0.6) (45, 0.60) (51, 0.75) (51, 1.0) (51, 1.28) (70, 1.30) (85, 1.4) (30, 2.60) (26, 4.0) (45, 3.5) (51, 2.75) (60, 2.6)
查询还可能要计算区域的交和并。例如,查询年降水 量低和人口密度高的区域。计算区域交的查询可被看 作计算空间连接。
3.2 空间数据索引结构
3.2.1 用传统索引执行范围查询 • 可采用的处理方案:
– – – – 为每一维(x和y)各建立一个辅助索引(不妨设索引结构是B树); 通过x的B树索引,找出x在范围内的所有指针; 通过y的B树索引,找出来自百度文库在范围内的所有指针; 如主存能存放下x, y 在查询范围内的所有指针,可直接在主存 中求指针交集。
试估算执行范围450 ≤ x, y ≤ 550内的记录点 查询所需的I/O次数。
I/O数估算
• 每块可存放100记录点,100万记录点,共需1万个 块存储数据。 • 每个叶节点可存200记录指针,x落在[450,550]内 约有10万记录个点,共需500个叶节点。如果B-树 根节点驻留主存,则我们检索关于x的B-树,找出x 在[450,550]内的所有指针,需要501次的I/O • 同样,找出y在[450,550]内的所有指针,也需501 次I/O。合计1002次I/O。 • 最后对已找到的1万个交集指针,还需进行实际记 录数据的读取。由于记录随机存放,可能需要检索 包含1万个记录点的所有块。
基于年龄和月薪这两搜索键建立的 网格索引结构
顾客月薪 的线性标度 4 * 4 4~5K 3 3~4K 2 2~3K 1 1~2K 0 0~1K 3 2 1 0 0 网格 数组 <20 0 * 1 * * * * 2 * * * * *
桶 j
*
桶 i
3
4 >80 4
可带 溢出块 的桶
20~40 40~60 60~80 1 2 3 年龄的线性标度
相应地理数据表示也有两种:
• 地理特征可表示成复杂多边形。某些特征 (如河流)可以表示成复杂曲线或复杂多 边形。我们可用多边形表示区域,每个多 边形表示一个区域,区域内部的数组值是 相同的。 • 关于地区的地理信息(如年降水量),可 以表示成一个数组,也就是光栅的形式。
空间查询的三种主要类型
• 临近查询:要求找出指定位置的对象。最 近邻查询(nearest-neighbor query)则要求 找出离指定点最近的对象。 • 部分查询:只指定部分维的值,查找维上 匹配这些值的所有点或形状; • 区域查询:查找全部或部分位于指定区域 内的对象。