C-JDBC可扩展的数据库集群中间件

上传人:泽*** 文档编号:75348624 上传时间:2022-04-15 格式:DOC 页数:12 大小:50.50KB
收藏 版权申诉 举报 下载
C-JDBC可扩展的数据库集群中间件_第1页
第1页 / 共12页
C-JDBC可扩展的数据库集群中间件_第2页
第2页 / 共12页
C-JDBC可扩展的数据库集群中间件_第3页
第3页 / 共12页
资源描述:

《C-JDBC可扩展的数据库集群中间件》由会员分享,可在线阅读,更多相关《C-JDBC可扩展的数据库集群中间件(12页珍藏版)》请在装配图网上搜索。

1、C-JDBC可扩展的数据库集群中间件摘要:多层软件结构中已经成功地应用了集群,但在后台数据库上还缺乏这种工具,所以当数据库层出现瓶颈时,就得在硬件上花费高额的费用。开源数据库集群中间件C JDBC解决了上述问题。 它通过 JDBC接口引进了一个虚拟数据库,只要基于拥有 JDBC驱动的数据库上面的应用程序,程序无须任何改动就能运行。 C JDBC具有灵活的体系结构,支持大型复杂的数据库集群体系结构,为数据库集群提供的高性能、强容错能力、易用的平台。关键词: Java数据库连接;集群;中间件;数据库?中图分类号: TP319 文献标志码: A文章编号: 1001 3695(2007)05 0094

2、 03在科学计算中,由普通机器组成的集群已经在很大程度上代替了大型机。这是因为集群有着出众的性价比,这已经在 Web 服务器和应用服务器上的应用很好地体现出来了。数据服务环境中,虽然集群也提供了高性能和强容错能力,在但是这方面的工具就少得多,并且主要是面向大企业的解决方案。商务解决方案如Oracle Real Application Clusters,已经开始从事应用共享存储系统;IBM 的 DB2 Integrated Cluster环境中应用了网络共享存储;而在开源阵营的数据库集群方面, MySQL复制技术应用主从机制来实现。这些技术一个明显的缺点就是为了实现集群的特性,必须扩展数据库引擎

3、,所以应用程序要用一些额外的API,并且这些不同技术的不同实现,很难相互协作。?CJDBC是一个开源的、建立在普通硬件上的数据库集群中间件,它隐藏了集群的复杂性,为应用程序提供一个单一的数据库视图。客户端程序不用修改,就可透明地访问数据库集群;只要RDBMS提供了 JDBC驱动, C JDBC就可以工作;分布式装载、错误容忍、错误恢复全部由C JDBC来处理;其具有可塑的体系结构,能支持分布式大型异质的数据库集群,对不同程度的性能、错误容忍度和高效性进行协调。 ?本文从体系结构、容错能力、所支持的集群结构、性能对比这几个方面对CJDBC进行了研究。 ?1CJDBC体系结构 ?11 功能总览 ?

4、CJDBC是基于 JDBC的数据库集群Java中间件,它能使一系列不同质的数据库转换成一个统一的虚拟数据库(Virtual Database )。在集群中数据同步时,数据拷贝的方式有完全拷贝、部分拷贝,复制的程度和定位都是以表为基本单位。但是,目前在详细查询中,表必须存在于一个后台数据中,不能让一个表拆分成两个部分存储到两个后台数据库中。 ?数据操作时,依据Readone Write all 的原则,由C JDBC统一向各个后台数据库分配操作; C JDBC有多种平衡装载策略,并且用户可以重载这些策略;利用查询结果Cache 机制,提高性能;可对多种容错机制进行选择。 C JDBC 还提供了其

5、他服务, 如监控和日志等功能, 管理平台通过 JMX来实现监控。而对于那些大型高性能的系统,还可以实现C JDBC嵌套集群。 ?12 体系结构 ?图 1 是 C JDBC的总体结构图。它实现了数据库规范中所规定的 JDBC驱动并且提供了与 JDBC相同的接口,客户端通过 C JDBC和 C JDBC控制器( Controller )进行交互。 C JDBC 控制器是一个 Java 组件,是介于 CJDBC驱动与数据库后台之间的代理。控制器为 C JDBC驱动和应用程序提供一个虚拟数据库。一个控制器可以包含多个虚拟数据库,每个虚拟数据库拥有一个请求管理器(Request Manager)用来调度

6、请求和实现装载平衡策略。而数据库后台则是通过它们本身的 JDBC驱动来实现访问的。即使本身的驱动没有实现连接池的功能,C JDBC也可以通过提供一个连接管理器来实现连接池的功能。?这里将深入研究C JDBC体系结构的关键组件,即CJDBC驱动和请求管理器, 而其他组件如授权管理、链接管理、配置支持等不作讨论。?13C JDBC驱动 ?CJDBC驱动混合了类型3 和类型 4 的 JDBC驱动,它实现了 JDBC 2.0规范和 JDBC 3.0规范中一些扩展的功能。在驱动端执行的功能都已经内置到C JDBC驱动中了。比如,当一条 SQL语句在一个后台执行时,所返回的结果被序列化成C JDBC驱动的

7、结果集。 当被序列化的结果集被送到C JDBC驱动反序列化处理后,客户端才能浏览。?所有与数据库相关的操作都被转发到C JDBC控制器处,由控制器转发到数据库原生驱动器来处理。C JDBC驱动器对于不同结构的数据库集群的错误恢复都是透明的。?14 请求管理 ?请求管理包含了C JDBC控制器的核心功能。它由调度组件、装载平衡组件以及两个可选组件(即恢复日志组件和结果缓存组件)所组成。?14 1 调度器 ?每当 CJDBC驱动发出一个请求,请求在虚拟数据库的配合之下,通过请求管理器决定执行操作。例如,新建事务、提交或者是取消操作;发送读操作到一个后台;更新所有受影响的后台;对一部分或是对全部的后

8、台数据库进行部分拷贝或完全拷贝; 对于含有 rand()或 now() 的 SQL查询语句进行计算,而保证各后台数据库数据一致性。只有当请求管理器收到所有后台数据库对操作发回正确的回应时,才会向客户端发出一条响应。?当执行更新操作时,如果某一后台出错或者取消操作时,对于集群来说,这一操作就是无效的。应当注意的是,CJDBC不是用的两阶段锁协议,而是它提供了一个能在虚拟数据库中自动恢复错误的工具。?14 2 查询结果缓存机制?查询结果缓存机制可以用来存放查询结果,以此来辅助每一次查询。查询结果缓存机制减少了查询响应的时间。缓存机制具有灵活的机制来确保数据一致性。换句话说,CJDBC在查询缓存中执

9、行了更新操作后,将对缓存实体打上无效的标志。灵活性体现在缓存的一致性的原则由用户来定义。为了满足不同性能要求,可以定义查询操作在某一限定的时间内可用缓存中的数据,即使它是陈旧的数据;还可以定义缓存实体在什么条件下被标志成无效。这些条件可以是当数据库变动、表变动和列变动三种不同的粒度。?14 3 装载平衡器 ?当缓存中没有所需要装载的数据时,或者缓存中的数据无效时,请求就转发到装载平衡器处。?CJDBC控制器根据设定的复制方式来提供不同的装载平衡。完全复制是一种易于处理的方法。虽然各个后台数据库都能够处理查询,但是当数据库更新时,就必须对各个后台就行操作,当后台数据库增多时就会遭遇到性能上的瓶颈

10、。所以这种方式并不是最好的方式。为了解决这个问题,CJDBC提供了基于用户自定义的数据库表复制的部分复制机制。装载平衡通过操作请求的解析,并依据由后台数据库同步而来的数据结构(Schema)来达到部分复制的功能。CJDBC控制器动态收集后台数据库的数据结构。当后台可用时,C JDBC控制器就会调用JDBC中的方法,通过数据库生产商提供的驱动程序读取数据库元数据。当SQL语句中执行了Create、 Drop 等语句正确地反映在各个后台时,数据库结构信息就会动态更新。?CJDBC控制器依据动态装载算法,选择后台数据库来执行操作语句。目前CJDBC上所实现的动态装载算法有:循环选择和权重循环。?2

11、容错性 ?CJDBC为了提高容错能力,对客户端屏蔽容错功能,在 C JDBC控制器中提供了检查点( Checkpoint )和恢复日志两种工具。当后台数据库发生错误时,或者某一后台数据库执行备份后,可以结合检查点和恢复日志自动使后台数据库重新达到正确的状态。 ?21 检查点 ?检查点就是虚拟数据库在执行时的某一时刻。检查点可由管理人员设置也可由系统依据时间规则自动设置。?在后台数据库执行备份时, CJDBC会要求这个后台停止运行,所以这段期间就不能对该后台进行更新操作。但是其他后台仍然要服务于客户端。由于在同一个虚拟数据库中的不同后台需要保持一致性,在备份一个后台时,该后台要求锁住所有的表,进

12、入只读的模式,挂起该后台所有的更新操作。但这种情况对于进行一次备份需要几个小时的大型数据库来说是不可行的。 CJDBC引进检查点的概念,就是在执行备份或者在特定设定的时间点时,在恢复日志中插入一个所谓检查点的标志;然后,所有对该后台数据库操作就会被记录下来。当该后台数据库重新启动时,就会从这一个检查点开始,依次执行所有操作,从而恢复到一致的状态。?22 恢复日志 ?CJDBC提供了恢复日志。恢复日志实体记录了操作的起始、提交、取消以及更新的各种细节,日志实体中还包括了用户标志符、事务标志符和 SQL语句。日志可以以文件的形式存储,当然也可以通过 JDBC存储到数据库中。当错误发生时,以创建好的

