一種實現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)、磁碟或者光碟等各種可以存儲程序代碼的介質。
本說明書中各個實施例採用遞進的方式描述,每個實施例重點說明的都是與其它實施例的不同之處,各個實施例之間相同或相似部分互相參見即可。
對所公開的實施例的上述說明,使本領域專業技術人員能夠實現或使用本發明。對這些實施例的多種修改對本領域的專業技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發明的精神或範圍的情況下,在其它實施例中實現。因此,本發明將不會被限制於本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的範圍。