一种实现MongoDB事务管理的方法及系统与流程

文档序号:12463758阅读:211来源:国知局
一种实现MongoDB事务管理的方法及系统与流程

本发明涉及事务管理技术领域,尤其涉及一种实现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)、磁碟或者光盘等各种可以存储程序代码的介质。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1