13、容错日志传输给 CJDBC的虚拟数据库,进行日志更新,从而更正错误。 ?3CJDBC扩展方式 ?单一的 C JDBC控制器还是存在潜在的出错可能性。横向扩展 C JDBC控制器就降低了这种潜在的可能性。当然也提供了垂直扩展来建立一种多层次的后台,以满足拥有大量数据库后台的系统。 ?31C JDBC横向扩展 ?横向扩展提高了C JDBC控制器的容错能力。CJDBC应用 JGroup 来同步不同控制器中的虚拟数据库。当一个虚拟数据库被一个控制器装载时,虚拟数据库被赋予一个组名,分布在不同控制器中的虚拟数据库就依据组名来交换信息。在初始阶段,各个控制器之间交换各自的后台数据库配置信息。如果有一个控制

14、器失败,则后台必须重新执行同步。而C JDBC依靠 JGroup 消息来同步Write 请求和划分事务。?32C JDBC垂直扩展 ?有时可能需要在C JDBC控制器中嵌套使用控制器。例如,第一级的控制器部分复制了三个后台数据库,这三个后台数据库都是由其他C JDBC控制器实现的虚拟数据库。在第一级控制器对数据库访问时,第二级的C JDBC驱动被当做原生驱动了。 垂直扩展可应用于大量数据库后台的情况。?当然,还可以进行横向与垂直混合的扩展。总的来说,任意结构的 C JDBC控制器树都是可以创建的。但是这种情况需要考虑 JVM 对外连接数目以及性能问题。 ?4 性能测试 ?基于对 C JDBC结

15、构的了解,以下用具体的实验数据来分析 C JDBC集群的性能。搭建了测试环境,对测得的不同实验数据进行分析。 ?41 测试实验 ?测试数据为每条记录600 Bytes,客户端分别采用三种不同方式访问数据库:ODBC直连方式访问一台Oracle 数据库; ODBC线性方式访问三台Oracle 数据库;ODBC JDBC桥接加 C JDBC方式访问三台Oracle 数据库。其中C JDBC测试中所采用的控制器结构为单控制器结构,就是一个控制器下连接着三台 Oracle 数据库。 ?42 测试环镜 ?43 测试结果分析 ?从表 1 中的测试数据,可以得到以下结论:?( 1)使用 ODBC直连方式访问

16、单台数据库的速度是最理想的。 ?( 2)使用 ODBC直连方式线性访问三台数据库的速度基本上是访问单台数据库的速度叠加。 ?( 3)使用 C JDBC方式将三台 Oracle 数据库组成集群。C JDBC控制器的多播方式将插入请求分发到三台数据库,速度位于前两种方式之间。随着插入数据量的增大,这种方式的插入速度更加理想,逐渐靠近使用ODBC直接访问单台数据库的性能。?在实验中, C JDBC不会消耗系统太多的资源。在测试中,随着插入数据量的增大,内存的使用率也稳定在2.7%。但实验中也暴露了一些有待解决的问题。CJDBC和 OracleBlob 不兼容; Oracle 的 Blob 实现采取了

17、特别的设计; 只有在获得 Cursor 后才可以对 Blob 插入,这一点与标准 JDBC的setBlob 方法不兼容; 再则就是多控制器的数据同步时还不稳定,有时数据会出现错误。?5 结束语 ?CJDBC是一个易扩展、高效率的数据库集群中间件。通过使用标准的 JDBC接口,使用 C JDBC而无须修改应用程序、数据库引擎。 C JDBC混合了水平和垂直扩展,从而使数据库可以分布在多个节点并能进行数据部分复制,很好地解决了大型数据库复制的问题;不仅如此, C JDBC还可以平衡这些节点之间的查询负载,提高了查询速度,改进了查询性能,能很好地应用于研究和工业领域。?参考文献: ? 1 CECCH

18、ET E, MARGUERITE J,PELTIER M,?et al.?CJDBC user s guide R.S.l.:French National Institute for Research in Computer Science and Control (INRIA) Emic Networks,2005:1 77.?2BORNHVD C, ALTINEL M, MOHAN C,?et al?.Adaptive database caching with DBCache J. Data Engineering,2004,27(2):11 18. ?3CECCHET E. C JD

19、BC:a middleware framework fordatabase clustering J.Data Engineering,2004,27(2):19 26.?4EB/OL.2006 MARTINEZ M,?et al?.Middleware based data replication providing snapshot isolationEB/OL.2005 6SIVASUBRAMANIAN S,ALONSO G,PIERRE G,?et al.?GlobeDB: autonomic data replication for WebapplicationsEB/OL.2005 注:“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文”

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!