新四季網

一種實現MongoDB事務管理的方法及系統與流程

2023-05-18 14:31:41 2


本發明涉及事務管理技術領域,尤其涉及一種實現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)、磁碟或者光碟等各種可以存儲程序代碼的介質。

本說明書中各個實施例採用遞進的方式描述,每個實施例重點說明的都是與其它實施例的不同之處,各個實施例之間相同或相似部分互相參見即可。

對所公開的實施例的上述說明,使本領域專業技術人員能夠實現或使用本發明。對這些實施例的多種修改對本領域的專業技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發明的精神或範圍的情況下,在其它實施例中實現。因此,本發明將不會被限制於本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的範圍。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