当前位置:
文档之家› 第4章 空间存储和索引 ok
第4章 空间存储和索引 ok
东华理工 大 学 程朋根
全部存取时间(ta)可用下式计算 Ta = ts + tl + tt 且 ts > tl > tt 虽然传输时间tt在磁盘初始化的时候已经固定,但 将数据按照一定策略放置在磁盘上仍然可以在很 大程度上减少寻道时间tl和延迟时间tt。
Western Digital Caviar AC36400磁盘驱动器的物理和性能参数 格式化容量 柱面数 每磁道的扇区数 每个扇区字节数 6448MB 13 328 63 512 盘片数 寻道时间 延迟时间 3个双面的 9.5ms 5.5ms
东华理工 大 学 程朋根
簿记
(bookkeeping) 通过维护一个全局页表和全局空 闲链表来实现:
如果在本地集和全局页表中找到了所请求的页面,
就直接返回这一页,同时更新该页的使用情况统计 信息。
如果没有找到这一页,则把该页读入本地集合(一
个空页)中。
如果没有可用的空页(例如,本地集的大小超过了
最大的阈值),就要根据本地集所指定的页面置换 规则,替换一个已经存在的页面。
东华理工 大 学 程朋根
4.1.3
域、记录和文件
文件是记录的集合,一个文件(可能)跨越多个页面。一
个页面是槽的集合,每个槽包含一条记录。
每条记录都是相同或不同类型的域的集合。 二进制大对象(BLOB)域类型在空间数据库的发展中起
东华理工 大 学 程朋根
访问方法的算法
使用Z序方法可以处理早先列出的所有查询: 点查询 使用二分法在排序文件中查找给出的z值,或在基 于z值的B树索引上使用B树搜索。 范围查询 选择查询区域的近似表示,尽量平衡z值的数量和 近似中出现额外区域的数量,然后搜索数据区域的 z值以匹配z值。 最近邻居查询 采用z序的B树来处理最近邻居的查询。 首先,计算查询点pi的z值,并从B树中找到数据 点pj和最接近的z值。 然后计算Pi与Pj之间的距离r。以Pi为中心r为半 径进行范围查询。
了重要作用。传统的数据库不能显式地处理点、线和多 边形这些复杂的数据类型,但它们却支持将复杂对象转 换成二进制表示并存储到BLOB域中。通过这个方法 RDBMS就可以对复杂数据类型进行管理并提供事务支 持。
东华理工 大 学 程朋根
将记录从Country、City和River表映射到磁盘页
CITY表的每条记录大小是73字节,存储9条记录需 要657字节,假设每个扇区512字节,则可以存储到 磁盘的两个扇区中。
东华理工 大 学 程朋根
4.1.4
文件结构
1.无序文件(堆)
记录没有特定的顺序,根据给定的关键码(如 name)查找一条记录需要扫描文件中的记录。在最 坏情况下,文件的所有记录都要被检查,所有存 储该文件数据的磁盘页面都要被访问。平均来说 ,需要检索一半的磁盘页面。 无序文件的主要优点是在进行插入操作时可以很 容易地在文件末尾插入一条新记录。
50%。 Hilbert曲线的方法要比Z曲线好一些,因为它没有斜线。但 Hilbert算法和精确入口点及出口点的计算量都要比Z曲线复 杂。
东华理工 大 学 程朋根
区域处理
要把一个N维空间中的区域转换成点,可以对扩展对象
的最小正交外包矩形使用维数的2倍(2N)次Z曲线。 一个区域通常划分成一个或多个片(块),每个块可以 由一个z值描述。 块是原始图象由四叉树分割的一个或多个部分的正方 形区域。 每个对象(和范围查询)都可以用该块的z值唯一地表 示(或者用它的块的最大和最小z值表示)。每个这样 的z值都以(z值、对象id、其他属性......)的形式作为 记录的主码,并且可以插入到一个主码文件结构中, 例如B+树。
第四章 空间存储和索引
东华理工 大 学 程朋根
从空间数据库获得数据的方法通常是通过使用索引 (index)完成的。 数据库的索引可以用来快速访问一条特定查询所请求 的数据,而无需遍历整个数据库。 本章我们讨论研究物理数据库的设计,从某种意义上 说,这是深入到“黑匣子”的内部。 物理数据库设计对确保各种查询的合理性能至关重要, 这些查询用高级逻辑语言书写的,例如SQL,这些高级 语言屏蔽了实现算法和数据结构。
东华理工 大 学 程朋根
东华理工 大 学 程朋根
2. 磁盘数据块信息拷贝到主存过程 一旦磁头移动到正确的磁道,目标块在磁头下方旋转, 块上磁化的信息就通过磁头拷贝到主存。 整个过程可以分为三步: 首先是寻道时间(ts),它衡量磁头到达特定磁道 所用的时间 其次是延迟时间(tl),它是块旋转到磁头下方所 用的时间 最后一个是传输时间(tt),即置于正确位置后磁 头读或写块中数据的实际时间
东华理工 大 学 程朋根
4.1.2
缓冲区管理器
缓冲区管理器是DBMS中一个软件模块,专门负责管
理主存与二级存储之间的数据传输。
在关系数据库管理系统中,缓冲区管理主要基于关
系查询行为。一组被频繁访问的页面称为频繁访问集 (hot set)。
缓冲区是以一个文件实例(表)为单位进行分配和
管理,和一个文件实例关联的缓冲页面集合被看作是 它的本地集 (local set ),其大小根据查询计划和数 据库的统计信息来决定。
磁盘页面容量 分割算法 插入顺序 … 采用聚类或连续行程(continuous run)或在给定 查询代表的子空间中每个网格点的散列单元平均数, 来作为度量空间填充曲线聚类性能的标准。
东华理工 大 学 程朋根
Z曲线(a)与Hilbert曲线(b)的聚类图示
从聚类的角度说,第二种(b)安排从性能上要比第一种高
东华理工 大 学 程朋根
2.散列文件
散列文件组织使用散列函数把记录分到一系列散列单元 中,散列函数将事先选择一个主码域(如)的 值映射到一个散列单元中。 散列函数的可取之处在于它能够把数量大致相同的记录 放入每个散列单元中。散列文件这种组织方式对于点的 查询、插入和删除操作都非常有效,如果能选挥适当的 散列函数来组织文件,可以在一个常数时间(例如两次 磁盘访问)内完成查询,而与文件中记录的个数无关。 散列文件组织方式并不适合范围查询。
东华理工 大 学 程朋根
空间索引的基本思想是按照一个或多个空间码来管理 对象,空间码是比对象本身更简单的几何对象,例如, 外包框——围住对象的与坐标轴平行的最小矩形。 网格的近似可以产生一种用于过滤和精炼查询过程的 策略: 首先在近似的基础上,执行一个过滤步骤,它返回 一个候选集,作为完全满足某个谓词的所有对象的 超集; 其次,在精炼步骤中,对于每一个候选对象(或者 空间连接中的每一对候选对象)用精确的几何信息 进行检查。
3.计算出结果二进制串的十进制值。
东华理工 大 学 程朋根
Hilbert曲线
东华理工 大 学 程朋根
Hilbert曲线算法 1)读入x和y坐标的nBit二进制表示。( 01 00 -> 0010) 2)隔行扫描二进制比特到一个字符串。 3)将字符串自左至右分成2Bit长的串Si,其中i=1,…,n 。(0010-> 00 10) 4)规定每个2Bit长的串的十进制值di: 00->0, 01->1, 10->3, 11->2 (00 10 -> 03;1001>31) 5)对于数组中每个数字j,如果 j=0 把后面数组中出现的所有1变成3,并把所有出现 的3变成1。(03->01,3->1; 01->03,1->3) j=3 把后面数组中出现的所有0变成2,并把所有出现 的2变成0。(30->32,0->2; 32->31,2->1)
东华理工 大 学 程朋根
传统DBMS、应用程序和SDBMS 在CPU和I/O相对代价方面的特征 CPU代价 DBMS C程序 SDBMS 低 高 高 I/O代价 高 低 高
东华理工 大 学 程朋根
4.1.1
磁盘的几何结构和含义
1. 以CD-ROM播放器为例分析磁盘驱动器的几何结构
金属的磁盘或圆形磁盘片放置在一根主轴上并旋转。 磁道(作为潜在的数据驻留地)是圆形磁盘片上向边缘延伸 的许多同心圆环。 由于有多个磁盘片,所有同直径的磁道就组成一个柱面 (cylinder)。 每个磁道都划分成扇区,一个磁盘块有整数倍个扇区,这个 倍数可在磁盘初始化时设定。 磁盘块(或简称为页面)是磁盘与主存之间的最小传输单元。
City表的有序文 件组织形式
东华理工 大 学 程朋根
4.1.5
聚类
聚类的目的:
降低响应常见的大查询的寻道时间和等待时间。对 于空间数据库来说,这意味着在二级存储中,空间上 相邻的和查询上有关联性的对象在物理上应当存储在 一起。
三种聚类方式:
内部聚类:一个对象的全部表示都存放在同一个磁
盘页面中。 本地聚类:一组空间对象(或者近似)被分组到同一 页面。 全局聚类:与本地聚类相反,一组空间邻接的对象 并不存储在一个而是多个物理上邻接的页面中,这 些页面可以由一条单独的读命令访问。
东华理工 大 学 程朋根
City表的散列文件组织方式
以名字字符的长度来构 建散列函数,对于7至8 个字符的名字散列函数 返回2。
东华理工 大 学 程朋根
3.有序文件
有序文件根据给定的主码域对记录进行组织。 有序文件组织方式不能直接应用在空间领域。 有序文件组织方式还可以根据对空间数据集的文件组 织方式而概括成空间聚类。
东华理工 大 学 程朋根
DBMS系统是为处理海量数据而设计。数据集经常过大, 无法在计算机的主存中存储,需要采取二级存储 (secondary storage)设备。 访问二级存储的时间则要比访问主存慢几个数量级; 数据在主存和二级存储之间的来回传送是产生性能瓶 颈的原因。 因而,一个好的物理数据库设计目标就是让这种数据 传输量保持为一个绝对最小值。 空间存储结构的目标是方便空间选取和连接查询,在 响应一条查询时,空间存取方法将只需查询该空间中 所有对象的一个关联子集。