CN106776076A - 一种实现MongoDB事务管理的方法及系统 - Google Patents
一种实现MongoDB事务管理的方法及系统 Download PDFInfo
- Publication number
- CN106776076A CN106776076A CN201611229129.5A CN201611229129A CN106776076A CN 106776076 A CN106776076 A CN 106776076A CN 201611229129 A CN201611229129 A CN 201611229129A CN 106776076 A CN106776076 A CN 106776076A
- Authority
- CN
- China
- Prior art keywords
- transaction
- message
- mark
- field
- mongodb
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种实现MongoDB事务管理的方法,包括:设计带有事务字段的po类,对带有事务字段的po类进行处理;启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;将主键值和分配的事务标识以及事务执行结果标识发送至守护进程;基于主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并将事务处理结果标识发送;MQ消息中间件将接收到的事务处理结果标识发送;基于事务处理结果标识控制事务执行进度。本发明能够通过MongoDB进行事务管理,以发挥MongoDB的最大优势。本发明还公开了一种实现MongoDB事务管理的系统。
Description
技术领域
本发明涉及事务管理技术领域,尤其涉及一种实现MongoDB事务管理的方法及系统。
背景技术
目前MongoDB(基于分布式文件存储的数据库)广泛被运用于高效存储后台数据库系统,但其不能对事务方面的完全支持,使得用户在使用MongoDB作为数据库时不得不进行慎重的考虑。
目前针对MongoDB的事务管理方式并没有一个统一具体的实现方式,同时MongoDB对于关系型数据库事务的原子性、一致性、隔离性和持久性特性不能完全的支持,只提供了单个操作的原子性,给用户在考虑使用MongoDB作为数据存储容器时带来了一个弃用的理由。但MongoDB作为一个支持分布式部署,海量高效存储的非关系型数据库,也相当受用户的喜爱。因此,如何实现通过MongoDB进行事务管理,以发挥MongoDB的最大优势是一项亟待解决的问题。
发明内容
本发明提供了一种实现MongoDB事务管理的方法及系统,能够通过MongoDB进行事务管理,以发挥MongoDB的最大优势。
本发明提供了一种实现MongoDB事务管理的方法,包括:
MongoDB数据访问层设计带有事务字段的po类,所述po类为一个java持久化对象,po类中的字段与数据库中的字段一一对应;
MongoDB数据访问层保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行新增、修改和删除处理;
事务管理器启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;
所述MQ消息中间件将接收到的所述主键值和分配的事务标识以及事务执行结果标识发送至守护进程;
所述守护进程基于接收到的所述主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并将所述事务处理结果标识发送至所述MQ消息中间件;
所述MQ消息中间件将接收到的事务处理结果标识发送至所述事务管理器;
所述事务管理器基于接收到的所述事务处理结果标识控制事务执行进度。
优选地,所述MongoDB数据访问层保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行新增具体为:
新增一条文档,并分配一个带有当前事务标识的信息至所述新增的文档。
优选地,所述MongoDB数据访问层保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行修改具体为:
将原有的旧文档和新盖的字段合并,形成一条新文档,并分配一个带有当前事务标识的信息至所述形成的新文档。
优选地,所述MongoDB数据访问层保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行删除具体为:
保存需要进行删除的文档的主键值。
优选地,所述事务管理器基于接收到的所述事务处理结果标识控制事务执行进度具体为:
基于接收到的所述事务处理结果标识判断事务是否处于控制中,当判断事务处于控制中时,锁定发送消息的代码,将代码控制在一个事务处理中,隔离其他并发事务。
一种实现MongoDB事务管理的系统,包括:
MongoDB数据访问层,用于设计带有事务字段的po类,所述po类为一个java持久化对象,po类中的字段与数据库中的字段一一对应;
所述MongoDB数据访问层,还用于保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行新增、修改和删除处理;
事务管理器,用于启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;
MQ消息中间件,用于将接收到的所述主键值和分配的事务标识以及事务执行结果标识发送至守护进程;
守护进程,用于基于接收到的所述主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并将所述事务处理结果标识发送至所述MQ消息中间件;
所述MQ消息中间件,还用于将接收到的事务处理结果标识发送至所述事务管理器;
所述事务管理器,还用于基于接收到的所述事务处理结果标识控制事务执行进度。
优选地,所述MongoDB数据访问层具体用于,新增一条文档,并分配一个带有当前事务标识的信息至所述新增的文档。
优选地,所述MongoDB数据访问层具体还用于,将原有的旧文档和新盖的字段合并,形成一条新文档,并分配一个带有当前事务标识的信息至所述形成的新文档。
优选地,所述MongoDB数据访问层具体还用于,保存需要进行删除的文档的主键值。
优选地,所述事务管理器具体用于,基于接收到的所述事务处理结果标识判断事务是否处于控制中,当判断事务处于控制中时,锁定发送消息的代码,将代码控制在一个事务处理中,隔离其他并发事务。
由上述方案可知,本发明提供的一种实现MongoDB事务管理的方法,通过MongoDB数据访问层设计带有事务字段的po类,并保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行新增、修改和删除处理;通过事务管理器启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;通过MQ消息中间件将接收到的所述主键值和分配的事务标识以及事务执行结果标识发送至守护进程;通过守护进程基于接收到的所述主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并所述事务处理结果标识发送至所述MQ消息中间件;通过MQ消息中间件将接收到的事务处理结果标识发送至所述事务管理器;通过事务管理器基于接收到的所述事务处理结果标识控制事务执行进度。实现了能够通过MongoDB进行事务管理,以发挥MongoDB的最大优势。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明公开的一种实现MongoDB事务管理的方法实施例1的流程图;
图2为本发明公开的一种实现MongoDB事务管理的方法实施例2的流程图;
图3为本发明公开的一种实现MongoDB事务管理的方法实施例3的流程图;
图4为本发明公开的一种实现MongoDB事务管理的系统实施例1的结构示意图;
图5为本发明公开的一种实现MongoDB事务管理的系统实施例2的结构示意图;
图6为本发明公开的一种实现MongoDB事务管理的系统实施例3的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,为本发明公开的一种实现MongoDB事务管理的方法实施例1的流程图,该方法包括以下步骤:
S101、MongoDB数据访问层设计带有事务字段的po类,po类为一个java持久化对象,po类中的字段与数据库中的字段一一对应;
当需要实现MongoDB进行事务管理时,首先设计带有事务字段的po类,po类表示一个java持久化对象,类中的字段和数据库表的字段一一对应,其中除了业务必须的字段外,还多了一个事务字段,用此字段标识新增文档是处于事务控制下的。之后再进行增删改的操作都是通过一个完整的po类来操作MongoDB数据库的。
S102、MongoDB数据访问层保存带有事务字段的po类文档的主键值,并对带有事务字段的po类进行新增、修改和删除处理;
在设计带有事务字段的po类后,在设计MongoDB数据访问层时,针对进行的事务操作的方法都需要转换成另一种存储方式,而在进行转换前,由于所涉及修改和删除操作文档的主键值是明确的,因此需要先保存这些主键值。
S103、事务管理器启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;
事务管理器负责将消息发送至MQ消息中间件。在进行事务时,需要将之前保存的主键值和分配的事务标识发送至MQ消息中间件中,它会通知守护进程获取数据执行相关工作。从发送消息至MQ消息中间件,也就开启了一个事务的过程,接着,如果事务执行成功,事务管理器会发送一个事务执行结果标识至MQ消息中间件,此结果会让守护进程明白MongoDB数据是该提交还是回滚,之后,事务管理器还需要从MQ消息中间件获取事务处理结果标识,这个标识将告诉事务管理器此事务是否还在控制中,如果还在事务处理过程中,则锁定发送消息的代码,将此代码控制在一个事务处理中,隔离其他并发事务。
S104、MQ消息中间件将接收到的主键值和分配的事务标识以及事务执行结果标识发送至守护进程;
MQ消息中间件会接收事务管理器发送给它的主键信息和事务标识。等待守护进程来从队列中获取数据。以防未被守护进程取走的信息丢失,MQ消息中间件会先将此消息持久化到本地文件中。MQ消息中间件在之后还会接收一个事务处理结果标识让事务管理器继续锁定代码还是释放锁定以完成下一个事务。
S105、守护进程基于接收到的主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并将事务处理结果标识发送至所述MQ消息中间件;
S106、MQ消息中间件将接收到的事务处理结果标识发送至事务管理器;
守护进程会定期从MQ消息中间件获取相关的信息。在获取到主键值和事务标识信息后,知道了已经开始一个事务的过程,之后会周期性去从MQ消息中间件获取事务执行结果标识,此事务执行结果的标识会让守护进程去执行提交或者回滚数据的脏数据处理工作;处理完毕后,会再发送一个事务处理结果标识至MQ消息中间件,后面事务管理器会从MQ消息中间件获取该标识从而作相应后续处理工作。
S107、事务管理器基于接收到的事务处理结果标识控制事务执行进度。
综上所述,在上述实施例中,通过MongoDB数据访问层设计带有事务字段的po类,并保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行新增、修改和删除处理;通过事务管理器启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;通过MQ消息中间件将接收到的所述主键值和分配的事务标识以及事务执行结果标识发送至守护进程;通过守护进程基于接收到的所述主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并所述事务处理结果标识发送至所述MQ消息中间件;通过MQ消息中间件将接收到的事务处理结果标识发送至所述事务管理器;通过事务管理器基于接收到的所述事务处理结果标识控制事务执行进度。实现了能够通过MongoDB进行事务管理,以发挥MongoDB的最大优势。
如图2所示,为本发明公开的一种实现MongoDB事务管理的方法实施例2的流程图,该方法包括以下步骤:
S201、MongoDB数据访问层设计带有事务字段的po类,po类为一个java持久化对象,po类中的字段与数据库中的字段一一对应;
当需要实现MongoDB进行事务管理时,首先设计带有事务字段的po类,po类表示一个java持久化对象,类中的字段和数据库表的字段一一对应,其中除了业务必须的字段外,还多了一个事务字段,用此字段标识新增文档是处于事务控制下的。之后再进行增删改的操作都是通过一个完整的po类来操作MongoDB数据库的。
S202、MongoDB数据访问层保存带有事务字段的po类文档的主键值,新增一条文档,并分配一个带有当前事务标识的信息至所述新增的文档,将原有的旧文档和新盖的字段合并,形成一条新文档,并分配一个带有当前事务标识的信息至所述形成的新文档,保存需要进行删除的文档的主键值;
在设计带有事务字段的po类后,在设计MongoDB数据访问层时,针对进行的事务操作的方法都需要转换成另一种存储方式,而在进行转换前,由于所涉及修改和删除操作文档的主键值是明确的,因此需要先保存这些主键值。
新增一条文档的操作在经过MongoDB数据访问层后,实际的操作是新增一条文档,同时该文档还被分配了一个带有当前事务标识的信息。
修改一条文档的操作在进入MongoDB数据访问层前,需要将原有旧文档和新改的字段合并,形成一条新文档,接着在经过MongoDB数据访问层时,实际操作也是插入了一条新文档,同时带有一个事务标识字段信息。
在进行删除方法时,实际并不真的删除该条文档,而是保存要删除的文档的主键值。
S203、事务管理器启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;
事务管理器负责将消息发送至MQ消息中间件。在进行事务时,需要将之前保存的主键值和分配的事务标识发送至MQ消息中间件中,它会通知守护进程获取数据执行相关工作。从发送消息至MQ消息中间件,也就开启了一个事务的过程,接着,如果事务执行成功,事务管理器会发送一个事务执行结果标识至MQ消息中间件,此结果会让守护进程明白MongoDB数据是该提交还是回滚,之后,事务管理器还需要从MQ消息中间件获取事务处理结果标识,这个标识将告诉事务管理器此事务是否还在控制中,如果还在事务处理过程中,则锁定发送消息的代码,将此代码控制在一个事务处理中,隔离其他并发事务。
S204、MQ消息中间件将接收到的主键值和分配的事务标识以及事务执行结果标识发送至守护进程;
MQ消息中间件会接收事务管理器发送给它的主键信息和事务标识。等待守护进程来从队列中获取数据。以防未被守护进程取走的信息丢失,MQ消息中间件会先将此消息持久化到本地文件中。MQ消息中间件在之后还会接收一个事务处理结果标识让事务管理器继续锁定代码还是释放锁定以完成下一个事务。
S205、守护进程基于接收到的主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并将事务处理结果标识发送至所述MQ消息中间件;
S206、MQ消息中间件将接收到的事务处理结果标识发送至事务管理器;
守护进程会定期从MQ消息中间件获取相关的信息。在获取到主键值和事务标识信息后,知道了已经开始一个事务的过程,之后会周期性去从MQ消息中间件获取事务执行结果标识,此事务执行结果的标识会让守护进程去执行提交或者回滚数据的脏数据处理工作;处理完毕后,会再发送一个事务处理结果标识至MQ消息中间件,后面事务管理器会从MQ消息中间件获取该标识从而作相应后续处理工作。
S207、事务管理器基于接收到的事务处理结果标识控制事务执行进度。
综上所述,在上述实施例中,通过MongoDB数据访问层设计带有事务字段的po类,并保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行新增、修改和删除处理;通过事务管理器启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;通过MQ消息中间件将接收到的所述主键值和分配的事务标识以及事务执行结果标识发送至守护进程;通过守护进程基于接收到的所述主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并所述事务处理结果标识发送至所述MQ消息中间件;通过MQ消息中间件将接收到的事务处理结果标识发送至所述事务管理器;通过事务管理器基于接收到的所述事务处理结果标识控制事务执行进度。实现了能够通过MongoDB进行事务管理,以发挥MongoDB的最大优势。
如图3所示,为本发明公开的一种实现MongoDB事务管理的方法实施例3的流程图,该方法包括以下步骤:
S301、MongoDB数据访问层设计带有事务字段的po类,po类为一个java持久化对象,po类中的字段与数据库中的字段一一对应;
当需要实现MongoDB进行事务管理时,首先设计带有事务字段的po类,po类表示一个java持久化对象,类中的字段和数据库表的字段一一对应,其中除了业务必须的字段外,还多了一个事务字段,用此字段标识新增文档是处于事务控制下的。之后再进行增删改的操作都是通过一个完整的po类来操作MongoDB数据库的。
S302、MongoDB数据访问层保存带有事务字段的po类文档的主键值,新增一条文档,并分配一个带有当前事务标识的信息至所述新增的文档,将原有的旧文档和新盖的字段合并,形成一条新文档,并分配一个带有当前事务标识的信息至所述形成的新文档,保存需要进行删除的文档的主键值;
在设计带有事务字段的po类后,在设计MongoDB数据访问层时,针对进行的事务操作的方法都需要转换成另一种存储方式,而在进行转换前,由于所涉及修改和删除操作文档的主键值是明确的,因此需要先保存这些主键值。
新增一条文档的操作在经过MongoDB数据访问层后,实际的操作是新增一条文档,同时该文档还被分配了一个带有当前事务标识的信息。
修改一条文档的操作在进入MongoDB数据访问层前,需要将原有旧文档和新改的字段合并,形成一条新文档,接着在经过MongoDB数据访问层时,实际操作也是插入了一条新文档,同时带有一个事务标识字段信息。
在进行删除方法时,实际并不真的删除该条文档,而是保存要删除的文档的主键值。
S303、事务管理器启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;
事务管理器负责将消息发送至MQ消息中间件。在进行事务时,需要将之前保存的主键值和分配的事务标识发送至MQ消息中间件中,它会通知守护进程获取数据执行相关工作。从发送消息至MQ消息中间件,也就开启了一个事务的过程,接着,如果事务执行成功,事务管理器会发送一个事务执行结果标识至MQ消息中间件,此结果会让守护进程明白MongoDB数据是该提交还是回滚,之后,事务管理器还需要从MQ消息中间件获取事务处理结果标识,这个标识将告诉事务管理器此事务是否还在控制中,如果还在事务处理过程中,则锁定发送消息的代码,将此代码控制在一个事务处理中,隔离其他并发事务。
S304、MQ消息中间件将接收到的主键值和分配的事务标识以及事务执行结果标识发送至守护进程;
MQ消息中间件会接收事务管理器发送给它的主键信息和事务标识。等待守护进程来从队列中获取数据。以防未被守护进程取走的信息丢失,MQ消息中间件会先将此消息持久化到本地文件中。MQ消息中间件在之后还会接收一个事务处理结果标识让事务管理器继续锁定代码还是释放锁定以完成下一个事务。
S305、守护进程基于接收到的主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并将事务处理结果标识发送至所述MQ消息中间件;
S306、MQ消息中间件将接收到的事务处理结果标识发送至事务管理器;
守护进程会定期从MQ消息中间件获取相关的信息。在获取到主键值和事务标识信息后,知道了已经开始一个事务的过程,之后会周期性去从MQ消息中间件获取事务执行结果标识,此事务执行结果的标识会让守护进程去执行提交或者回滚数据的脏数据处理工作;处理完毕后,会再发送一个事务处理结果标识至MQ消息中间件,后面事务管理器会从MQ消息中间件获取该标识从而作相应后续处理工作。
S307、事务管理器基于接收到的事务处理结果标识判断事务是否处于控制中,当判断事务处于控制中时,锁定发送消息的代码,将代码控制在一个事务处理中,隔离其他并发事务。
综上所述,在上述实施例中,本发明通过更新操作转换,与MQ消息中间件通信,守护进程清理脏数据的整个过程做到数据库不存在冗余文档的副本,只保留事务处理后正确的数据,不占用空间,就算后面事务处理越来越多,最后永远只有一条文档;在前端展示时,查询获取文档按正常的操作来,不用刻意关心带有事务标识的文档,带有事务标识的文档只说明它曾经参与某次事务处理过程而已;采用MQ消息中间件,保证的消息的可靠安全传达;利用守护进程清理脏数据,能够保证不存在其他干扰多余的文档。
如图4所示,为本发明公开的一种实现MongoDB事务管理的系统实施例1的结构示意图,该系统可以包括:
MongoDB数据访问层401,用于设计带有事务字段的po类,po类为一个java持久化对象,po类中的字段与数据库中的字段一一对应;
当需要实现MongoDB进行事务管理时,首先设计带有事务字段的po类,po类表示一个java持久化对象,类中的字段和数据库表的字段一一对应,其中除了业务必须的字段外,还多了一个事务字段,用此字段标识新增文档是处于事务控制下的。之后再进行增删改的操作都是通过一个完整的po类来操作MongoDB数据库的。
MongoDB数据访问层401,还用于保存带有事务字段的po类文档的主键值,并对带有事务字段的po类进行新增、修改和删除处理;
在设计带有事务字段的po类后,在设计MongoDB数据访问层时,针对进行的事务操作的方法都需要转换成另一种存储方式,而在进行转换前,由于所涉及修改和删除操作文档的主键值是明确的,因此需要先保存这些主键值。
事务管理器402,用于启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;
事务管理器负责将消息发送至MQ消息中间件。在进行事务时,需要将之前保存的主键值和分配的事务标识发送至MQ消息中间件中,它会通知守护进程获取数据执行相关工作。从发送消息至MQ消息中间件,也就开启了一个事务的过程,接着,如果事务执行成功,事务管理器会发送一个事务执行结果标识至MQ消息中间件,此结果会让守护进程明白MongoDB数据是该提交还是回滚,之后,事务管理器还需要从MQ消息中间件获取事务处理结果标识,这个标识将告诉事务管理器此事务是否还在控制中,如果还在事务处理过程中,则锁定发送消息的代码,将此代码控制在一个事务处理中,隔离其他并发事务。
MQ消息中间件403,用于将接收到的主键值和分配的事务标识以及事务执行结果标识发送至守护进程;
MQ消息中间件会接收事务管理器发送给它的主键信息和事务标识。等待守护进程来从队列中获取数据。以防未被守护进程取走的信息丢失,MQ消息中间件会先将此消息持久化到本地文件中。MQ消息中间件在之后还会接收一个事务处理结果标识让事务管理器继续锁定代码还是释放锁定以完成下一个事务。
守护进程404,用于基于接收到的主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并将事务处理结果标识发送至所述MQ消息中间件;
MQ消息中间件403,还用于将接收到的事务处理结果标识发送至事务管理器;
守护进程会定期从MQ消息中间件获取相关的信息。在获取到主键值和事务标识信息后,知道了已经开始一个事务的过程,之后会周期性去从MQ消息中间件获取事务执行结果标识,此事务执行结果的标识会让守护进程去执行提交或者回滚数据的脏数据处理工作;处理完毕后,会再发送一个事务处理结果标识至MQ消息中间件,后面事务管理器会从MQ消息中间件获取该标识从而作相应后续处理工作。
事务管理器402,还用于基于接收到的事务处理结果标识控制事务执行进度。
综上所述,在上述实施例中,通过MongoDB数据访问层设计带有事务字段的po类,并保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行新增、修改和删除处理;通过事务管理器启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;通过MQ消息中间件将接收到的所述主键值和分配的事务标识以及事务执行结果标识发送至守护进程;通过守护进程基于接收到的所述主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并所述事务处理结果标识发送至所述MQ消息中间件;通过MQ消息中间件将接收到的事务处理结果标识发送至所述事务管理器;通过事务管理器基于接收到的所述事务处理结果标识控制事务执行进度。实现了能够通过MongoDB进行事务管理,以发挥MongoDB的最大优势。
如图5所示,为本发明公开的一种实现MongoDB事务管理的系统实施例2的结构示意图,该系统可以包括:
MongoDB数据访问层501,用于设计带有事务字段的po类,po类为一个java持久化对象,po类中的字段与数据库中的字段一一对应;
当需要实现MongoDB进行事务管理时,首先设计带有事务字段的po类,po类表示一个java持久化对象,类中的字段和数据库表的字段一一对应,其中除了业务必须的字段外,还多了一个事务字段,用此字段标识新增文档是处于事务控制下的。之后再进行增删改的操作都是通过一个完整的po类来操作MongoDB数据库的。
MongoDB数据访问层501,还用于保存带有事务字段的po类文档的主键值,新增一条文档,并分配一个带有当前事务标识的信息至所述新增的文档,将原有的旧文档和新盖的字段合并,形成一条新文档,并分配一个带有当前事务标识的信息至所述形成的新文档,保存需要进行删除的文档的主键值;
在设计带有事务字段的po类后,在设计MongoDB数据访问层时,针对进行的事务操作的方法都需要转换成另一种存储方式,而在进行转换前,由于所涉及修改和删除操作文档的主键值是明确的,因此需要先保存这些主键值。
新增一条文档的操作在经过MongoDB数据访问层后,实际的操作是新增一条文档,同时该文档还被分配了一个带有当前事务标识的信息。
修改一条文档的操作在进入MongoDB数据访问层前,需要将原有旧文档和新改的字段合并,形成一条新文档,接着在经过MongoDB数据访问层时,实际操作也是插入了一条新文档,同时带有一个事务标识字段信息。
在进行删除方法时,实际并不真的删除该条文档,而是保存要删除的文档的主键值。
事务管理器502,用于启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;
事务管理器负责将消息发送至MQ消息中间件。在进行事务时,需要将之前保存的主键值和分配的事务标识发送至MQ消息中间件中,它会通知守护进程获取数据执行相关工作。从发送消息至MQ消息中间件,也就开启了一个事务的过程,接着,如果事务执行成功,事务管理器会发送一个事务执行结果标识至MQ消息中间件,此结果会让守护进程明白MongoDB数据是该提交还是回滚,之后,事务管理器还需要从MQ消息中间件获取事务处理结果标识,这个标识将告诉事务管理器此事务是否还在控制中,如果还在事务处理过程中,则锁定发送消息的代码,将此代码控制在一个事务处理中,隔离其他并发事务。
MQ消息中间件503,用于将接收到的主键值和分配的事务标识以及事务执行结果标识发送至守护进程;
MQ消息中间件会接收事务管理器发送给它的主键信息和事务标识。等待守护进程来从队列中获取数据。以防未被守护进程取走的信息丢失,MQ消息中间件会先将此消息持久化到本地文件中。MQ消息中间件在之后还会接收一个事务处理结果标识让事务管理器继续锁定代码还是释放锁定以完成下一个事务。
守护进程504,用于基于接收到的主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并将事务处理结果标识发送至所述MQ消息中间件;
MQ消息中间件503,用于将接收到的事务处理结果标识发送至事务管理器;
守护进程会定期从MQ消息中间件获取相关的信息。在获取到主键值和事务标识信息后,知道了已经开始一个事务的过程,之后会周期性去从MQ消息中间件获取事务执行结果标识,此事务执行结果的标识会让守护进程去执行提交或者回滚数据的脏数据处理工作;处理完毕后,会再发送一个事务处理结果标识至MQ消息中间件,后面事务管理器会从MQ消息中间件获取该标识从而作相应后续处理工作。
事务管理器502,还用于基于接收到的事务处理结果标识控制事务执行进度。
综上所述,在上述实施例中,通过MongoDB数据访问层设计带有事务字段的po类,并保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行新增、修改和删除处理;通过事务管理器启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;通过MQ消息中间件将接收到的所述主键值和分配的事务标识以及事务执行结果标识发送至守护进程;通过守护进程基于接收到的所述主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并所述事务处理结果标识发送至所述MQ消息中间件;通过MQ消息中间件将接收到的事务处理结果标识发送至所述事务管理器;通过事务管理器基于接收到的所述事务处理结果标识控制事务执行进度。实现了能够通过MongoDB进行事务管理,以发挥MongoDB的最大优势。
如图6所示,为本发明公开的一种实现MongoDB事务管理的系统实施例3的结构示意图,该系统可以包括:
MongoDB数据访问层601,用于设计带有事务字段的po类,po类为一个java持久化对象,po类中的字段与数据库中的字段一一对应;
当需要实现MongoDB进行事务管理时,首先设计带有事务字段的po类,po类表示一个java持久化对象,类中的字段和数据库表的字段一一对应,其中除了业务必须的字段外,还多了一个事务字段,用此字段标识新增文档是处于事务控制下的。之后再进行增删改的操作都是通过一个完整的po类来操作MongoDB数据库的。
MongoDB数据访问层601,用于保存带有事务字段的po类文档的主键值,新增一条文档,并分配一个带有当前事务标识的信息至所述新增的文档,将原有的旧文档和新盖的字段合并,形成一条新文档,并分配一个带有当前事务标识的信息至所述形成的新文档,保存需要进行删除的文档的主键值;
在设计带有事务字段的po类后,在设计MongoDB数据访问层时,针对进行的事务操作的方法都需要转换成另一种存储方式,而在进行转换前,由于所涉及修改和删除操作文档的主键值是明确的,因此需要先保存这些主键值。
新增一条文档的操作在经过MongoDB数据访问层后,实际的操作是新增一条文档,同时该文档还被分配了一个带有当前事务标识的信息。
修改一条文档的操作在进入MongoDB数据访问层前,需要将原有旧文档和新改的字段合并,形成一条新文档,接着在经过MongoDB数据访问层时,实际操作也是插入了一条新文档,同时带有一个事务标识字段信息。
在进行删除方法时,实际并不真的删除该条文档,而是保存要删除的文档的主键值。
事务管理器602,用于启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;
事务管理器负责将消息发送至MQ消息中间件。在进行事务时,需要将之前保存的主键值和分配的事务标识发送至MQ消息中间件中,它会通知守护进程获取数据执行相关工作。从发送消息至MQ消息中间件,也就开启了一个事务的过程,接着,如果事务执行成功,事务管理器会发送一个事务执行结果标识至MQ消息中间件,此结果会让守护进程明白MongoDB数据是该提交还是回滚,之后,事务管理器还需要从MQ消息中间件获取事务处理结果标识,这个标识将告诉事务管理器此事务是否还在控制中,如果还在事务处理过程中,则锁定发送消息的代码,将此代码控制在一个事务处理中,隔离其他并发事务。
MQ消息中间件603,用于将接收到的主键值和分配的事务标识以及事务执行结果标识发送至守护进程;
MQ消息中间件会接收事务管理器发送给它的主键信息和事务标识。等待守护进程来从队列中获取数据。以防未被守护进程取走的信息丢失,MQ消息中间件会先将此消息持久化到本地文件中。MQ消息中间件在之后还会接收一个事务处理结果标识让事务管理器继续锁定代码还是释放锁定以完成下一个事务。
守护进程604,用于基于接收到的主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并将事务处理结果标识发送至所述MQ消息中间件;
MQ消息中间603,还用于件将接收到的事务处理结果标识发送至事务管理器;
守护进程会定期从MQ消息中间件获取相关的信息。在获取到主键值和事务标识信息后,知道了已经开始一个事务的过程,之后会周期性去从MQ消息中间件获取事务执行结果标识,此事务执行结果的标识会让守护进程去执行提交或者回滚数据的脏数据处理工作;处理完毕后,会再发送一个事务处理结果标识至MQ消息中间件,后面事务管理器会从MQ消息中间件获取该标识从而作相应后续处理工作。
事务管理器602,还用于基于接收到的事务处理结果标识判断事务是否处于控制中,当判断事务处于控制中时,锁定发送消息的代码,将代码控制在一个事务处理中,隔离其他并发事务。
综上所述,在上述实施例中,本发明通过更新操作转换,与MQ消息中间件通信,守护进程清理脏数据的整个过程做到数据库不存在冗余文档的副本,只保留事务处理后正确的数据,不占用空间,就算后面事务处理越来越多,最后永远只有一条文档;在前端展示时,查询获取文档按正常的操作来,不用刻意关心带有事务标识的文档,带有事务标识的文档只说明它曾经参与某次事务处理过程而已;采用MQ消息中间件,保证的消息的可靠安全传达;利用守护进程清理脏数据,能够保证不存在其他干扰多余的文档。
本实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本发明实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种实现MongoDB事务管理的方法,其特征在于,包括:
MongoDB数据访问层设计带有事务字段的po类,所述po类为一个java持久化对象,po类中的字段与数据库中的字段一一对应;
MongoDB数据访问层保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行新增、修改和删除处理;
事务管理器启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;
所述MQ消息中间件将接收到的所述主键值和分配的事务标识以及事务执行结果标识发送至守护进程;
所述守护进程基于接收到的所述主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并将所述事务处理结果标识发送至所述MQ消息中间件;
所述MQ消息中间件将接收到的事务处理结果标识发送至所述事务管理器;
所述事务管理器基于接收到的所述事务处理结果标识控制事务执行进度。
2.根据权利要求1所述的方法,其特征在于,所述MongoDB数据访问层保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行新增具体为:
新增一条文档,并分配一个带有当前事务标识的信息至所述新增的文档。
3.根据权利要求2所述的方法,其特征在于,所述MongoDB数据访问层保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行修改具体为:
将原有的旧文档和新盖的字段合并,形成一条新文档,并分配一个带有当前事务标识的信息至所述形成的新文档。
4.根据权利要求3所述的方法,其特征在于,所述MongoDB数据访问层保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行删除具体为:
保存需要进行删除的文档的主键值。
5.根据权利要求4所述的方法,其特征在于,所述事务管理器基于接收到的所述事务处理结果标识控制事务执行进度具体为:
基于接收到的所述事务处理结果标识判断事务是否处于控制中,当判断事务处于控制中时,锁定发送消息的代码,将代码控制在一个事务处理中,隔离其他并发事务。
6.一种实现MongoDB事务管理的系统,其特征在于,包括:
MongoDB数据访问层,用于设计带有事务字段的po类,所述po类为一个java持久化对象,po类中的字段与数据库中的字段一一对应;
所述MongoDB数据访问层,还用于保存所述带有事务字段的po类文档的主键值,并对所述带有事务字段的po类进行新增、修改和删除处理;
事务管理器,用于启动事务过程,并将主键值和分配的事务标识以及事务执行结果标识发送至MQ消息中间件;
MQ消息中间件,用于将接收到的所述主键值和分配的事务标识以及事务执行结果标识发送至守护进程;
守护进程,用于基于接收到的所述主键值和分配的事务标识以及事务执行结果标识进行数据清理,并基于数据清理结果生成事务处理结果标识,并将所述事务处理结果标识发送至所述MQ消息中间件;
所述MQ消息中间件,还用于将接收到的事务处理结果标识发送至所述事务管理器;
所述事务管理器,还用于基于接收到的所述事务处理结果标识控制事务执行进度。
7.根据权利要求6所述的系统,其特征在于,所述MongoDB数据访问层具体用于,新增一条文档,并分配一个带有当前事务标识的信息至所述新增的文档。
8.根据权利要求7所述的系统,其特征在于,所述MongoDB数据访问层具体还用于,将原有的旧文档和新盖的字段合并,形成一条新文档,并分配一个带有当前事务标识的信息至所述形成的新文档。
9.根据权利要求8所述的系统,其特征在于,所述MongoDB数据访问层具体还用于,保存需要进行删除的文档的主键值。
10.根据权利要求9所述的系统,其特征在于,所述事务管理器具体用于,基于接收到的所述事务处理结果标识判断事务是否处于控制中,当判断事务处于控制中时,锁定发送消息的代码,将代码控制在一个事务处理中,隔离其他并发事务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611229129.5A CN106776076B (zh) | 2016-12-27 | 2016-12-27 | 一种实现MongoDB事务管理的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611229129.5A CN106776076B (zh) | 2016-12-27 | 2016-12-27 | 一种实现MongoDB事务管理的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106776076A true CN106776076A (zh) | 2017-05-31 |
CN106776076B CN106776076B (zh) | 2019-04-26 |
Family
ID=58922287
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611229129.5A Active CN106776076B (zh) | 2016-12-27 | 2016-12-27 | 一种实现MongoDB事务管理的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106776076B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107992515A (zh) * | 2017-10-27 | 2018-05-04 | 大唐网络有限公司 | mongodb事务机制的实现方法、装置及存储介质 |
WO2019047737A1 (zh) * | 2017-09-05 | 2019-03-14 | 阿里巴巴集团控股有限公司 | 事务处理方法、装置和系统以及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1942860A (zh) * | 2004-04-29 | 2007-04-04 | 国际商业机器公司 | 在分布式网络体系结构中建模和动态部署服务的系统和方法 |
CN101089857A (zh) * | 2007-07-24 | 2007-12-19 | 中兴通讯股份有限公司 | 一种内存数据库事务管理方法及系统 |
CN101699439A (zh) * | 2009-11-16 | 2010-04-28 | 中兴通讯股份有限公司 | 一种数据库的事务提交方法和装置 |
CN102111293A (zh) * | 2010-12-23 | 2011-06-29 | 华为技术有限公司 | 配置事务的处理方法和装置 |
CN102760154A (zh) * | 2012-05-23 | 2012-10-31 | 上海引跑信息科技有限公司 | 一种在文本信息检索服务中支持分布式事务管理的方法 |
-
2016
- 2016-12-27 CN CN201611229129.5A patent/CN106776076B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1942860A (zh) * | 2004-04-29 | 2007-04-04 | 国际商业机器公司 | 在分布式网络体系结构中建模和动态部署服务的系统和方法 |
CN101089857A (zh) * | 2007-07-24 | 2007-12-19 | 中兴通讯股份有限公司 | 一种内存数据库事务管理方法及系统 |
CN101699439A (zh) * | 2009-11-16 | 2010-04-28 | 中兴通讯股份有限公司 | 一种数据库的事务提交方法和装置 |
CN102111293A (zh) * | 2010-12-23 | 2011-06-29 | 华为技术有限公司 | 配置事务的处理方法和装置 |
CN102760154A (zh) * | 2012-05-23 | 2012-10-31 | 上海引跑信息科技有限公司 | 一种在文本信息检索服务中支持分布式事务管理的方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019047737A1 (zh) * | 2017-09-05 | 2019-03-14 | 阿里巴巴集团控股有限公司 | 事务处理方法、装置和系统以及电子设备 |
US11256536B2 (en) | 2017-09-05 | 2022-02-22 | Alibaba Group Holding Limited | Method and system for processing transactions using a transaction coordinator |
CN107992515A (zh) * | 2017-10-27 | 2018-05-04 | 大唐网络有限公司 | mongodb事务机制的实现方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106776076B (zh) | 2019-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107977376B (zh) | 分布式数据库系统及事务处理方法 | |
CN104793988B (zh) | 跨数据库分布式事务的实现方法和装置 | |
CN102831156B (zh) | 一种云计算平台上的分布式事务处理方法 | |
US8266290B2 (en) | Scalable queues on a scalable structured storage system | |
CN106445644B (zh) | 基于改进的一阶段提交的分布式事务的处理方法和装置 | |
US11442961B2 (en) | Active transaction list synchronization method and apparatus | |
US9372879B1 (en) | Balanced append tree data structure | |
CA2633309A1 (en) | Commitment of transactions in a distributed system | |
CN107577678A (zh) | 处理数据库事务的方法、客户端和服务器 | |
KR20170097132A (ko) | 데이터베이스에서의 계좌와 관련된 거래 요청의 효율적인 처리를 위한 시스템 | |
WO2019005400A1 (en) | CONFIGURATION OF ACCESS CONTROL MANAGER BASED ON JOURNAL FILE EXPLORATION | |
CN106899648A (zh) | 一种数据处理方法和设备 | |
CN110019112A (zh) | 数据事务处理方法、装置以及电子设备 | |
US8666958B2 (en) | Approaches to reducing lock communications in a shared disk database | |
CN110888858A (zh) | 数据库的操作方法和装置、存储介质、电子装置 | |
US10048983B2 (en) | Systems and methods for enlisting single phase commit resources in a two phase commit transaction | |
US7899998B1 (en) | Conflict avoidance in data store replication | |
CN110796401A (zh) | 库存扣减方法、系统和服务器 | |
CN106776076A (zh) | 一种实现MongoDB事务管理的方法及系统 | |
US8141103B2 (en) | Solution for modifying a queue manager to support smart aliasing which permits extensible software to execute against queued data without application modifications | |
CN108829709A (zh) | 分布式数据库管理方法、装置、存储介质和处理器 | |
US10394677B2 (en) | Method to efficiently and reliably process ordered user account events in a cluster | |
CN116974983A (zh) | 数据处理方法、装置、计算机可读介质及电子设备 | |
CN113687959A (zh) | 一种基于redis的异步延时队列实现方法 | |
CN106250243B (zh) | 基于轮询处理模式的银行系统应用的处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |