全面解析基于空间数据库的数据挖掘技术[1]

全面解析基于空间数据库的数据挖掘技术[1],第1张

随着GIS技术在各个行业的应用以及数据挖掘 空间数据采集技术 数据库技术的迅速发展 对从空间数据库发现隐含知识的需求日益增长 从而出现了用于在空间数据库中进行知识发现的技术——空间数据挖掘(Spatial Data Mining 本文简称为SDM) 空间数据挖掘是从空间数据库中提取隐含的 用户感兴趣的空间和非空间模式和普遍特征的过程

本文分析了空间数据库知识发现面临的困难 研究了扩展传统数据挖掘方法如分类 关联规则 聚类等到空间数据库的方法 并对空间数据库系统实现技术及空间数据挖掘系统开发模式等进行了比较分析

空间数据库知识发现面临的困难

从空间数据库发现知识的传统途径是通过专家系统 数据挖掘 空间分析等技术来实现的 但是在空间数据库隐含知识的发现方面 只单独依某一种技术 往往存在着这样或那样的缺陷 对于专家系统来讲 专家系统不具备自动学习的能力 GIS中的专家系统也达不到真正的智能系统的要求 仅能利用已有的知识进行推导 对于数据挖掘来讲 空间数据库与普通数据库的在数据存储机制的不同和空间数据的相互依赖性等特点决定了在空间数据库无法直接采用传统的数据挖掘方法 对于空间分析来讲 虽然空间分析中常用的统计方法可以很好地处理数字型数据 但是它存在的问题很多 如统计方法通常假设空间分布的数据间是统计上独立的 而现实中空间对象间一般是相互关联的;其次 统计模型一般只有具有相当丰富领域知识和统计方面经验的统计专家才能用;另外 统计方法对大规模数据库的计算代价非常高 所以在处理海量数据方面能力较低

从上面的分析可以看出 由于空间数据具有诸多特点 因此在空间数据库进行知识发现 需要克服使用单一技术的缺陷 即需要融合多种不同技术 所以研究人员提出了空间数据挖掘技术来解决从空间数据库知识发现隐含知识的难题

空间数据挖掘是多学科和多种技术交综合的新领域 它综合了机器学习 空间数据库系统 专家系统 可移动计算 统计 遥感 基于知识的系统 可视化等领域的有关技术

空间数据挖掘利用空间数据结构 空间推理 计算几何学等技术 把传统的数据挖掘技术扩充到空间数据库并提出很多新的有效的空间数据挖掘方法 与传统空间分析方法相比 它在实现效率 与数据库系统的结合 与用户的交互 发现新类型的知识等方面的能力大大增强 空间数据挖掘能与GIS的结合 使GIS系统具有自动学习的功能 能自动获取知识 从而成为真正的智能空间信息系统

扩展传统数据挖掘方法到空间数据库

空间数据挖掘技术按功能划分可分为三类 描述 解释 预测 描述性的模型将空间现象的分布特征化 如空间聚类 解释性的模型用于处理空间关系 如处理一个空间对象和影响其空间分布的因素之间的关系 预测型的模型用来根据给定的一些属性预测某些属性 预测型的模型包括分类 回归等 以下介绍将几个典型的数据挖掘技术聚类 分类 关联规则扩展到空间数据库的方法

聚类分析方法按一定的距离或相似性测度将数据分成一系列相互区分的组 而空间数据聚类是按照某种距离度量准则 在某个大型 多维数据集中标识出聚类或稠密分布的区域 从而发现数据集的整个空间分布模式 经典统计学中的聚类分析方法对海量数据效率很低 而数据挖掘中的聚类方法可以大大提高聚类效率 文献[ ]中提出两个基于CLARANS聚类算法空间数据挖掘算法SD和ND 可以分别用来发现空间聚类中的非空间特征和具有相同非空间特征的空间聚类 SD算法首先用CLARANS算法进行空间聚类 然后用面向属性归纳法寻找每个聚类中对象的高层非空间描述;ND算法则反之 文献[ ]中提出一种将传统分类算法ID 决策树算法扩展到空间数据库的方法 该算法给出了计算邻近对象非空间属性的聚合值的方法 并且通过对空间谓词进行相关性分析和采用一种逐渐求精的策略使得计算时间复杂度大大降低 Koperski等[ ]将大型事务数据库的关联规则概念扩展到空间数据库 用以找出空间对象的关联规则 此方法采用一种逐渐求精的方法计算空间谓词 首先在一个较大的数据集上用MBR最小边界矩形结构技术对粗略的空间谓词进行近似空间运算 然后在裁剪过的数据集上用代价较高的算法进一步改进挖掘的质量

