读写分离数据库的方法及系统技术方案

技术编号:7633040 阅读:156 留言:0更新日期:2012-08-03 21:03
本发明专利技术公开一种读写分离数据库的方法及系统,该系统包括包括应用服务器层、数据库访问接口、数据库代理层以及数据库层,该数据库代理层设置于该数据库访问接口层与数据库层之间以进行数据通讯与切换数据源,并提供路由服务、DDL语句解析、数据库状态监控、高可用、数据源切换及事务控制服务,本发明专利技术通过在业务层进行读写分离,实现了于任何数据库软件与版本之间都能进行读写分离的目的。

【技术实现步骤摘要】

本专利技术涉及网络通信领域,特别是涉及一种读写分离数据库的方法及系统
技术介绍
随着互联网的发展,各网站的业务不断扩展,数据不断增加,数据库压力越来越大,数据库的读写机制就越来越重要,当前一般采用对数据库读写分离的读写机制来减轻数据库压力。传统意义的读写分离(Read/Write Splitting),其基本的原理是让主数据库 (master)处理事务性查询,而从数据库(slave)处理SELECT查询,数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库,对于大访问量的网站,一般会采用读写分离,比如ebay的读写比率是260 I。图I为传统的MySQL读写分离示意图,以传统的MySQL数据库读写分离架构为例, 其可以将主数据库(master)的数据复制分布到多个从数据库(slave)上,然后可以利用从数据库(slave)来分担主数据库(master)的读压力。那么对于前台应用来说,就要考虑如何将读的压力分布到多个从数据库(slave)上。如果每个应用都需要来实现读写分离的算法,一则成本太高,二来如果从数据库(slave)增加更多的机器,应用就要随之修改。明显的,如果在应用和数据库间加一个专门用于实现读写分离的中间层,则整个系统的架构拥有更好的扩展性,MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用Iua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。然而,可见上述传统的MySQL读写分离架构是依赖于数据库软件端实现读写分离的;MySQL复制本身只是一种主从库之间的复制,若要实现读写分离的话需要在各库的前端架设一个代理服务(如ameaba、mysql paproxy软件)。前端使用代理服务来实现各库之间的读写切换和读取数据的时候负载均衡,后端则使用MySQL复制实现数据复制。这种方案的缺点是1)事务支持差,由于在代理端进行写入操作会发生事务干扰的现象,若想支持事务必须在业务逻辑端使用至少两个连接池,一个连接池负责从代理端读取数据,另一个连接池负责直接在数据库上写入数据,这样在编码的过程中非常复杂;2)必须在相同的数据库软件之间才能实现,如只能在MySQL而且是相同版本的软件之间才能做读写分离, 兼容性差。
技术实现思路
为克服上述现有技术存在的不足,本专利技术的主要目的在于提供一种读写分离数据库的方法及系统,通过在业务层进行读写分离,通过分布式异步队列在业务端对数据流向进行控制,将读与写的业务逻辑分离,实现了于任何数据库软件与版本之间都能进行读写分离的目的。为达到上述及其他目的,本专利技术提供一种读写分离数据库的方法,至少包括如下步骤接收客户端的数据请求;判断该数据请求的类型;若该数据请求为写操作,则选择一主数据库;若该数据请求为读操作,则选择一从数据库; 连接池获取写/读连接;写/读数据;若为写数据,判断是否写成功,若为读数据,则返回客户端;若写成功,则异步发送任务消息,否则返回客户端;数据库代理层监听该任务消息并写入各从数据库;判断是否写成功;若写失败,则继续该数据库代理监听该任务消息并写入各从数据库的步骤,否则结束读写分离。进一步地,该主数据库的选择通过负载均衡算法进行。进一步地,该从数据库的选择通过负载均衡算法进行。进一步地,统计用户的读写命令信息,建立操作日志,并将用户的读写命令信息记录于该操作日志内。进一步地,该操作日志存储于一分布式文件服务器。为达到上述及其他目的,本专利技术提供一种读写分离数据库的系统,其中,该系统包括应用服务器层、数据库访问接口、数据库代理层以及数据库层,该数据库代理层设置于该数据库访问接口层与数据库层之间以进行数据通讯与切换数据源,提供路由服务、DDL语句解析、数据库状态监控、高可用、数据源切换及事务控制服务。进一步地,该数据库访问接口为java数据库连接。进一步地,该数据库层包括多种关系型数据库,其分为两组,一组为主数据库,一组为从数据库,数据的复制在该主数据库的事务提交完成后才开始同步各从数据库的数据。进一步地,该系统还包括统计单元,用于统计用户的读写命令的信息,建立操作日志,并将用户的读写命令的信息记录在操作日志内。进一步地,该系统还包括异常处理单元,以处理任务处理过程中出现的异常情况。与现有技术相比,本专利技术一种读写分离数据库的方法及系统通过在业务层进行读写分离,通过分布式异步队列在业务端对数据流向进行控制,将读与写的业务逻辑分离,由于本专利技术中数据通过JMS进行异步同步,只要在程序的业务过程中使用标准SQL语句,无论哪种DBMS都可以做主库和从库,实现了于任何数据库软件与版本之间都能进行读写分离的目的。附图说明图I为传统的MySQL读写分离示意图;图2为本专利技术一种读写分离数据库的系统之系统架构图;图3为本专利技术一种读写分离数据库的系统之较佳实施例的架构图; 图4为本专利技术一种读写分离数据库的方法的步骤流程图。具体实施例方式以下通过特定的具体实例并结合附图说明本专利技术的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本专利技术的其它优点与功效。本专利技术亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本专利技术的精神下进行各种修饰与变更。图2为本专利技术一种读写分离数据库的系统之系统架构图。如图I所示,本专利技术一种读写分离数据库的系统,至少包括应用服务器层110、数据库访问接口 111、数据库代理层112以及数据库层113。其中应用服务器层110为提供各项具体服务的一层,也是用户最为关心和接触最直接的一层,在这一层里,包括多个应用服务器APP,例如有提供广告服务的广告服务器,有提供搜索服务的搜索服务器,有提供通信服务的短信息接口服务器和邮件服务器,还有提供图片分享的图片服务器等等;数据库访问接口 111,用于为数据库层113的多种关系数据库提供统一访问接口,在本专利技术较佳实施例中,数据库访问接口 111为JDBC(Java Data Base Connectivity, java数据库连接),它是一种用于执行SQL语句的Java API ;数据库代理层112设置于数据库访问接口 111与数据库层113之间,用于数据通讯与切换数据源, 在本专利技术中,其主要用于提供路由服务、DDL语句解析、数据库状态监控、HA(高可用)、数据源切换及事务控制服务,换句话说,在本专利技术中,对数据库的读写分离不是采用数据软件之间的主从库数据复制机制,而是在业务逻辑端通过数据库代理层112解析SQL语句直接进行读写切换;数据库层113,包含多种关系型数据库,在本专利技术较佳实施例中,其分为两组, 一组为主数据库(master),一组为从数据库(slave),于本专利技术中,数据的复制是在主数据库的事务提交完成后才开始同步各从数据库的数据,主库是独立的不依赖任何前端代理的数据库(如mysql或orac本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:俞晓鸿
申请(专利权)人:杭州闪亮科技有限公司
类型:发明
国别省市:

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

1
相关领域技术