空间数据库之空间索引
来源:互联网 发布:vs2015 c语言 编辑:程序博客网 时间:2024/04/29 17:16
1、 什么是空间索引?
空间索引是指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构,其中包含空间对象的概要信息,如对象的标识、外接矩形及指向空间对象实体的指针。空间索引也可以称为空间数据查询,是对存储在介质上的数据位置信息的描述,是用来提高系统对数据获取的效率,也称为空间访问方法(Spatial AccessMethod SAM)作为一种辅助性的空间数据结构,空间索引介于空间操作算法和空间对象之间,它通过筛选作用,大量与特定空间操作无关的空间对象被排除从而提高空间操作的速度和效率。
2、为什么要建立空间索引?
空间索引的建立是因为人们对依据空间位置来进行查询的要求而产生的。举一个简单的例子,如何根据自己所在位置来查询附近100m的POI(point of interest),比如说景点,餐厅,商场等?你可能会说,这很简单,直接计算位置与所有POI的距离,并保留距离小于100m的POI。但是这种方式实际上是不可取的,因为地球本身并是一个椭圆,这就说明两个物体直接的具体不能直接根据坐标距离来直接开平方,同时这种方法耗时较长,运算的效率低下,而且不能推广,当范围扩大时,这种方式的弊端会更加的明显。
这时候我们可以想到运用一种索引的方法给数据事先建立好索引,这样我们在查询的时候就可以快速的得到我们所期望的结果。不过,这时候又会出现一个问题,传统的索引方式如果只是应用于经度或者纬度这样的一维空间将会有很好的效果,比如说我想搜索的是武汉某区域的POI,但是运用传统的索引方式,不但给了我武汉的,还有与武汉同一纬度的上海,成都,重庆,甚至是国外的开罗,洛杉矶等,当数据量很大的时候,这种索引的方式效率是非常的低下的。
于是我们便期待一种更为有效,也更能贴近空间数据的索引方式,我们期待的是快速找出落在某一空间范围的,而不是快速找出落在某纬度或经度范围的POI。既然传统的索引不能很好的索引空间数据,我们自然需要一种方法能对空间数据进行索引,也就是空间索引。
3、常用的空间索引有哪些?
① 网格索引:网格索引的基本思想是将研究区域按一定规则用横竖线分为小的网格,记录每个网格所包含的地理对象。当用户进行空间查询时,首先计算查询对象所在的网格,然后通过该网格快速查询所选的地理对象。网格索引算法大致分为三类:1.基于固定网格划分的空间索引算法(将一幅地图分割成a*b的固定网格,为落入每个格网内的地图目标建立索引)、2.基于多层次网格的空间索引算法(将一幅地图分割成若干大小相同的小块,将落入该小块内的地图目标存入该小块、块对应的存储区域中,根据需要可以将小块划分成更小的块,建立多级索引)和3.自适应层次网格空间索引算法(其网格大小由各具体的地图目标的外接矩形决定,避免了网格索引中网格划分的人为因素)。
② 四叉树索引:类似于网格索引,也是对地理空间进行网格划分,对地理空间递归进行四分来构建四义树,直到自行设定的终止条件(比如每个节点关联图元的个数不超过3个,超过3个,就再四分),最终形成一颗有层次的四叉树。每个叶子节点存储了本区域所关联的图元标识列表和本区域地理范围,非叶子节点仅存储本区域地理范围。由于四叉树的生成和维护比较简单,且当空问数据对象分布比较均匀时,基于四叉树的空问索引可以获得比较高的空间数据插入和查询效率。
③ R树家族索引:这是一种面向对象分割技术的索引算法,将空间对象按范围划分,每个节点都对应一个区域和磁盘页,非叶节点的磁盘页中存储着其子节点的区域范围;叶节点的磁盘页中存储着其区域范围内的所有空间对象的外接矩形。1.R树算法(是一种层次数据结构动态索引算法,它是B树在K维空间上的自然扩展,是一种高度平衡树。R树由根节点、中问节点和叶节点三类节点组成,中问节点代表数据集空间中的一个矩形,该矩形包含了所有其他孩子节点的最小外接矩形,叶节点存储的是实际对象的外接矩形。)2. R十树(与R树类似,区别在于R+树中兄弟节点对应的空间区域无重叠,这样就消除了R树划分空间时因允许节点重叠而产生的死区域,减少无效查询次数,提高空间索引的效率,但插入删除操作则效率降低。)
④ 金字塔索引:该方法基于一种特殊的优化高维数据的不均衡分割策略,其原理是先将d维空间分成2d个金字塔,共享数据空间的中心点为顶点,然后再将每个金字塔分割成平行于金字塔基的数据页。金字塔索引结构是将高维数据转化为一维数据,利用B+树进行操作。金字塔索引结构的优点是当处理范围查询时,这种索引结构的性能优于其他的索引结构,而且查询处理效率不会随着维数的增加而降低,但金字塔索引结构的优点是基于均匀数据分布和超立方体查询的,对于那些覆盖数据空间边界的查询不是很理想,而现实世界中的数据很少是服从均匀分布的。
4、总结
为了解决空间数据查询与分析的难题,我们引入了空间索引,利用空间索引能够大幅度提高空间操作的效率和速度。在具体如何建立空间索引结构时,我们要根据实际情况和实际需求来建立相对应的空间索引类型,进而帮助我们解决实际问题。
在高效的空间索引课题中,仍然存在着许多问题有待解决,就目前的实际情况来看,现存的几种不同空间索引类型各有各自的优点和缺点以及其适用的范围,没有那一种索引方式能够解决空间索引领域中的所有问题。
- 空间数据库之空间索引
- spatialite之空间索引
- Oracle Spacial(空间数据库)空间索引
- SpatialHadoop中空间索引系列之(八)现有空间数据库的索引方式
- 空间索引
- 空间索引
- 空间索引
- 空间索引
- 空间索引
- Oracle Spacial(空间数据库)查询模型和空间索引
- 查看oracle数据库中空间索引
- Oracle 数据库修改索引表空间
- Oracle 数据库修改索引表空间
- 移动端数据库开发空间索引点滴
- PostgreSQL查看数据库,索引,表空间大小
- 查看数据库空间页。表空间页。索引空间页。索引碎片。日志空间的使用情况。
- 空间数据库之集成管理模式
- Oracle数据库之表空间
- The Topics Of Young People
- 基本数据类型和引用数据类型的区别!
- 从写项目到部署linux服务器全过程-linux(CentOS 6.5)安装篇
- 常用注解分析@RequestMapping @AutoWired@Resource @component
- 不要在公共接口中传递STL容器
- 空间数据库之空间索引
- putty提示Network error:Software caused connection abort
- sed -i 命令使用
- 大数据和人工智能未来发展趋势
- EditText 输入限制
- 大数据WEB阶段总结
- JAVA中super()的用法 转载自https://zhidao.baidu.com/question/275979670.html
- 软件测试 -- 比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系
- (转)在Web项目中使用LiquiBase实现数据库自动更新