空间数据库实现技术

空间数据挖掘系统中 空间数据库负责空间数据和属性数据的管理 它的实现效率对整个挖掘系统有着举足轻重的影响 所以下面详细介绍空间数据库的实现技术

根据空间数据库中空间数据和属性数据的管理方式 空间数据库有两种实现模式 集成模式和混合模式 后者将非空间数据存储在关系数据库中 将空间数据存放在文件系统中 这种采用混合模式的空间数据库中 空间数据无法获得数据库系统的有效管理 并且空间数据采用各个厂商定义的专用格式 通用性差 而集成模式是将空间数据和属性数据全部存储在数据库中 因此现在的GIS软件都在朝集成结构的空间数据库方向发展 下面对集成结构的空间数据库技术中的两个主流技术基于空间数据引擎技术的空间数据库和以Oracle Spatial为代表的通用空间数据库进行比较分析

空间数据引擎是一种处于应用程序和数据库管理系统之间的中间件技术 使用不同GIS厂商的客户可以通过空间数据引擎将自身的数据交给大型关系型DBMS统一管理;同样 客户也可以通过空间数据引擎从关系型DBMS中获取其他类型GIS的数据 并转化成客户可使用的方式 它们大多是在Oracle i Spatial(较成熟的空间数据库版本 于 年 月推出)推出之前由GIS软件开发商提供的将空间数据存入通用数据库的解决方案 且该方案价格昂贵

Oracle Spatial提供一个在数据库管理系统中管理空间数据的完全开放体系结构 Oracle Spatial提供的功能与数据库服务器完全集成 用户通过SQL定义并 *** 作空间数据 且保留了Oracle的一些特性 如灵活的n 层体系结构 对象定义 健壮的数据管理机制 Java存储过程 它们确保了数据的完整性 可恢复能力和安全性 而这些特性在混合模式结构中几乎不可能获得 在Oracle Spatial中 用户可将空间数据当作数据库的特征使用 可支持空间数据库的复制 分布式空间数据库以及高速的批量装载 而空间中间件则不能 除了允许使用所有数据库特性以外 Spatial Cart ridge还提供用户使用行列来快速访问数据 使用简单的SQL语句 应用者就能直接选取多个记录 Spatial Cart ridge数据模型也给数据库管理员提供了极大的灵活性 DBA可使用常见的管理和调整数据库的技术

空间数据挖掘系统的开发

通用SDM系统

在空间数据挖掘系统的开发方面 国际上最著名的有代表性的通用SDM系统有 GeoMiner Descartes和ArcView GIS的S PLUS接口 GeoMiner是加拿大Simon Fraser大学开发的著名的数据挖掘软件DBMiner的空间数据挖掘的扩展模块 空间数据挖掘原型系统GeoMiner包含有三大模块 空间数据立方体构建模块 空间联机分析处理(OLAP)模块和空间数据采掘模块 能够进行交互式地采掘并显示采掘结果 空间数据采掘模块能采掘 种类型的规则 特征规则 判别规则和关联规则 GeoMiner采用SAND体系结构 采用的空间数据采掘语言是GMQL 其空间数据库服务器包括MapInfo ESRI/OracleSDE Informix Illustra以及其它空间数据库引擎

Descartes可支持可视化的分析空间数据 它与开发此软件的公司所开发的数据挖掘工具Kepler结合使用 Kepler完成数据挖掘任务且拥有自己的表现数据挖掘结果的非图形界面 Kepler和Descarte动态链接 把传统DM与自动作图可视化和图形表现 *** 作结合起来 实现C 决策树算法 聚类 关联规则的挖掘

ArcView GIS的S PLUS接口是著名的ESRI公司开发的 它提供工具分析空间数据中指定类

除了以上空间数据挖掘系统外 还有GwiM等系统

从以上SDM系统可以看出 它们的共同优点是把传统DM与地图可视化结合起来 提供聚类 分类等多种挖掘模式 但它们在空间数据的 *** 作上实现方式不尽相同 Descartes是专门的空间数据可视化工具 它只有与DM工具Kepler结合在一起 才能完成SDM任务 而GeoMiner是在MapInfo平台上二次开发而成 系统庞大 造成较大的资源浪费 S PLUS的局限在于 它采用一种解释性语言(Script) 其功能的实现比用C和C++直接实现要慢得多 所以只适合于非常小的数据库应用 基于现存空间数据挖掘系统的结构所存在的缺陷 我们提出空间数据挖掘系统一种新的实现方案

lishixinzhi/Article/program/SQL/201311/16146

