[发明专利]基于消息队列实现数据库事务处理的方法及装置有效
| 申请号: | 201510862134.9 | 申请日: | 2015-11-30 |
| 公开(公告)号: | CN105512244B | 公开(公告)日: | 2019-03-01 |
| 发明(设计)人: | 魏亚文;孙政 | 申请(专利权)人: | 北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司 |
| 主分类号: | G06F16/23 | 分类号: | G06F16/23;G06F9/50 |
| 代理公司: | 中原信达知识产权代理有限责任公司 11219 | 代理人: | 张一军;姜劲 |
| 地址: | 100080 北京市海淀区杏石口路6*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 消息队列 数据库事务 数据库访问请求 消息状态 重试 处理消息 监控机构 顺序执行 回退 服务器 成功 | ||
本发明提供一种基于消息队列实现数据库事务处理的方法及装置,能够使指定服务器异步消费和处理消息。该基于消息队列实现数据库事务处理的方法包括:接收数据库访问请求;根据所述数据库访问请求生成有序的消息队列;通过监控机构按顺序执行所述消息队列的处理,直到所述消息队列中所有消息被成功处理或者该消息队列中消息状态为“异常”的消息的重试次数超过预定阈值;当所述消息队列中的消息状态为“异常”的消息的重试次数超过预定阈值,则回退所述消息队列中已执行的消息。
技术领域
本发明涉及计算机技术领域,特别地涉及一种基于消息队列实现数据库事务处理的方法及装置。
背景技术
在关系型数据库中,当由于数据量特别大,而达到单表或者单库的瓶颈的时候,大都需要对数据库进行分库分表操作。具体的实现方式就是部署多台数据库实例,同时一台数据库服务器中又对数据表进行水平拆分,从而形成多库多表存储多类型数据的结构。
一般对于已进行拆分的数据库或者数据表进行操作的原则是尽量避免同时操作几个数据库的数据。但是随着业务量的逐渐增多,很多情况下,一些业务是需要同时对多个数据库或者数据表进行操作的。例如:现在越来越多的人开始网上购物,电子商务运营的模式发展迅速,当出现一个客户订单中既包括食品,又包括衣服时,大多会因为食品和衣服的分类不同而要从多个数据库中操作数据。目前,对于多库多表中数据的操作,使用较多的方法是通过分布式事务来保证数据的准确性和一致性。
目前,分布式事务的处理比较常用的是两阶段提交协议(Two-phase Commit,2pc)方法。即:由客户端提交请求到事务协调器(TC),然后由事务协调器来确认各个事务执行者是否都执行完毕。待全部执行成功后,才能将整个事务提交完成。
但是,在使用过程中,发现现有的两阶段提交的方法具有以下的缺陷:
1、现有的方法需要事务协调器主动确认各个事务执行者的状态,因此涉及多次节点间的网络通信,通信时间长,系统性能消耗大;
2、现有的方法需要各个事务执行者同步执行分配的任务,因此不适合高并发的系统,且数据库实例越多,可用性能越差;
3、现有的方法对线上环境的容错性要求高,一旦一台机器出现问题,整个事务就会执行失败,无法部分重试。
综上,正是由于现有的处理分布式事务的方法存在很严重的性能问题,故而大部分高并发服务器都在尽量避免使用,尤其是那些对时间需求不是很高,但是对性能要求很高的系统。
发明内容
有鉴于此,本发明提供一种基于消息队列实现数据库事务处理的方法及装置,能够通过消息队列使指定服务器异步消费和处理消息,通过记录消息状态解决各事务执行者之间的频繁通信问题,且容错性能强,具有异常重试的功能。
为实现上述目的,根据本发明的一个方面,提供了一种基于消息队列实现数据库事务处理的方法。
一种基于消息队列实现数据库事务处理的方法,包括:接收数据库访问请求,所述数据库访问请求包括一个或多个数据库操作;根据所述数据库访问请求生成有序的消息队列,其中,所述消息队列中的消息对应数据库操作,每个消息包括消息状态和重试次数;通过监控机构按顺序执行所述消息队列的处理,直到所述消息队列中所有消息被成功处理或者该消息队列中消息状态为“异常”的消息的重试次数超过预定阈值;当所述消息队列中的消息状态为“异常”的消息的重试次数超过预定阈值,则回退所述消息队列中已执行的消息。
可选地,所述消息队列的处理包括:按顺序查找所述消息队列中消息状态为初始状态的第一个消息;调用相应的数据库服务来处理该消息对应的数据库操作;根据处理的结果更新该消息的消息状态和重试次数,其中,如果该消息对应的数据库操作成功完成,则修改该消息的消息状态,否则把该消息的消息状态设为“异常”并把该消息的重试次数递增1。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司,未经北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510862134.9/2.html,转载请声明来源钻瓜专利网。





