一种数据库访问的实现方法和系统技术方案

技术编号:5241036 阅读:201 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开一种数据库访问的实现方法和系统,包括:将同一类的SQL组成一个Bucket实例;在数据访问配置文件中配置各SQL以及Bucket;如果进行非跨语句的数据库访问,则通过borrowStatement()接口方法获取Pooled?Statement;如果进行跨语句的数据库访问,则通过borrowBucket()接口方法获取Bucket,通过Bucket提供的getStatement()方法逐一获得其中的Pooled?Statement;使用Pooled?Statement提供的接口方法进行本次数据库访问的数据操作。本发明专利技术可以为海量数据的分布式系统提供高可用、高性能、成本低廉、易管理和调优的数据访问层实现。

【技术实现步骤摘要】

本专利技术涉及信息应用技术,特别是指一种数据库访问的实现方法和系统
技术介绍
数据访问技术是海量数据的分布式系统中要考虑的一个重点问题。目前的数据存储一般采用关系型数据库,在用Java实现中,关系型数据库到Java 对象之间的转换称为O-R Mapping,目前已存在很多O-R Mapping的方案,其中开源的如 Hibernate (对象关系映射框架)。对于高可用、高性能要求的海量数据的分布式系统,这些已有的实现一般存在如 下不足1、难以针对应用的特点对不同的读、写特征以及不同的优先级别的数据库连接进 行优化,比如一类数据库访问独享数据库连接资源,几个写的语句共用一个数据库连接;某 些数据库连接一直保持,另一些数据库连接尽快释放等。2、SQL (Structured Query Language,结构化查询语言)语句没有被集中配置,难 以进行SQL语句级别的调优、故障分析以及集中的数据库访问语句的管理,系统开发的管 理人员和数据库管理人员难以用一种集中的方式对访问数据库的SQL进行管理和调优。3、采用Java的反射机制(reflect)实现0_R Mapping,存在较大的性能消耗,不能 满足对性能要求特别高的系统的要求。4、在高可用的海量数据的分布式系统中,一般需要数量很多的数据库服务器,有 时甚至成千上万台,而且数据有多个拷贝。在这种情况下,不能完全依赖数据库系统的海量 存储功能,需要数据库访问层提供相应的支持,一般的已有实现这方面的支持不够灵活,如 没有提供多种分布写的策略。5、跨语句的事务管理依赖应用服务器的实现,性能消耗较大。 专利技术内容有鉴于此,本专利技术的目的在于提出一种数据库访问的实现方法和系统,为海量数 据的分布式系统提供高可用、高性能、成本低廉、易管理和调优的数据访问层实现。基于上述目的本专利技术提供的一种数据库访问的实现方法,包括对SQL进行分类;在数据访问配置文件中配置各Bucket,一个Bucket中包括同一类的SQL以及该 Bucket的数据库连接;如果进行非跨语句的数据库访问,则通过borrowStatement 0接口方法获取 Pooled Statement ;如果进行跨语句的数据库访问,则通过borrowBucket ()接口方法获取 Bucket,通过 Bucket 提供的 getStatementO 方法逐一获得其中的 Pooled Statement ;使用Pooled Statement提供的接口方法进行本次数据库访问的数据操作。可选的,该方法中如果进行非跨语句的数据库访问,则通过borrowStatement ()接口方法,根据语句id来获取Pooled Statement ;如果进行跨语句的数据库访问,则通过 borrowBucket ()接 口方法,根据语句 Bucket id 来获取 Bucket。可选的,该方法中通过一个二维数组来管理Bucket实例,第一维为Bucket实例所 属的Bucket类型,第二维为该实例占用的数据库连接;调用者通过 borrowStatementO 或 borrowBucket ()方法申请语句或 Bucket 时, 传入的参数为“Bucket id”或“语句id”,池管理器操作过程如下如果参数为“语句id”,则通过一个索引转化为Bucket id。根据Bucket id在Bucket池中找到属于该Bucket类型的所有Bucket实例,即一 个一维数组; 扫描该数组,如果找到一个“空闲”的Bucket实例,标记为“在用”,如果调用者申 请的是Bucket,则把该实例返回;如果申请的是语句,则根据“语句id”在该Bucket实例 包含的语句中找到该语句返回;如果找不到“空闲”的Bucket实例,则过程休眠一段时间等 待,如果等待时间之后,还找不到“空闲”的实例,则抛出表示“忙”的异常响应。可选的,该方法中通过returnMe ()方法归还Pooled Statement或Bucket。可选的,该方法进一步包括一次数据库访问所需的所有Bucket在一个数据访问 配置文件中集中配置。可选的,该方法所述数据访问配置文件采用Java的Properties文件,语句的配置 形式为“语句id = SQL”,Bucket的配置形式如下包含的语句class . stmts =逗号隔开的多个语句id,定义了 Bucket 中包括的SQL语句;最多可以用的数据库连接数ClaSS, conn =最多可以用的数据库连 接数;数据库连接是否可写class. update = true/false,默认为 false, 即只读。可选的,该方法如果所述数据库访问为写操作,则采用如下三种方式之一执行只写一个数据库数据只写到一个数据库即完成;多个数据同步写数据要成功的写到多个数据库,事务才算成功;多个数据库异步写先尝试把数据写到多个数据库中,如果成功,则事务成功完 成;如果失败,则选择其中一个数据库写,并记录该数据需要同步到其他数据库中,由后台 的同步机制进行事后的数据同步。可选的,该方法中当数据库访问过程中出现异常时,调用者不归还Pooled Statement或Bucket,将对出错的数据库进行标记,拒绝再对其进行写操作。可选的,该方法在所述数据访问配置文件中指定语句的空闲保持时间,如果超出 该空闲保持时间语句仍没有被使用,则回收该语句的资源;如果一个Bucket实例中的所有 语句都被回收,则该Bucket实例连同其使用的数据连接都会被回收。在本专利技术的另一方面,还提供了一种数据库访问的实现系统,包括接口模块,用于提供数据库访问的接口,对于非跨语句的数据库访问,提供 borrowStatementO接口方法获取Pooled Statement ;对于跨语句的数据库访问,提供 borrowBucket ()接口方法获取 Bucket ;5Bucket模块,将同一类的SQL组成一个Bucket实例;提供getStatement ()方法 用于获得 Pooled Statement 模块的 PooledStatement ;Pooled Statement模块,提供的接口方法进行数据库访问的数据操作;连接及语句池管理模块,用于管理连接和SQL语句池;分布式数据库存储器,用于存储数据库的数据。可选的,该系统所述接口模块,如果进行非跨语句的数据库访问,则通过 borrowStatement ()接口方法,根据语句id来获取PooledStatement ;如果进行跨语句的数 据库访问,则通过borrowBucket ()接口方法,根据语句Bucket id来获取Bucket。可选的,该系统所述Bucket模块,通过一个二维数组来管理Bucket实例,第一维 为Bucket实例所属的Bucket类型,第二维为该实例占用的数据库连接;调用者通过 borrowStatement ()或 borrowBucket ()方法申请语句或 Bucket 时, 传入的参数为“Bucket id”或“语句id”,池管理器操作过程如下如果参数为“语句id”,则通过一个索引转化为Bucket id。根据Bucket id在Bucket池中找到属于该Bucket类型的所有B本文档来自技高网...

【技术保护点】
一种数据库访问的实现方法,其特征在于,包括:  对SQL进行分类;  在数据访问配置文件中配置各Bucket,一个Bucket中包括同一类的SQL以及该Bucket的数据库连接;  如果进行非跨语句的数据库访问,则通过borrowStatement()接口方法获取Pooled Statement;如果进行跨语句的数据库访问,则通过borrowBucket()接口方法获取Bucket,通过Bucket提供的getStatement()方法逐一获得其中的Pooled Statement;  使用Pooled Statement提供的接口方法进行本次数据库访问的数据操作。

【技术特征摘要】

【专利技术属性】
技术研发人员:蔡坚铮粱冰李云张玉忠宋平波赵华方艾杨豪杰
申请(专利权)人:中国电信股份有限公司
类型:发明
国别省市:11[]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1