当前位置:文档之家› 云计算环境下异构数据库整合技术的研究与实现

云计算环境下异构数据库整合技术的研究与实现

云计算环境下异构数据库整合技术的研究与实现摘要:该文提出一种通过利用云资源、分布式部署实体数据库代理服务端agent、异构数据库服务端server和服务网站等模块,构建一个异构数据库整合的多线程原型系统的方法。

系统中agent实现对实体数据库进行第一层虚拟和执行sql请求;server解析自定义查询语言和整合agent返回结果;服务网站则提供基本的注册、申请和下载服务;原型系统各模块间通过套接字进行网络通信,通信内容为xml格式,外部可以通过自定义的查询语言访问原型系统。

通过实现这套分布式的原型系统,达到高效整合异构数据库的目的。

关键词:异构数据库;数据整合;云计算中图分类号:tp391 文献标识码:a 文章编号:1009-3044(2013)14-3232-04云计算[1]是近些年新兴的一种重要的信息技术。

它是构建在互联网上的一组新兴技术,可以将高速互联网、高性能计算机、大型数据库、传感器、远程设备等融为一体,实现计算资源、信息资源、知识资源等的全面共享。

云计算的这些诸多特性为异构数据库的访问和整合等提供了一种新的平台访问方式。

通过对云计算的应用对异构数据库进行整合,可以很好的利用分布在不同数据库中的相关数据。

随着计算机应用的发展和普及,存储器容量的扩大,数据需求的明细化,地域分布的不平衡化等,在这样的背景下,数据量也呈现出了高增长性。

现而今怎样高效利用这些分布在异构数据库中的数据或者方便的对分布在不同地域、不同数据库管理软件中的数据进行统一访问并对数据进行整合成为了一个具有意义的挑战[2-4]。

本文针对在云计算环境下如何设计与实现异构数据库整合这个问题展开讨论,提出一套可行的方案及其实现方法。

1 不同数据库的差异性数据库系统发展至今,出现过层次模型、网状模型、关系模型等数据库模型[5]。

当前使用最广泛的数据库大多都是关系型数据库,其中oracle、sqlserver和mysql占有了很大的比例[6]。

这三种数据库各有各的特性和用户群体,以及许多各自的细节问题。

1.1 整体框架上的差异性oracle是一种分布式数据库,是目前最流行的b/s体系结构的数据库之一,其可扩展性、可维护性都较强,但是由于其模块较多,组织形式也叫复杂;sqlserver只能运行在windows上,一个sqlserver服务就是一个实例,另外还要运行sqlserver agent执行作业、监视 sql server、激发警报及允许自动执行某些管理任务和sqlserver browser实现远程服务。

mysql可以在多种操作系统上运行,虽然其跟oracle等大型数据库相比在大数据量上性能不是很好,但是其小巧灵活,所以仍有许多市场。

1.2 不同数据库不同的连接方式首先这三种数据库都能够实现远程连接、远程控制,说明其都实现了底层的套接字通信,而在默认的监听端口上oracle是1521,sqlserver是1433,mysql是3306。

除此之外,监听的端口信息还可以自由配置,虽增加了灵活性,但也因此使连接到数据库变得更加复杂。

而且要连接到这些数据库,数据驱动也不相同,需要根据是哪种数据库而加载不同的数据驱动。

1.3 sql底层执行时的略微不同三种数据库虽然都以sql作为结构化查询语言,但是各自都对sql 做了相应的修改,因此在许多细节方面都存在差异。

比如将主键定义为自动增长标识符类型,mysql的方法是把表的主键设为auto_increment类型,sqlserver则为identity类型,而oracle 则为设置customer_id_seq序列的方法设置自增序列。

三种数据库在数据类型方面也有些不同。

2 异构数据库方案的设计4)insert,与sql相同,语法和用法省略。

除了这些与sql有关联的之外,还有其他一些操作:5)dblist:查询已连接的数据库信息,从虚库中查询。

6)vdb:查询虚拟数据库的信息;7)add:添加一个与agent交互的连接添加内容,并修改虚拟数据库和服务实体数据库,参数是agent端的ip和端口号,需要admin 权限;8)help:显示帮助信息。

2.2 简单的词法、语法解析及执行自定义sql过程为了保证简单的自定义查询语言在使用过程中的正确性,需要进行词法和语法的分析,其中词法分析器的作用是扫描有无非法字符,并将单词抠出,方便下一步语法分析;语法分析器的作用是判断关键词是否正确,语法格式是否正确,标识符是否使用正确等等。

在底层查询过程中,通过扫描虚库获取数据库名和字段名,再将其与自定义的查询语言设计部分相整合,便可构成一条完整的sql 查询语句,之后便可以在实体数据库中执行。

2.3 底层数据查询方案在第二层中,第一个values中存储的是字段名,之后是查询的数据。

2.4 数据整合2.4.1 整合方案server端收到了来自各个agent返回的xml格式的查询结果,需要将其整合成统一的结果返回给连接到server的客户端或者api调用。

整合的步骤是:1)第一层整合是在底层执行完sql请求之后对返回的resultset 进行解析,采用dom4j的方式将数据整合成2.3底层数据查询方案格式;2)第二层整合是在扫描虚库完成,也就是底层sql请求完全执行完成的时候,将所有结果整合成一个xml格式的字符串,并加入相应的实体数据库信息。