检查下您的收发服务器是否输入错误。
可以找邮箱服务商确认的,如果没有填错收发服务器,那就是你本地DNS解析不到域名导致,可以把收发服务器直接改成IP测试,改成IP可以的话就确定是你本地DNS问题了。

假如 我们现在利用Select语句从数据库查询数据 Oracle数据库是如何运作的呢从中我们可以领悟到什么呢下面 就结合一条简单的select语句 看看Oracle数据库后台的运作机制 这对于我们之后的系统管理与故障排除非常有帮助

第一步 客户端把语句发给服务器端执行

当我们在客户端执行select语句时 客户端会把这条SQL语句发送给服务器端 让服务器端的进程来处理这语句 也就是说 Oracle客户端是不会做任何的 *** 作 他的主要任务就是把客户端产生的一些SQL语句发送给服务器端 虽然在客户端也有一个数据库进程 但是 这个进程的作用跟服务器上的进程作用事不相同的 服务器上的数据库进程才会对SQL语句进行相关的处理 不过 有个问题需要说明 就是客户端的进程跟服务器的进程是一一对应的 也就是说 在客户端连接上服务器后 在客户端与服务器端都会形成一个进程 客户端上的我们叫做客户端进程;而服务器上的我们叫做服务器进程 所以 由于所有的SQL语句都是服务器进程执行的 所以 有些人把服务器进程形象地比喻成客户端进程的 影子

第二步 语句解析

当客户端把SQL语句传送到服务器后 服务器进程会对该语句进行解析 同理 这个解析的工作 也是在服务器端所进行的 虽然这只是一个解析的动作 但是 其会做很多 小动作

查询高速缓存 服务器进程在接到客户端传送过来的SQL语句时 不会直接去数据库查询 而是会先在数据库的高速缓存中去查找 是否存在相同语句的执行计划 如果在数据高速缓存中 刚好有其他人使用这个查询语句的话 则服务器进程就会直接执行这个SQL语句 省去后续的工作 所以 采用高速数据缓存的话 可以提高SQL语句的查询效率 一方面是从内存中读取数据要比从硬盘中的数据文件中读取数据效率要高 另一方面 也是因为这个语句解析的原因

不过这里要注意一点 这个数据缓存跟有些客户端软件的数据缓存是两码事 有些客户端软件为了提高查询效率 会在应用软件的客户端设置数据缓存 由于这些数据缓存的存在 可以提高客户端应用软件的查询效率 但是 若其他人在服务器进行了相关的修改 由于应用软件数据缓存的存在 导致修改的数据不能及时反映到客户端上 从这也可以看出 应用软件的数据缓存跟数据库服务器的高速数据缓存不是一码事

语句合法性检查

当在高速缓存中找不到对应的SQL语句时 则数据库服务器进程就会开始检查这条语句的合法性 这里主要是对SQL语句的语法进行检查 看看其是否合乎语法规则 如果服务器进程认为这条SQL语句不符合语法规则的时候 就会把这个错误信息 反馈给客户端 在这个语法检查的过程中 不会对SQL语句中所包含的表名 列名等等进行SQL他只是语法上的检查

语言含义检查

若SQL语句符合语法上的定义的话 则服务器进程接下去会对语句中的字段 表等内容进行检查 看看这些字段 表是否在数据库中 如果表名与列名不准确的话 则数据库会就会反馈错误信息给客户端

所以 有时候我们写select语句的时候 若语法与表名或者列名同时写错的话 则系统是先提示说语法错误 等到语法完全正确后 再提示说列名或表名错误 若能够掌握这个顺序的话 则在应用程序排错的时候 可以节省时间

获得对象解析锁

当语法 语义都正确后 系统就会对我们需要查询的对象加锁 这主要是为了保障数据的一致性 防止我们在查询的过程中 其他用户对这个对象的结构发生改变 对于加锁的原理与方法 我在其他文章中已经有专门叙述 在这里就略过不谈了

数据访问权限的核对

当语法 语义通过检查之后 客户端还不一定能够取得数据 服务器进程还会检查 你所连接的用户是否有这个数据访问的权限 若你连接上服务器的用户不具有数据访问权限的话 则客户端就不能够取得这些数据 故 有时候我们查询数据的时候 辛辛苦苦地把SQL语句写好 编译通过 但是 最后系统返回个 没有权限访问数据 的错误信息 让我们气半死 这在前端应用软件开发调试的过程中 可能会碰到 所以 要注意这个问题 数据库服务器进程先检查语法与语义 然后才会检查访问权限

确定最佳执行计划

当语句与语法都没有问题 权限也匹配的话 服务器进程还是不会直接对数据库文件进行查询 服务器进程会根据一定的规则 对这条语句进行优化 不过要注意 这个优化是有限的 一般在应用软件开发的过程中 需要对数据库的sql语言进行优化 这个优化的作用要大大地大于服务器进程的自我优化 所以 一般在应用软件开发的时候 数据库的优化是少不了的

当服务器进程的优化器确定这条查询语句的最佳执行计划后 就会将这条SQL语句与执行计划保存到数据高速缓存 如此的话 等以后还有这个查询时 就会省略以上的语法 语义与权限检查的步骤 而直接执行SQL语句 提高SQL语句处理效率

第三步 语句执行

语句解析只是对SQL语句的语法进行解析 以确保服务器能够知道这条语句到底表达的是什么意思 等到语句解析完成之后 数据库服务器进程才会真正的执行这条SQL语句

这个语句执行也分两种情况 一是若被选择行所在的数据块已经被读取到数据缓冲区的话 则服务器进程会直接把这个数据传递给客户端 而不是从数据库文件中去查询数据 若数据不在缓冲区中 则服务器进程将从数据库文件中查询相关数据 并把这些数据放入到数据缓冲区中

这里仍然要注意一点 就是Oracle数据库中 定义了很多种类的高速缓存 像上面所说的SQL语句缓存与现在讲的数据缓存 我们在学习数据库的时候 需要对这些缓存有一个清晰的认识 并了解各个种类缓存的作用 这对于我们后续数据库维护与数据库优化是非常有用的

第四步 提取数据

当语句执行完成之后 查询到的数据还是在服务器进程中 还没有被传送到客户端的用户进程 所以 在服务器端的进程中 有一个专门负责数据提取的一段代码 他的作用就是把查询到的数据结果返回给用户端进程 从而完成整个查询动作

从这整个查询处理过程中 我们在数据库开发或者应用软件开发过程中 需要注意以下几点

一是要了解数据库缓存跟应用软件缓存是两码事情 数据库缓存只有在数据库服务器端才存在 在客户端是不存在的 只有如此 才能够保证数据库缓存中的内容跟数据库文件的内容一致 才能够根据相关的规则 防止数据脏读 错读的发生 而应用软件所涉及的数据缓存 由于跟数据库缓存不是一码事情 所以 应用软件的数据缓存虽然可以提高数据的查询效率 但是 却打破了数据一致性的要求 有时候会发生脏读 错读等情况的发生 所以 有时候 在应用软件上有专门一个功能 用来在必要的时候清除数据缓存 不过 这个数据缓存的清除 也只是清除本机上的数据缓存 或者说 只是清除这个应用程序的数据缓存 而不会清除数据库的数据缓存

lishixinzhi/Article/program/Oracle/201311/17595

服务器是什么?

服务器指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。相对于普通PC来说,服务器在稳定性、安全性、性能等方面都要求更高,因此CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。

你说的SQL服务器是什么?

SQL服务器是文件服务器、数据库服务器和应用程序服务器中的数据库服务器。简单来说,就是提供一个存储数据的环境,并且能够进行数据上交互(如你网页是用aspnet做的,后台是用sql数据库,那网页上的一些数据可以从后台sql数据库里取出。当然,这个sql数据库不一定要在自己的计算机中,可以在别人的计算机中,自己从别人计算机中读取)

它和平常所说的‘服务器’有什么不同?

当我们设计网站的时候,为什么要用服务器?因为你如果有aspnet编写程序,谁来解释你的代码是aspnet而不是java,也不是php?所以服务器在这里起到一个解析的作用。

而SQL服务器,确切来说是数据库服务器,刚才说了,有着存储功能,那它的结构和平常的‘服务器’很大的不同除了语言上,更重要的是数据库服务器讲的是关系,存储结构

比方说一个服务器上放了很多数据库,那么多数据库一个一个地管是不是很麻烦?所有就需要一个东西用来管理这个服务器上的所有数据库,这就是数据库管理系统与数据库的区别。也可以用这样一个例子说明,你有很多本书籍,每本书籍相当于一个数据库,如果你的书籍太多又乱丢的话,是不是很容易出问题?所以你需要一个书柜,把每一本书都摆进书柜去,哪本书放在哪里是不是就很好找了?这样管理起来是不是就容易多了?这书柜就相当于数据库管理系统。而至于数据库引擎与数据库管理系统没多大区别,相当于数据库服务的意思


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/13125298.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-30
下一篇2025-08-30

发表评论

登录后才能评论

评论列表(0条)

    保存