[发明专利]一种基于MongoDB的多线程事务处理方法在审
申请号: | 201610357354.0 | 申请日: | 2016-05-26 |
公开(公告)号: | CN107436881A | 公开(公告)日: | 2017-12-05 |
发明(设计)人: | 凌云;邱玢;黄祺君 | 申请(专利权)人: | 上海童讯网络科技有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 上海愉腾专利代理事务所(普通合伙)31306 | 代理人: | 林弘毅 |
地址: | 201802 上海*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 mongodb 多线程 事务处理 方法 | ||
技术领域
本发明涉及数据库领域,尤其涉及一种基于MongoDB的数据库多线程强事务处理的方法。
背景技术
2010年,随着互联网Web2.0网站的兴起,NoSQL(Not Only SQL,非关系型数据库)在国内掀起一阵热潮,其中风头最劲的莫过于MongoDB了。越来越多的业界公司已经将MongoDB投入实际的生产环境,很多创业团队也将MongoDB作为自己的首选数据库,创造出非常之多的移动互联网应用。
MongoDB的文档模型自由灵活,可以让开发者在开发过程中畅顺无比。对于大数据量、高并发、弱事务的互联网应用,MongoDB可以应对自如。MongoDB内置的水平扩展机制提供了从百万到十亿级别的数据量处理能力,完全可以满足Web2.0和移动互联网的数据存储需求,其开箱即用的特性也大大降低了中小型网站的运维成本。
事务(Transaction)是数据库运行中的一个逻辑工作单位,特别适用于多用户同时操作的数据通信系统。事务是并发控制的单位,是用户定义的一个操作序列。这些操作序列是有顺序的,要么都做,要么都不做,是一个不可分割的工作单位。一个事务的执行不能被其他事务干扰。即一个事务内部的操作序列及顺序,对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
MongoDB本身是弱事务的,如何在高并发处理中,实现强事务管理是其拓展其它应用领域的关键。
发明内容
本发明结合多线程、高并发、强事务的游戏服务器应用开发,提供一种基于MongoDB的多线程事务处理方法,针对MongoDB的弱事务进行改善,形成强事务管理。
为达到上述目的,本发明的实施例采用如下技术方案:
一种基于MongoDB的多线程事务处理方法,包括如下步骤:
下载各语言的MongoDB API;
封装能够表示MongoDB任意操作的任务类,每个任务实例表示一个操作,多个任务实例的序列构成一个事务实例;
创建一个事务类,每个事务实例包括多个任务实例,多个任务实例以序列形式管理,并对添加的序列长度做计数统计;
创建一个全局的事务管理队列,遵循先进先出原则来管理多个事务实例;
每个线程产生带有序列任务实例的事务实例,多个线程就会有多个事务实例,并在各自线程里将事务实例压入全局的事务管理队列,单独开启一个线程来顺序处理全局的事务管理队列中的事务实例;
将各语言封装API。
依照本发明的一个方面,在将各语言封装API之前,还包括如下步骤:对每个事务实例做记录管理。
依照本发明的一个方面,在将各语言封装API之前,还包括如下步骤:对全局的事务管理队列做阻塞管理。
依照本发明的一个方面,所述事务实例封装了事务开始和事务结束语句或函数调用,事务实例由事务开始和事务结束之间执行的全体操作组成。
依照本发明的一个方面,用命名的方式来管理跨线程间的事务实例。
依照本发明的一个方面,用命名的方式来管理跨线程间的事务。
本发明实施的优点:
本发明提出了一种基于MongoDB的数据库多线程强事务处理的方法,其可以编写为多个编程语言的API,方便MongoDB在强事务领域的推广和应用,减少开发时间,保证高并发中数据的正确性。该方法的Java版已经实现。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明的线程事务示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本方法的实现流程如下;
1、下载各语言的MongoDB API。
2、封装能够表示MongoDB任意操作的任务类DBTask,比如主要的操作:插入、修改、删除、读取等,都要封装为任务DBTask实例。一个任务DBTask实例只能表示一个操作。多个任务DBTask实例的序列构成一个事务实例。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海童讯网络科技有限公司,未经上海童讯网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610357354.0/2.html,转载请声明来源钻瓜专利网。