2.4.2 用xml表示数据信息3.2 虚拟数据库获取算法在分析了oracle、sqlserver、mysql的系统结构之后,除了oracle 之外都存在可用的系统库——sqlserver可以默认连接到“master”库,mysql可默认连接到“mysql”库,因为oracle比较特殊,因此需要用户输入需要连接库的信息。

根据这些默认信息和数据库管理员账户等信息便可以连接到数据库,获取默认的连接;之后根据这个连接通过java.sql.connection. getmetadata()方法获取整个数据库的信息;解析getmetadata()方法返回的resultset,得到所有库信息,便可以得到每个库的connection,并一致放入hashmap。

在获取到上述的关键信息之后便可以查询到数据库的细节信息,包括每个字段的名称、类型和大小信息。

基本思路就是一边获取数据库信息,一边构造xml节点,并将获取到的信息写入到xml节点,成为虚拟数据库的信息。

3.3构建监听服务监听即套接字监听,为防止统一监听某个端口可能导致某台计算机只能运行一个agent的现象,监听端口采用探测的方式在某个范围内选择。

因为处理底层数据查询可能很耗费时间,因此监听和监听后的处理被放入两个线程:监听线程和服务处理线程。

监听线程的主要任务是启动一个serversocket监听,启动服务处理线程,之后监听来自server的可能连接,并将socket交予服务处理线程处理。

服务处理线程主要功能就是根据server传递的命令进行不同的操作,所以要实现网络通信和命令解析。

采用统一的架构,对客户端的信息统一处理、统一返回处理结果,既降低了各个模块之间的耦合,又使不同模块之间通信有统一的方式处理。

3.4实体数据库查询监听处理线程在收到需要执行的sql请求之后,调用handledata 对象的execute*()方法,对传递的自定义sql请求进行解析,然后扫描虚拟数据库,根据扫描信息提供表信息和字段信息构建sql 请求,然后执行并将结果返回。

如果是sql查询,则返回数据格式如2.3底层数据查询方案所示。

3.3 server 实现3.3.1 自定义查询语言解析由于这里自定义的查询语言是无法被实体数据库执行的,因此需要对自定义的查询语言进行解析。

解析包括了简单的词法分析和语法分析,这些都被封装在继承自抽象类isqlquery的实体类里,根据不同的操作调用不同的实体类即可判断出词法、语法是否通过。

在通过之后调用传入表信息和字段信息即可构建一条完整的sql 请求,这部分被封装在各个模块的tosql()方法中。

3.3.2 高效的大数据网络通信虚拟数据库的xml描述和查询的结果集有可能比较庞大,如果完全将其交给tcp去传送而不做处理则可能导致性能的下降和不可预见性的错误[7]。

因此需要将这些数据分批次发送,并在接收端进行重新整合。

在java的网络通信中数据是按照流的方式传递的,datainputstream和dataoutputstream这两个类非常适合网络传输大数据,只要将数据分块并转换成字节码就可以连续发送。

将接收的字节码合并,再读取成字符串就是需要的数据了,这里借助一个缓冲文件进行中转,之后读取文件内容就可以了。

采用这种网络通信之后,可以连续的将大数据从一端传递到另一端,达到充分利用和完全控制网络通信的目的。

3.4 服务网站实现网站采用基础的jsp+servlet的模式,让jsp作为viewer显示界面,servlet作为处理器,持久层高度封装数据操作。

采用上述方案,实现了用户注册、权限申请、资料下载等服务功能。

javaapplet具有在网页中执行复杂java程序的能力,因此设计了一个继承自jtextarea却有着控制台特性的javaconsole类,在实现了ientercaller接口后便可以根据输入命令回车之后进行相应操作,该类在3.5 api设计4 结束语本文介绍了在云计算环境下进行异构数据库整合的方案,其通过对现有的技术手段的应用,实现了虚拟化数据库、线程同步、自定义查询语言以及高效的网络通信等功能模块,然后通过有机的结合实现了一个轻量级的异构数据库整合系统,其可以利用云计算的资源或作为某个云的一个子模块。

通过整合,屏蔽了各种数据库之间的不同点,已注册用户可以通过客户端或api像使用一个数据库那样查询所有库,并返回整合后的数据。

参考文献:[1] danielson, krissi. distinguishing cloud computing from utility computing[r]. 2008-03-26.[2] 罗军舟,金嘉晖,宋爱波,东方.云计算:体系架构与关键技术[j].通信学报,2011,32(7):3-18[3] 陈康,郑纬民.云计算:系统实例与研究现状[j].软件学报,2009,20(5):1337-1348.[4] foster i,young z,raicu i,et al.cloud computing and grid computing 360-degree compared[z].2008,1-10.[5] 董健全,丁宝康.数据库实用教程[m].北京:清华大学出版社,2007:15-21.[6] testbase data slicer. db-engines[eb/ol].http:///en/.[7] 谢希仁.计算机网络[m].5版.北京:电子工业出版社,2008:187-202.[8] bruce eckel.thinking in java[m].上海:机械工业出版社,2007:576-633.。

相关主题