简单分布式空间数据库引擎的实现分析研究 计算机科学与技术专业_第1页
简单分布式空间数据库引擎的实现分析研究 计算机科学与技术专业_第2页
简单分布式空间数据库引擎的实现分析研究 计算机科学与技术专业_第3页
简单分布式空间数据库引擎的实现分析研究 计算机科学与技术专业_第4页
简单分布式空间数据库引擎的实现分析研究 计算机科学与技术专业_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

简单分布式空间数据库引擎的实现目前已有的空间数据库引擎复杂的系统结构和高昂的价格,完全无法满足小型数据的处理,因此为了适应中小型软件的研发,我们设计了主要用于栅格数据和矢量数据的简单分布式空间数据库引擎(SimpleDistributedSpatialDatabaseEngine,SD_SDE),它不仅缩小了数据处理的空间,还简化了系统的结构,从空间数据分散的特性出发,在保证数据安全性的同时大大提升了数据处理的效率,常用于多层次的GIS。首先,我们将具体介绍简单分布式空间数据库引擎的主要功能:数据的存储和提取通信接口空间数据信息的查询分布式管理数据存取实现数据的存取作为该系统的最主要的功能,包括模型和结构的存取两个方面。作为支持数据库引擎的重要支柱,我们将以第三章3.2节中所设计的空间数据模型为例,在数据库的选择上使用SQLServer2000和Oracle,对数据的存取操作进行具体的论述。数据在存储时主要是通过表格的形式对信息进行记录。SD_SDE存储结构栅格数据存储结构如何对SD_SDE的栅格数据进行存储,首先我们需要了解栅格数据的存储结构。由于存储的方式是表格的形式,因此存储结构中一般有七张表格,分别是:栅格影像集表(rasterset)管理表(raster_admin)栅格影像数据块表(rasterblock)栅格影像图层表(rasterband)金字塔表(raster_pyramid)压缩表(rasterencode)栅格元数据表(rastermetadata)当需要将图像数据进行存储时,一般流程是先在栅格影像集表中新增一个影响数据的记录,然后在其他六个表中也增加记录。下面我们对存储结构中的七个表进行具体的解释说明:(1)栅格影像集表:当有新的影像数据被存储,栅格影像集表会对该数据编号,即ID(raster_id),ID中不仅有数据存储时间、拥有者等数据的各种信息,还能够作为桥梁,将其他表中的记录连接起来。用户拥有对数据信息中的金字塔最高层级值和数据块的大小值自定义的权限。(2)管理表:数据通过ID与管理表实现信息的连接共享,因此当用户对数据库进行检索是,管理表会提供所有影像数据的各种详细的信息。(3)栅格影像数据块表:通过影像块来对数据进行存储,每个影像块都记录了影响块的方位、大小等信息。(4)栅格影像图层表:根据波段对影像数据进行分层,然后将每个图层的具体信息记录在表上。图层往往由图层块组成,每个图层块都记录了影响的数据信息,为了方便记录,规定0表示影像块数据,1表示图层块数据。(5)金字塔表:可以根据用户查询的条件有针对性的提取数据,不仅减少了工作量还能够提高系统的运行速度。金字塔表中记录的主要是金字塔每块的坐标、层级等信息,数据主要存储在金字塔块中。(6)压缩表:主要用于记录数据的大小方位等信息,通过对大量的数据进行压缩,节约了空间,大大提高了数据的传输速度,当用户需要提取数据信息时,压缩表会自动解压还原数据。(7)栅格元数据表:主要用于记录影像的尺寸分辨率等基本信息。如图是栅格影像集表raster_set字段名类型描述raster_idint栅格影像idnamechar栅格影像名称datedatatime入库时间ownerchar所有者pyramidint金字塔最高级别blockheightdouble影像数据块的高度blockwidthdouble影像数据块的宽度descriptionvarchar备注表4-2管理表raster_admin字段名类型描述admin_idint标示IDraster_idint栅格影像idnamechar栅格影像名称descriptionvarchar备注表4-3栅格影像数据块表raster_block字段名类型描述block_idint影像数据块号xlcornerdouble影像数据块左下角坐标xylcornerdouble影像数据块左下角坐标yblockrowint影像数据块所在行号blockcolint影像数据块所在列号blockdataimage影像数据块存储数据raster_idint栅格影像id表4-4栅格影像图层表raster_band字段名类型描述level_idint影像图层idraster_idint栅格影像idcellsizedouble栅格影像分辨率level_widthdouble图层宽度level_heightdouble图层高度descriptionvarchar分辨率备注表4-5金字塔表raster_pyramid字段名类型描述pyramid_idint金字塔数据块块号pxlcornerdouble左下角坐标xpylcornerdouble左下角坐标ypbrowint金字塔数据块所在行号pbcolint金字塔数据块所在列号plevelint图层金字塔等级pblockdataimage金字塔数据块存储数据raster_idint栅格影像id表4-6压缩表raster_encode字段名类型描述pyramid_idint数据块块号pxlcornerdouble左下角坐标xpylcornerdouble左下角坐标ypbrowint数据块所在行号pbcolint数据块所在列号cellsizedouble分辨率pblockdataimage数据块存储数据raster_idint栅格影像id表4-7栅格元数据表raster_metadata字段名类型描述meta_idint标示IDraster_idint栅格影像idimagewidthdouble栅格影像宽度imageheightdouble栅格影像高度imagetypeint栅格影像数据格式(如0代表遥感影像等)cellsizedouble栅格影像分辨率fillsizedouble文件大小descriptionvarchar备注下面描述的是各存储表之间的关系,如图4-1所示:图4-1栅格数据存储表结构体系矢量数据存储结构矢量数据的存储与栅格数据的存储基本相似,不同之处在于,矢量数据主要的储存对象主要有两种:几何数据:在于数据的模型进行分析研究后,对空间的数据进行划分,最后储存在表中的形式是大字段。属性数据:不需要转换或压缩,直接存储。矢量数据结构中存储的表主要有四种:矢量数据集表(vector_set)管理表(vector_admin)要素表(vector_part)属性表(vector_attribute)这四种数据表的相互配合,共同管理数据的存储。下面具体介绍四个数据表的主要结构:表4-8矢量数据集表vector_set字段类型描述vector_idint矢量数据的标示号vector_namechar矢量数据名称vector_timedouble矢量数据入库时间vector_ownerdouble矢量数据所有者descriptionvarchar其它备注信息表4-9管理表vector_admin字段名类型描述admin_idint字段标示vector_namechar矢量数据名称vector_idint矢量数据的标示号descriptionvarchar其它备注信息表4-10要素表vector_part字段名类型描述part_idint字段标示号part_typeint要素类型(0为点状,1为现状,2为面状)Xmindouble要素X坐标最小值Xmaxdouble要素X坐标最大值Ymindouble要素Y坐标最小值Ymaxdouble要素Y坐标最大值part_dataimage要素的几何信息vector_idint矢量数据的标示号descriptionvarchar其它备注信息表4-7属性表vector_attribute字段名类型描述attribute_idint字段标示vector_sizeint矢量数据大小vector_idint矢量数据的标示号descriptionvarchar其它备注信息矢量数据存储结构中各存储表之间的关系如图4-2所示:图4-2矢量数据存储表结构体系SD_SDE存取接口当用户对不同的数据库进行访问时,都可以通过SD_SDE接口。本文以SQLServer2000和Oracle为例,用户可以通过统一的接口直接进入进行数据访问。SD_SDE常用的管理数据库的工具为ADO(ActiveXDataObject)、SQL(StructuredQueryLanguage)等,实现数据库的创建、连接等操作。例子中提供的接口是DLL中的ADO,在工程的stdafx.h文件中添加下面的编程语句:#pragmawarning(disable:4146)#import"C:\ProgramFiles\CommonFiles\System\ADO\msado15.d11"named_guidsrename("EOF","adoEOF"),rename("BOF","adoBOF")#pragmawarning(default:4146)SD_SDE还设定了一个处理用户请求的统一接口ADOconn,常用的执行语言是SQL语句。各种函数具有不同的作用:AfxOleInit()常用与以ADO作为对象的函数中,位置不同作用也就不同。用在前面可以用于函数初始化,用在最后作为结束,即中断与数据库的连接。(2)ExitConnect()表示释放m_pConnection,(3)函数的环境是CoUninitialize()(4)CoInitialize(NULL)用于前端表示函数的初始化。,在本文中我们采用CoInitialize(NULL)进行初始化。图4-3ADOconn类关系描述正如图4-3中数据库操作类的关系所示,在实现SD_SDE系统中主要的存取接口函数说明如下:(1)接口函数OnInitADOconn用来连接数据库,并初始化ADO环境的。函数参数为用户定义的数据库用户名,用户密码及数据库类型(0为SQLServer数据库,1为Oracle数据库)。此函数提供了统一的数据库连接接口,函数首先判断用户所要连接的数据库类型,再调用ADO类的Open对数据库进行透明连接。(2)接口函数GetRecordSet接口用于执行有返回记录集的SQL语句,返回类型是记录集智能指针_RecordsetPtr。该函数首先创建记录集对象,在ADO中函数产生记录集对象,最后还要释放记录集指针。(3)接口函数ExecuteSQL用于没有返回的SQL语句,例如create、delete、update等SQL语句。该函数主要的语句是调用Connection对象的Execute方法,用Execute函数执行SQL语句。(4)接口函数OpenrasterFile读取一幅遥感影像数据文件,记入内存,返回该文件在内存中的句柄,参数为影像文件名。此函数完成了从外存中的文件数据转移到内存中的功能。(5)函数Createtile负责把内存中的影像文件按256X256分成影像数据块,并把影像数据块的左下角坐标及影像数据块的行列号赋值给变量xlcorner,ylcorner,xlc,ylr,在此函数中要调用inserttile函数,负责把数据块存入数据库中。函数Createtile首先计算影像数据中块的个数同时涉及不足的分块问题,计算出横向影像块个数Xtilenum和纵向影像块个数Ytilenum。在此函数中还涉及到tiles类数组,tiles类用于分块的数据存储,将影像文件中的数据拷入进相应的分块中。函数Createtile中调用了tiledatacopy函数获得并生成一个分块tile的象素值,其函数原型为:voidtilecdatacopy(HANDLEhFile,DWORDlodwidthpixnum,DWORDk,DWORDn,DWORDcurrownum,DWORD&currowpos,floatlbc,float1br,DWORDminr,DWORDmaxr,DWORDminc,DWORDmaxc);在tiledatacopy函数中,参数maxr,minr是表示该分块需要从该影像文件中拷贝数据的列数范围。tiledatacopy先将影像文件中的像素值数据分别拷入对应的tile指针中。(6)接口函数Inserttile把tilefile所指的影像数据块数据存入到数据表中,此函数中tilefile暂时不释放,还用于压缩函数,用于构建压缩表。原型如下:voidInserttile(LPBYTEtilefile,floatxlcorner,floatylconer,intxlc,intylr);(7)函数Readtile_endcode中的传递参数为所需要影像数据块的行列号,函数中调用数据库访问类中的SQL语句执行函数GetRecordSet函数返回记录集数据,该函数把GetRecordSet函数返回的记录集数据转化为handle标示的内存数据提供给其它函数调用。首先得到数据的大小1DataSize,并把把图像字段中的数据存入进varBLOB中,为全局变量分配必要的存储空间,为了得到指针值,在此函数外释放空间,复制数据到缓冲区m_pBuffer中。SD_SDE数据压缩和金字塔模型影像数据存入数据库时,SD_SDE还另把一份压缩后的数据存入数据库,压缩数据可用在网络传输中,提高传输的速度。本文采用JPEG2000压缩算法,SD_SDE借助于CxImage类的成员函数Encode进行压缩,该接口函数的原型为:Encode(buffer,size,image_type);该函数把image对象中的图像以type类型数据压缩并放到buffer缓冲区中。其中image_type设置为CXIMAGE_FORMAT_JP2,代表为JPEG2000格式。通过套接字接收道德数据进行解压缩,调用的成员函数为Decode,该函数原型如下:Decode(buffer,size,image_type),参数意义和Encode相同。在SD_SDE中多分辨率金字塔模型实现的接口函数原型如下:voidtilepyramid(tiles&curtile,tiles&lastile,DWORD&curwidthpixnum,DWORD&lastwidthpixnum);其中第一个参数curdle表示第i级金字塔数据,第二个参数lasttile表示第i-1级金字塔数据,curwidthpixnum为当前第i级金字塔的横向像素宽度,lastwidthpixnum为第i-1级金字塔横向像素宽度。函数主要实现算法如下:for(DWORDk=O;k<curtile.tileheight;k=k+1)//遍历当前第i级金字塔的所有行{for(DWORDm=O;m<curtile.tilewidth*3;m=m+3)//遍历当前第i级金字塔的所有列{rcolor=O;gcolor;bcolor=0;//把像素RGB值变量进行初始化赋值for(intn=O;n<levelsubnum*levelsubnum;n++){//遍历用来重采样的levelsubnum*levelsubnum个像素,本文SD_SDE中采用四分之一重采样;rcolor=rcolor+lasttile.tilebit[(k*levelsubnum+n/levelsubnum)*lastwidthpixnum+m*levelsubnum+n*3];gcolor=gcolor+lasttile.tilebit[(k*levelsubnum+n/levelsubnum)*lastwidthpixnum+m*levelsubnum+n*3+1];bcolor=bcolor+lasttile.tilebit[(k*levelsubnum+n/levelsubnum)*lastwidthpixnum+m*levelsubnum+n*3+2];}//对求和后的rcolor,gcolor,bcolor进行求平均计算,并保存为当前第i级金字塔的数据curdle.tilebit[k*curwidthpixnum+m]=(BYTE)(rcolor/(levelsubnum*levelsubnum));curdle.tilebit[k*curwidthpixnum+m+1]=(BYTE)(gcolor/(levelsubnum*levelsubnum));curdle.tilebit[k*curwidthpixnum+m+2]=(BYTE)(bcolor/(levelsubnum*levelsubnum));}}通信接口实现该系统能够为服务器提供多种功能的服务,最主要的是Socket通信服务,即用户与服务器之间的数据传输,包括数据包的传输等。在服务器的连接方面,通过使用多线连接技术,可以同时处理多个用户的请求,传输数据。SD_SDE通信体系结构SD_SDE体系的应用服务端程序包含两个进程:监听和服务。该体系使用了客户端-服务器模式和多线程技术,较为高端。其中监听进程主要是对来自客户端和其他分布式服务节点的请求进行监听,并将监听到的各种请求传送给服务进程。服务进程是监听进程的下游进程,它主要处理监听进程发送过来的请求,进程会自动分析请求的类型,按照客户端请求和分布式参与节点请求的不同来分别处理。当分析得出请求来自于客户端时,进程会自动识别出用户是否获得授权,当识别完毕,进程将会将有效信息加以转变,成为与关系型数据库管理系统相符的语句,然后将这些处理过的请求传送给下一环节——关系型数据库管理系统,进行二次转变,将这些信息传回客户端程序,此时客户端程序已经可以处理之。倘或请求来自分布式参与阶段,服务进程也有一个专门的线程来分析处理该类型请求,下图4-4即是SD-SDE通信体系结构图:图4-4通信体系结构本文使用套接字Socket、RPC(RemoteProcedureCallProtocol,远程过程调用协议)远程过程调用思想来处理参与节点的通信。其主要程序为,参与节点获得主服务器传送的消息后,参与节点上的函数借口处理信息遂被主服务器调用,在该信息被有效处理后,参与节点将处理完的信息反向传送给主服务器,该动作中使用应答消息功能。想要获得一致性的消息架构,其分布式空间数据库引擎设置消息的结构当如下所示:structmessage_type{BYTEmessage_direction:l,//求情为0,应答为1message一type:7,//消息类型BYTEsubmessage_type;//子消息的类型shortlength;//消息的长度;};结构公示中的变量含义请参阅变量右边解释,所有变量都是在消息的传送中确实使用的消息变量。下面展示图4-5为SD_SDE的监听进程和服务进程服务流程:图4-5进程服务流程图SD_SDE通信接口类在SD_SDE数据通信体系中,想要实现客户端与服务端、主服务节点和参与节点两个关系之间的分布式通信,将消息机制及Scoket技术有效运用于服务进程中是最佳选择。使用work线程方式处理能够使得服务进程可暂缓当前操作,转而处理其他信息,为操作留下缓冲时间,仿版接下来的异步传输。各线程间的通信技术需要共享全局变量、消息等机制为其服务来实现,此类机制能够很快捷方便地搭建线程之间的联系。在通信体系中,类是组成体系的主要部分,在客户端和服务端之间设置的类与Socket相互联系作用,共同搭建通信体系结构。下图4-6为通信体系中服务通信类在服务端和客户端之间搭建的关系图。从图中我们可看见,基础服务类CBaseServer主导操作,通过函数来处理数据和其他基础命令。其下属为CServiceprocess,该部分主要掌管客户端彼此之间的操作。而负责消息结构的则是CMessage,它属于消息基类。CNode则是处理SocketAPI和CMessage类与CServiceprocess间交互的节点类。CBaseSocket类和CListenprocess都是封装了基础的SocketAPI函数操作,它们之间的关系是承上启下。CClient类中包含客户的用户名和密码等信息,属于客户类,该类主要通过CListenprocess类与CServiceprocess之间的交互实现其功能,验证密码即是一项主要功能。图4-6通信体系类图SD_SDE异步传输及缓冲区设计在本文中提到的异步传输方式建立在socket的传输平台上,具体说来有两个办法实现这种网络传送,首先,可以建立一套多方式多路线的技术平台,在这种境况下,即使数据传送的通道发生堵塞,也不会阻碍其他主要的通道。在这种方式中用户永远处在主动地位。其次,在socket基础上可以采用非堵塞的网络传输技术。具体关于异步传输的相关设计方法可以参照第三章第六节的设计,流程图如3-9所示。SD_SDE中异步缓冲区的结构设置为:structcache_struct{FILE*pfile;//所对应的文件char*phead_cache;//指向缓冲区首部intposinfile;//缓冲区头部在相应文件中的位置intposmove;//缓冲区的偏移量intfpos;//缓冲区中的第一次修改位置intlpos;//缓冲区中的最后修改位置intdatalen;//缓冲区中的数据长度intavail_data;//是否有数据可供读写,0为没有,1为有数据inttake_data;//缓冲区中的数据是否已经被取走,0为没有,1为已取走inttake_datay2;//缓冲区中数据是否已被数据库副本取走,0为未被副本主数据库副本取走,1为已被主数据库副本取走intsumdata;//缓冲区中可供读写的数据总量intsequence_data;//缓冲区的序号,主要是保证读入或写入的顺序};空间索引实现空间索引在本文中主要根据数据的类型不同而划分,栅格类型的数据使用改进型的网格式检索,而矢量数据则以混合式检索为主。索引数据表设计与实现栅格数据索引表设计正如前文所说,对于栅格类型的数据采用网格式检索方式,在改进的这套方法中,数据所表达的地理信息,地物特征均以表格的形式存储。改进后的网格式检索将内容分为三个层次,每一层又进一步分为网格信息,地物信息两类。网格的矩阵形式与地物信息的矩阵形式在位置上一一对应。第一层中的地物信息的网格分布被记录在第二层,每个矩阵也与第一层一一对应,同理,第三层只记录网格信息。根据下图可更好的理解。第一层网格信息表如表4-12所示,第二、三层网格信息表如表4-14所示,三层索引结构的地物信息表相同,如表4-13所示。表4-12网格索引第一层中网格信息表表4-13网格索引第一层中地物信息表表4-14网格索引第二层网格信息表矢量数据索引表设计在对矢量数据进行处理的时候,计算机先进行网格索引然后根据结果对数据进行划分,生成如4-15所示的数据表。表中记录了若干个子索引区,接着对每个子索引区进行R树索引,具体的结构如表4-16和表4-17所示。表4-15混合索引中网格信息表表4-16混合索引中管理表表4-17混合索引中R-tree信息表索引接口类一下介绍如何在索引接口中进行分类。首先设置一个基本索引即Base_index和点线面三个子索引Point_index,Line_index,和Area_index,三者分别承接基本索引Base_index。在基本索引下家里三种操作函数,分别表示插入,删除,修改。数值类型均为整数型,我们规定属性包括地物名称和类型两类。其中数字0表示点类,1表示线类,2表示面类。具体如下图所示。图4-7索引分析类图索引数据缓冲我们知道网格索引是将信息分成a*b的块状。因此,a,b的数值大小决定了分块的数目,当a.b很大时,索引表的数量会集聚增加。因此,要确定恰当的a,b值。但是在实际操作上,这是极其困难的。特别是在栅格遥感图像的网格内还要分出三层,这占据了更多的存储空间,大大降低了检索的效率。因此为了解决这个问题,我们考虑建立一套异步缓冲机制。根据第三章第六节提供的信息,我们对异步缓冲加以改进,以期能够适应大数值的索引表。具体操作为,当检索到某一段信息时,系统将该段信息的前后相关的记录提前读入内存,下次访问时即可大大提高读取速度。索引数据结构改进型网格索引中网格的结构实现如下:structbuck_index{intblock_id;//网格的标示IDintbuck_id;//网格号intxlc;//网格所在行号intylr;//网格所在列号boolsth;//网格内是否有地物,0表示没有地物,1表示有地物char*sthname;//地物名字intsthid;//地物标示intlevel;//层次};structGridHead{longGridNum;//网格编号introw;//网格的行号intcolumn;//网格的列号intScaleNum;//网格所记录的比例尺boolFlag;//是否被检索intlastlevel;//上级网格编号intnextlevel;//下级网格编号,左下角第一个网格};对于矢量数据的混合索引中R-tree的结构如下:structIndex_Rtree{intinxKey;//索引编号intFlag;//是否被检索MBRMbri;//目录矩形MBRMbr;//最小包围矩形longAddress;//空间要素的文件地址};structMBR_Rtree{CpointLpoint;//左上角坐标CpointRpoint;//右下角坐标};分布式管理实现任务调度和节点的负载均衡是在分布式管理中占据比例最大的一部分内容。下文将予以系统介绍。任务调度当有多个用户同时访问时,任务调度便开始调用程序。多用户同时控制的计算方法有几种,但是最常用的有两种。一:建立在封闭的基础上的并发控制的计算方法。二:建立在时间点上的计算方法。从应用情况来看,还是前者的应用范围更加广泛。因而本文也采纳了这种封锁的算法。这种算法的特点是所有用户都进行读操作的情况下系统不加锁运行。但当某一个用户正进行读操作,而另一个用户准备进行写操作的时候,并发控制收到触发,对写操作进行一定程度的上锁。该系统在进行计算时,最初设置的标志,冗余和计数变量的初始值均为0.当没有人访问的时候变量为0,有人在进行读操作的时候变量为1,同理,写操作对应的变量为2。也就是说,在变量为0的时候,没有其他用户访问,因此该用户可以进行读写的操作。但有用户操作的时候,此时标志变量为1.新的用户只能进行读操作,该用户读取完毕关闭了界面之后,系统内自带的计数器做相应的计算,并将变量值减去1。直到原来数据变量变为0的时候才能继续进行其他节点的数据读取。在变量为2的时候,用户不可进行读写操作。在用户进行写操作的过程中则程序将自动封锁。但这只是暂时的。节点封锁变量结构为:structDB_mark{intmark;//标志变量intremark;//冗余标志变量intcount;//计数标志变量};负载均衡实现在对地理物象进行空间数据的图形处理过程中,计算机的CPU和内存决定了处理的速度。二者的利用情况直接影响机器的运行速度。所以在节点信息的采集过程中加入这两个变量就能很好的表示。各个关于节点的参数和变量都需要被重新设定。包括主服务器的节点以及各个参与的节点,并且周期性的有规律的向主服务器发送自身的数据报告。主服务器将记录下发送来的CPU及内存的利用率。然后生成负载均衡参数表。如下表所示。表4-18负载均衡参数表参与服务节点中传递参数结构体为:structloadparameter{doubleMeparameter;//内存利用率doubleCPUparameter;//CPU利用率};本章小结本章节从空间数据库的搜索引擎的数据存储调用,信息连接端口,检索分析和算法以及分布式管理等方面进行介绍。仔细讨论其实现方法和根本原理。综合看来,本章的重点知识点有4点。首先,矢量和栅格数据在存储调用的过程中实现了表格结构的储存,实现了对数据的输入输出功能。其次,文章介绍了socket和r树结构的调用方法,对通信结构中较为重要的结构体做了详细的介绍。然后本章描述了两种索引方式的结构和算法,在空间检索中对主要的类别和函数进行简单介绍。最后,在多用户的并发处理控制的功能中介绍了分布式管理和负载均衡。严格说来这只是对空间数据库的最基本功能的实现。还有很多地方需要改进。尽管如此,但是他依然具备空间数据库的检索的功能。对于学习者来说是一次有意义的实践和探讨。第5章分布式数据库系统原型的设计与实现分布式空间数据库的引擎主要职能是处理前台的地理信息系统提供的数据,具体方法是将数据转化成不同的关系类型,迎合计算机的处理形式进行存储。同时将可能出现的申请访问等要求编写成计算机可识别处理的语言,将数据导入到数据库后存储好后,一旦用户需要调用,数据库能够自动将信息提供给用户。可以说地理信息系统是进行的是前台的操作。通过分布式的空间数据库引擎以及动态链接库的共同传导将信息呈现给用户,因此可将其看做的后台的操作。除此之外,还需明确的一点是分布式空间数据库的搜索引擎是建立在visualC++的平台上的。5.1 分布式管理实现学习了前面几个章节之后,我们对分布式数据库功能和作用有了比较细致的认识。对于数据库的几个模块以及相应的关键技术也有了清晰的认识,也都通过实际操作得以实现。如果将此分布式的数据库的搜索检索供能同地理信息系统相结合,即将GIS中捆绑一个分布式空间数据库SD-SDE。那么他的界面应如下图所示。图5.1系统整体界面5.2 分布式空间数据库引擎原型系统运行环境操作系统:Windows7操作系统硬件环境:台式电脑AMDAthlon(tm)DualCoreProcessor2.71GHz,2GB内存关系型数据库:SQLServer20005.3 数据源管理模块对于数据源的操作和处理应该包括两个模块。第一是关于数据库访问登录的管理,第二是对于各种不同类型工作区的定义和划分。在第三第四章介绍的分布式空间数据库和异构数据库的登录管理开放,用户可以很直接便捷的了解和读取编写。5.3.1 数据库登陆管理数据库登录管理这一部分应该具备以下几种模块以行使其相应的职能,比如,登录服务器模块,断开连接服务器模块等。在登录模块中主要注意力几种在异构数据库上,对于分布式的数据库,要对原有的查询语句的接口进行检测,做好信息封闭保密。用户只要输入数据库的名称就可以直接登录到目标数据库。图5-2数据库登陆5.3.2 定义工作空间为了能够对顺利实现空间数据的存储,作为之前的一个步骤----定义工作空间有重要的作用。而工作空间也是以数据模型和数据划分为依据进行设计和定义的。用户在使用该系统时,第一步是定义自己所需的空间类型,有矢量和栅格两种工作空间可以选择。用户应该选择适合自己的工作空间,才可达到使用的效果。如果用户采用了栅格工作空间,那么他可以选择金字塔的层数和影响分块多少,或者也可以采用系统默认值。一般情况下多以256*256的块数和7层金字塔模型。或者如下图所示进行修改。图5-3工作空间定义5.4 数据管理模块使用空间数据库的引擎的一部分原因就是储存数据。该引擎把地理事物的空间数据按照结构化标准化的表格形式存入关系型数据库,再利用这种类型数据库的操作系统来管理这些数据。方便用户读取利用。图5-4是分布式空间数据库引擎所实现的表结构。图5-4空间数据库引擎的数据表矢量图像管理该文采用的SHP文件,一次性将SHP文件及对应属性文件内容引入,其矢量图像是系统从外存中引入的文件。引入的文件将根据其图像显示数据及属性依次纳入数据库表里。该文使用美国的州层数据和城市数据,引入矢量数据如下图所示。图5-5引入矢量图像示意图5.4.2 栅格图像管理GIS软件以关系型数据库SQLServer2000为媒介,将栅格图像导入,然后,GIS软件以SD-SDE给予的接口函数为通道,将栅格图像引入数据库,其大小排版可根据用户意愿自定义或系统定义的256×256,储存方法便是根据前面第四章数据表结构进行操作,从而完成栅格空间数据的层次化管理。该文以301兆TIF格式的平乐古镇影像图为例,如下图所示。图5-6栅格图像的载入5.5 数据操作模块5.5.1 矢量图像显示矢量数据的图像和属性信息通过分布式空间数据库引擎从关系型数据库中显示,它不单是图像数据的展示,而是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论