[发明专利]读写分离数据库的方法及系统无效
申请号: | 201210045063.X | 申请日: | 2012-02-27 |
公开(公告)号: | CN102622427A | 公开(公告)日: | 2012-08-01 |
发明(设计)人: | 俞晓鸿 | 申请(专利权)人: | 杭州闪亮科技有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 上海思微知识产权代理事务所(普通合伙) 31237 | 代理人: | 郑玮 |
地址: | 310053 浙江省杭州市*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 读写 分离 数据库 方法 系统 | ||
技术领域
本发明涉及网络通信领域,特别是涉及一种读写分离数据库的方法及系统。
背景技术
随着互联网的发展,各网站的业务不断扩展,数据不断增加,数据库压力越来越大,数据库的读写机制就越来越重要,当前一般采用对数据库读写分离的读写机制来减轻数据库压力。
传统意义的读写分离(Read/Write Splitting),其基本的原理是让主数据库(master)处理事务性查询,而从数据库(slave)处理SELECT查询,数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库,对于大访问量的网站,一般会采用读写分离,比如ebay的读写比率是260∶1。
图1为传统的MySQL读写分离示意图,以传统的MySQL数据库读写分离架构为例,其可以将主数据库(master)的数据复制分布到多个从数据库(slave)上,然后可以利用从数据库(slave)来分担主数据库(master)的读压力。那么对于前台应用来说,就要考虑如何将读的压力分布到多个从数据库(slave)上。如果每个应用都需要来实现读写分离的算法,一则成本太高,二来如果从数据库(slave)增加更多的机器,应用就要随之修改。明显的,如果在应用和数据库间加一个专门用于实现读写分离的中间层,则整个系统的架构拥有更好的扩展性,MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。
然而,可见上述传统的MySQL读写分离架构是依赖于数据库软件端实现读写分离的;MySQL复制本身只是一种主从库之间的复制,若要实现读写分离的话需要在各库的前端架设一个代理服务(如ameaba、mysql paproxy软件)。前端使用代理服务来实现各库之间的读写切换和读取数据的时候负载均衡,后端则使用MySQL复制实现数据复制。这种方案的缺点是:1)事务支持差,由于在代理端进行写入操作会发生事务干扰的现象,若想支持事务必须在业务逻辑端使用至少两个连接池,一个连接池负责从代理端读取数据,另一个连接池负责直接在数据库上写入数据,这样在编码的过程中非常复杂;2)必须在相同的数据库软件之间才能实现,如只能在MySQL而且是相同版本的软件之间才能做读写分离,兼容性差。
发明内容
为克服上述现有技术存在的不足,本发明的主要目的在于提供一种读写分离数据库的方法及系统,通过在业务层进行读写分离,通过分布式异步队列在业务端对数据流向进行控制,将读与写的业务逻辑分离,实现了于任何数据库软件与版本之间都能进行读写分离的目的。
为达到上述及其他目的,本发明提供一种读写分离数据库的方法,至少包括如下步骤:
接收客户端的数据请求;
判断该数据请求的类型;
若该数据请求为写操作,则选择一主数据库;若该数据请求为读操作,则选择一从数据库;
连接池获取写/读连接;
写/读数据;
若为写数据,判断是否写成功,若为读数据,则返回客户端;
若写成功,则异步发送任务消息,否则返回客户端;
数据库代理层监听该任务消息并写入各从数据库;
判断是否写成功;
若写失败,则继续该数据库代理监听该任务消息并写入各从数据库的步骤,否则结束读写分离。
进一步地,该主数据库的选择通过负载均衡算法进行。
进一步地,该从数据库的选择通过负载均衡算法进行。
进一步地,统计用户的读写命令信息,建立操作日志,并将用户的读写命令信息记录于该操作日志内。
进一步地,该操作日志存储于一分布式文件服务器。
为达到上述及其他目的,本发明提供一种读写分离数据库的系统,其中,该系统包括应用服务器层、数据库访问接口、数据库代理层以及数据库层,该数据库代理层设置于该数据库访问接口层与数据库层之间以进行数据通讯与切换数据源,提供路由服务、DDL语句解析、数据库状态监控、高可用、数据源切换及事务控制服务。
进一步地,该数据库访问接口为java数据库连接。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州闪亮科技有限公司,未经杭州闪亮科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210045063.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种二次去噪的图像处理方法
- 下一篇:一种环己氨基磺酸钠检测的前处理方法