读写分离数据库的方法及系统的制作方法

文档序号:6365368阅读:189来源:国知局
专利名称:读写分离数据库的方法及系统的制作方法
技术领域
本发明涉及网络通信领域,特别是涉及一种读写分离数据库的方法及系统。
背景技术
随着互联网的发展,各网站的业务不断扩展,数据不断增加,数据库压力越来越大,数据库的读写机制就越来越重要,当前一般采用对数据库读写分离的读写机制来减轻数据库压力。传统意义的读写分离(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或oracle具有独立的事务机制)。图3为本发明一种读写分离数据库的系统之较佳实施例的架构图。以下将配合图 3之较佳实施例进一步说明本发明之读写分离数据库的系统。App cluster layer(应用服务器层110)包括多个应用服务器(Appl、App2、App3…),其通过数据库访问接口 111访问数据库层113,在此,数据库访问接口 111为JDBC,而在JDBC和各数据库之间使用DS proxy layer(数据库代理层112)进行数据通讯和切换数据源,在此DS porxy主要提供路由服务、DDL(Data Definition Language,数据描述语言)语句解析、数据库状态监控、HA(高可用)、数据源切换、事务控制服务。在本发明较佳实施例中,DS porxy提供的事务具有如下四个特性I、原子性一个事务(transcation)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。如果主库的数据能被insert、update、 delete,那么丛库的数据一定也能被insert、update、delete ;
2、一致性在事务开始之前和事务结束以后,数据库的完整性限制没有被破坏。主库的数据在执行完DDL操作后丛库的数据和主库的数据保持一致3、隔离性无论主库还是丛库多个事务的执行是互不干扰的,多个事务时间不会
互相影响。4、持久性在事务完成以后,该事务对所有数据库所作的更改便持久地保存在数据库之中,并且是完全的。较佳的,本发明一种读写分离数据库的系统还包括统计单元,用于统计master和slave处理的用户的读写命令的信息,建立操作日志,并将用户的读写命令的信息记录在操作日志内,具体来说,用户每进行一次select、insert、update、delete等日常操作都被记录到操作日志中,操作日志文件可存储于一分布式文件服务器(DFS)中,以为维护人员提供日后维护的重要数据参考。另外,为处理异常情况,本发明一种读写分离数据库的系统还可包括异常处理单元,以处理任务处理过程中出现的异常情况,具体包括如下I、主数据库(master)在进行insert、update、delete操作时若发现异常,则从数据库(slave)不会继续进行数据同步,该过程产生的异常信息将被写入到错误日志(errorlog)中并存入统计单元。2、自定义异常处理,在事务的执行过程中若出现任务异常,则会抛出一个异常信息给任务控制器,任务控制器可根据预先定义好的异常处理机制去处理每个异常事件;3、在事务处理过程中若出现异常,则可以从分布式文件服务器(DFS)中将事务恢复,若该事务在被重复恢复3次以上均未能正常处理事务则将该事务永久封存,被封存的事务将被详细记录到错误日志(error log)中。图4为本发明一种读写分离数据库的方法的步骤流程图。如图4所示,本发明一种读写分离数据库的方法,包括如下步骤步骤301,接收客户端的数据请求;步骤302,判断该数据请求的类型;步骤303,若该数据请求为写操作,则选择一主数据库(master),并进入步骤305,这里主数据库的选择可根据负载均衡算法完成;否则进入步骤304 ;步骤304,若该数据请求为读操作,则选择一从数据库(slave),并进入步骤312,这里从数据库的选择可根据负载均衡算法完成;步骤305,连接池获取写连接;步骤306,进行写数据;步骤307,判断是否写成功;步骤308,若写成功,则异步发送任务消息;否则返回客户端(步骤314);步骤309,数据库代理层(DS Proxy)监听任务消息并写入各从数据库;步骤310,判断是否写成功;步骤311,若写失败,则返回步骤309,否则,结束写操作;步骤312,连接池获取读连接;步骤313,读取数据;步骤314,返回客户端。
综上所述,本发明一种读写分离数据库的方法及系统通过在业务层进行读写分离,通过分布式异步队列在业务端对数据流向进行控制,将读与写的业务逻辑分离,由于本发明中数据通过JMS(java消息服务)进行异步同步,只要在程序的业务过程中使用标准 SQL语句,无论哪种DBMS (database management system,数据库管理系统)都可以做主库和从库,实现了于任何数据库软件与版本之间都能进行读写分离的目的。上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。
权利要求
1.一种读写分离数据库的方法,至少包括如下步骤 接收客户端的数据请求; 判断该数据请求的类型; 若该数据请求为写操作,则选择一主数据库;若该数据请求为读操作,则选择一从数据库; 连接池获取写/读连接; 写/读数据; 若为写数据,判断是否写成功,若为读数据,则返回客户端; 若写成功,则异步发送任务消息,否则返回客户端; 数据库代理层监听该任务消息并写入各从数据库; 判断是否写成功; 若写失败,则继续该数据库代理监听该任务消息并写入各从数据库的步骤,否则结束读写分离。
2.如权利要求I所述的读写分离数据库的方法,其特征在于该主数据库的选择通过负载均衡算法进行。
3.如权利要求I所述的读写分离数据库的方法,其特征在于该从数据库的选择通过负载均衡算法进行。
4.如权利要求I所述的单点登录系统,其特征在于,该方法还包括统计用户的读写命令信息,建立操作日志,并将用户的读写命令信息记录于该操作日志内。
5.如权利要求4所述的单点登录系统,其特征在于,该方法还包括该操作日志存储于一分布式文件服务器。
6.一种读写分离数据库的系统,其特征在于该系统包括应用服务器层、数据库访问接口、数据库代理层以及数据库层,该数据库代理层设置于该数据库访问接口层与数据库层之间以进行数据通讯与切换数据源,提供路由服务、DDL语句解析、数据库状态监控、高可用、数据源切换及事务控制服务。
7.如权利要求6所述的读写分离数据库的系统,其特征在于该数据库访问接口为java数据库连接。
8.如权利要求6所述的读写分离数据库的系统,其特征在于该数据库层包括多种关系型数据库,其分为两组,一组为主数据库,一组为从数据库,数据的复制在该主数据库的事务提交完成后才开始同步各从数据库的数据。
9.如权利要求6所述的读写分离数据库的系统,其特征在于该系统还包括统计单元,用于统计用户的读写命令的信息,建立操作日志,并将用户的读写命令的信息记录在操作日志内。
10.如权利要求6所述的读写分离数据库的系统,其特征在于该系统还包括异常处理单元,以处理任务处理过程中出现的异常情况。
全文摘要
本发明公开一种读写分离数据库的方法及系统,该系统包括包括应用服务器层、数据库访问接口、数据库代理层以及数据库层,该数据库代理层设置于该数据库访问接口层与数据库层之间以进行数据通讯与切换数据源,并提供路由服务、DDL语句解析、数据库状态监控、高可用、数据源切换及事务控制服务,本发明通过在业务层进行读写分离,实现了于任何数据库软件与版本之间都能进行读写分离的目的。
文档编号G06F17/30GK102622427SQ20121004506
公开日2012年8月1日 申请日期2012年2月27日 优先权日2012年2月27日
发明者俞晓鸿 申请人:杭州闪亮科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1