本發(fā)明涉及網絡技術領域,特別涉及一種數據異步處理方法及裝置。
背景技術:
隨著互聯(lián)網技術的高速發(fā)展,服務器處理數據通常采用異步處理的方式,即將數據處理完成后及時返回給請求端并緩存需要持久化的數據至緩存區(qū),然后服務器使用異步線程讀取數據隊列中的數據并將數據存入數據庫中。
但是,異步線程的數據處理方式在同一時間只能對緩存區(qū)執(zhí)行數據存儲或者數據讀取的操作,若同時對緩存區(qū)進行數據存儲和數據讀取的操作時,會導致緩存區(qū)中數據的安全性出現(xiàn)問題,如數據丟失等。為了提高數據的安全性,通常會將緩存區(qū)加鎖進行保護。即無論是數據接收模塊還是數據處理模塊,若要操作緩存區(qū)中的數據,必須先獲取互斥鎖來獲得操作緩存區(qū)的權限,等到數據處理完成時,再將互斥鎖釋放。如果數據接收模塊獲得互斥鎖,即說明得到向緩存區(qū)中緩存數據的權限,此時,數據處理模塊因沒有獲得互斥鎖,即說明不能從緩存區(qū)中讀取數據,反之亦然。
由于這種數據異步處理方式無法同時對緩存區(qū)執(zhí)行數據存儲和數據讀取的操作,所以數據處理的實時性不高,數據處理的效率較低。
技術實現(xiàn)要素:
為了解決相關技術中存在的無法同時對緩存區(qū)執(zhí)行數據存儲和數據讀取的操作的技術問題,本發(fā)明提供了一種數據異步處理方法及裝置。
一種數據異步處理方法,所述方法包括:
根據數據隊列的隊列狀態(tài),在各數據隊列中確定數據處理狀態(tài)的數據隊列,所述數據隊列的隊列狀態(tài)包括數據處理狀態(tài)和數據存儲狀態(tài);
針對所述數據處理狀態(tài)的數據隊列中的數據,按照處理次序依次對所述數據進行處理;
在所述數據處理狀態(tài)的數據隊列中的數據全部處理完畢后,對數據隊列進行隊列狀態(tài)切換。
一種數據異步處理裝置,所述裝置包括:
確定模塊,用于根據數據隊列的隊列狀態(tài),在各數據隊列中確定數據處理狀態(tài)的數據隊列,所述數據隊列的隊列狀態(tài)包括數據處理狀態(tài)和數據存儲狀態(tài);
處理模塊,用于針對所述數據處理狀態(tài)的數據隊列中的數據,按照處理次序依次對所述數據進行處理;
切換模塊,用于在所述數據處理狀態(tài)的數據隊列中的數據全部處理完畢后,對數據隊列進行隊列狀態(tài)切換。
本發(fā)明的實施例提供的技術方案可以包括以下有益效果:
獲取數據隊列的隊列狀態(tài),先在各數據隊列中確定數據處理狀態(tài)的數據隊列,其中數據隊列的隊列狀態(tài)包括數據處理狀態(tài)和數據存儲狀態(tài),在確定隊列狀態(tài)為數據處理狀態(tài)的數據隊列后,針對該數據處理狀態(tài)的數據隊列中的數據,按照處理次序依次對所述數據進行處理,在數據處理狀態(tài)的數據隊列中的數據全部處理完畢后,對數據隊列進行隊列狀態(tài)切換,從而使得數據異步處理的數據隊列根據自身的隊列狀態(tài),進行數據的讀取和存入操作,在相應的數據處理完畢后對數據隊列的隊列狀態(tài)進行自動切換,使得數據隊列直接進入下一個操作,從而實現(xiàn)了同時對緩存區(qū)執(zhí)行數據存儲和數據讀取的操作,提高了數據處理的實時性,有效的提高了數據異步處理的效率。
應當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性的,并不能限制本發(fā)明。
附圖說明
此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本發(fā)明的實施例,并于說明書一起用于解釋本發(fā)明的原理。
圖1是數據異步處理的一個具體應用示意圖;
圖2是根據一示例性實施例示出的一種數據異步處理方法的流程圖;
圖3是根據另一示例性實施例示出的一種數據異步處理方法的流程圖;
圖4是對應圖2中實施例的在所述數據處理狀態(tài)的數據隊列中的數據全部處理完畢后,對數據隊列進行隊列狀態(tài)切換步驟的流程圖;
圖5是對應圖4中實施例的根據所述處理結果對數據隊列進行隊列狀態(tài)切換步驟的流程圖;
圖6是根據一示例性實施例示出的一種數據異步處理示意圖;
圖7是根據圖6示出的隊列狀態(tài)切換后的數據異步處理示意圖;
圖8是根據一示例性實施例示出的一種數據異步處理裝置的框圖;
圖9是根據另一示例性實施例示出的一種數據異步處理裝置的框圖;
圖10是圖8對應實施例示出的切換模塊的細節(jié)進行描述的框圖;
圖11是圖10對應實施例示出的切換子模塊的細節(jié)進行描述的框圖。
具體實施方式
這里將詳細地對示例性實施例執(zhí)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
圖1是數據異步處理的一個具體應用示意圖。該具體應用包括:至少一個數據接收模塊110、至少兩個數據隊列130、至少一個數據處理模塊150和至少一個數據庫170,其中至少包括一個數據處理狀態(tài)的數據隊列130和一個數據存儲狀態(tài)的數據隊列130。
數據接收模塊110與數據隊列130之間的關聯(lián)方式,包括有線或無線的網絡關聯(lián)方式,以及二者之間往來的數據關聯(lián)方式,具體的關聯(lián)方式不受本實施例的限制。
數據隊列130與數據處理模塊150之間的關聯(lián)方式,包括有線或無線的網絡關聯(lián)方式,以及二者之間往來的數據關聯(lián)方式,具體的關聯(lián)方式不受本實施例的限制。
數據處理模塊150與數據庫170之間的關聯(lián)方式,包括有線或無線的網絡關聯(lián)方式,以及二者之間往來的數據關聯(lián)方式,具體的關聯(lián)方式不受本實施例的限制。
并且在此具體應用中,根據數據隊列130的隊列狀態(tài),將數據處理狀態(tài)的數據隊列130進行數據的存儲操作,將存儲狀態(tài)的數據隊列130進行數據的讀取操作,最后根據操作的情況將隊列狀態(tài)進行切換,進而實現(xiàn)了數據異步處理的實時性,有效提高了數據異步處理的效率。
圖2是根據一示例性實施例示出的一種數據異步處理方法的流程圖。如圖2所示,該數據異步處理方法可以包括以下步驟。
在步驟s210中,根據數據隊列的隊列狀態(tài),在各數據隊列中確定數據處理狀態(tài)的數據隊列,數據隊列的隊列狀態(tài)包括數據處理狀態(tài)和數據存儲狀態(tài)。
其中,數據隊列是指存儲數據的緩存區(qū),而且該緩存區(qū)的數據還可以被讀取。隊列狀態(tài)是指用來區(qū)分數據隊列的標識,該隊列狀態(tài)可以包括數據處理狀態(tài)和數據存儲狀態(tài)。數據處理狀態(tài)是指將數據隊列中的數據讀取出來并寫入到數據庫中;數據存儲狀態(tài)是指將數據寫入到數據隊列,例如將接收的數據寫入到數據隊列。
具體的,可以通過隊列狀態(tài)獲取命令來獲取數據隊列的隊列狀態(tài),從獲取的隊列狀態(tài)中選出數據處理狀態(tài)的數據隊列。由于數據的寫入速度通常比數據的讀取速度慢,另外數據的寫入經常是間斷性的,而數據的讀取則是可以連續(xù)的,因此在數據量一致的情況下,讀取緩存區(qū)的數據比向緩存區(qū)存儲數據所花的時間會少一些,這樣還能避免出現(xiàn)緩存區(qū)中數據過多而導致空間不足的情形。因此本發(fā)明方案中,先確定數據處理狀態(tài)的數據隊列,這樣數據處理的效果會更好。因此,通過先確定數據處理狀態(tài)的數據隊列,然后即可對該數據隊列中的數據進行處理,處理完成之后,再將數據隊列的狀態(tài)進行切換。
例如,現(xiàn)在存在兩個數據隊列,一個數據隊列a和一個數據隊列b,由于該方案中,既要有隊列狀態(tài)為數據處理狀態(tài)的數據隊列,又要有隊列狀態(tài)為數據存儲狀態(tài)的數據隊列,由于在雙數據隊列方案中,一個數據隊列是數據存儲,另一個數據隊列是數據讀取,因此,在確定數據隊列b的隊列狀態(tài)為數據存儲狀態(tài)的時候,數據隊列a的隊列狀態(tài)也就能確定是數據處理狀態(tài),反之亦然。
在步驟s230中,針對數據處理狀態(tài)的數據隊列中的數據,按照處理次序依次對數據進行處理。
其中,處理次序是指數據的處理依據一定的順序,可以是根據數據的存儲或者寫入順序等,按照一定的處理次序對數據進行處理能有效提高數據的安全性和完整性。經過步驟s210確定數據處理狀態(tài)的數據隊列后,針對該數據隊列中的數據,按照處理次序依次對該數據進行處理,即將該數據隊列中的數據按照一定的先后順序進行讀取。
例如,數據隊列a的隊列狀態(tài)是數據處理狀態(tài),里面的數據c、數據d、數據e寫入的順序首先是數據c,然后是數據d,最后是數據e。那么針對該數據隊列a中的數據c、數據d、數據e,可以按照寫入的先后順序來進行讀取,即首先是數據c,然后是數據d,最后是數據e,也可以采用后寫入的數據先讀取,即首先是數據e,然后是數據d,最后是數據c,當然還可以采用其它的處理方式來讀取,比如說按照數據隊列中數據的存儲位置等。
在步驟s250中,在數據處理狀態(tài)的數據隊列中的數據全部處理完畢后,對數據隊列進行隊列狀態(tài)切換。
其中,數據全部處理完畢是指將數據處理狀態(tài)的數據隊列中的數據全部讀取并存入到數據庫中。例如將前述例子中的數據c、數據d、數據e全部處理完畢,即將數據c、數據d、數據e全部讀取并存入到數據庫中。
通過如上所述的方法,根據數據隊列的隊列狀態(tài)確定隊列狀態(tài)為數據處理狀態(tài)的數據隊列,然后將該隊列中的數據按照次序依次進行處理,在該隊列中的數據全部處理完畢后,將數據隊列進行狀態(tài)切換,由此,實現(xiàn)了同時對緩存區(qū)執(zhí)行數據存儲和數據讀取的操作,提高了數據處理的實時性,有效的提高了數據異步處理的效率。
圖3是根據另一示例性實施例示出的一種數據異步處理方法的流程圖。在步驟s230之前,還可以包括以下步驟。
在步驟s226中,接收針對數據處理狀態(tài)的數據隊列的數據讀取指令。
其中,數據讀取指令是指執(zhí)行數據讀取操作的指令,通過執(zhí)行該指令來獲取數據處理狀態(tài)的數據隊列中的數據。
在步驟s228中,根據數據讀取指令,獲取數據處理狀態(tài)的數據隊列中的數據。
按照處理次序依次對該數據隊列中的數據進行處理,即將該數據隊列中的數據按照一定的先后順序進行讀取。
例如,當前數據隊列a的隊列狀態(tài)是數據處理狀態(tài),數據隊列a里的數據c、數據d、數據e寫入的順序首先是數據c,然后是數據d,最后是數據e。那么針對該數據隊列a中的數據c、數據d、數據e,可以按照寫入的先后順序來進行讀取,即首先是數據c,然后是數據d,最后是數據e,也可以采用后寫入的數據先讀取,即首先是數據e,然后是數據d,最后是數據c,當然還可以采用其它的處理方式來讀取,比如說按照數據隊列中數據的存儲位置等。
通過如上所述的方法,通過執(zhí)行數據讀取操作的指令來獲取數據處理狀態(tài)的數據隊列中的數據,按照處理次序依次對該數據隊列中的數據進行處理,為實現(xiàn)數據處理的實時性和提高數據處理的效率提供了方便。
圖4是對應圖2中實施例示出的對步驟s250的細節(jié)的描述。該s250步驟可以包括以下步驟。
在步驟s251中,按照預置的時間間隔監(jiān)聽數據處理狀態(tài)的數據隊列的處理結果。
其中,預置的時間間隔是指時間間隔是預先設定的。由于數據隊列中的數據處理的情況瞬間變化,所以預先設置的時間間隔不能過大,否則就可能失去了監(jiān)聽的效果。例如預先設置時間間隔為5秒,即說每隔5秒鐘就對數據處理狀態(tài)的數據隊列的處理結果監(jiān)聽一次。處理結果是指數據處理狀態(tài)的數據隊列中的數據是否已經處理完成,如果該數據全部被讀取并存入數據庫中,則說明數據已經處理完成,否則,說明數據還未處理完成。
在步驟s253中,根據處理結果對數據隊列進行隊列狀態(tài)切換。
其中,狀態(tài)切換是指,將原本為數據處理狀態(tài)的數據隊列切換為數據存儲狀態(tài),將原本為數據存儲狀態(tài)的數據隊列切換為數據處理狀態(tài)。即根據步驟s251中監(jiān)聽到的對數據處理狀態(tài)的數據隊列的處理結果,對數據隊列進行隊列狀態(tài)切換。
通過如上所述的方法,根據預先設定的時間間隔,對數據處理狀態(tài)的數據隊列的處理結果進行監(jiān)聽,進而根據監(jiān)聽到處理結果對數據隊列進行隊列狀態(tài)切換,可以預設較小的時間間隔進行監(jiān)聽,由此,提高了數據處理的實時性,有效提高了數據處理的效率。
在另一個示例性實施例示出的數據異步處理方法中,與前述實施例示出的另一種對步驟s250的細節(jié)的描述,該s250步驟可以包括以下步驟。
接收數據處理狀態(tài)的數據隊列的處理結果并根據處理結果對數據隊列進行隊列狀態(tài)切換。
其中,數據處理狀態(tài)的數據隊列中的數據處理完成后,會將處理結果發(fā)送給數據處理模塊,數據處理模塊接收到該處理結果,對該數據隊列進行隊列狀態(tài)切換。
例如,圖6中的數據隊列b中的數據處理完成后,將處理結果發(fā)送給數據處理模塊,然后根據該處理結果將該數據隊列b的隊列狀態(tài)切換為數據存儲狀態(tài)。
通過如上所述的方法,當數據處理狀態(tài)的數據隊列中的數據處理完成時,會發(fā)送相應的處理結果,數據處理模塊根據接收的處理結果直接對該數據隊列進行狀態(tài)切換,由此,進一步提高了數據處理的實時性,有效提高了數據處理的效率。
圖5是對應圖4中實施例的對步驟s253的一種具體實現(xiàn)流程圖。該步驟s253可以包括以下步驟。
在步驟s2531中,判斷處理結果是否完成,若為是,則向數據存儲狀態(tài)的數據隊列發(fā)送數據存儲停止命令。
其中,數據存儲停止命令是指不向數據存儲狀態(tài)的數據隊列中存入或寫入任何數據的命令。先判斷數據處理狀態(tài)的數據隊列的處理結果是否已經處理完成,即數據是否全部讀取并存入或寫入到數據庫中,如果沒有完成,則繼續(xù)讀取數據并存入數據庫中,如果是已完成,則代表數據處理狀態(tài)的數據隊列中的數據已全部處理完畢,為了減少數據隊列在切換狀態(tài)過程中發(fā)送數據錯誤,此時,向數據存儲狀態(tài)的數據隊列發(fā)送數據存儲停止命令,即暫停數據存儲狀態(tài)的數據隊列的數據存入或寫入操作。由于對數據隊列進行狀態(tài)切換所需時間非常少,因此該暫停所需的時間是非常短暫的,對數據處理的實時性影響也是很有限的。
在步驟s2533中,接收數據存儲狀態(tài)的數據隊列響應數據存儲停止命令返回的消息。
其中,消息是指數據存儲狀態(tài)的數據隊列響應數據存儲停止命令而返回的信息,用于上報當前數據存儲狀態(tài)的數據隊列是否在執(zhí)行存入或寫入操作的狀態(tài),通過步驟s2531向數據存儲狀態(tài)的數據隊列發(fā)送數據存儲停止命令之后,如果該命令被成功執(zhí)行,則說明該數據隊列暫時進入不可執(zhí)行數據寫入或存入操作的狀態(tài)。數據存儲狀態(tài)的數據隊列在收到數據存儲停止命令后,會根據該數據存儲停止命令停止執(zhí)行任何數據的存入或寫入操作,并對該數據存儲停止命令進行響應,返回確認消息或者停止失敗消息,確認消息是指數據的存入或寫入操作已經停止,停止失敗消息是指依然在執(zhí)行任何數據的存入或寫入操作。
在步驟s2535中,根據消息對數據隊列進行隊列狀態(tài)切換。
如果通過步驟s2533中接收到的消息是停止失敗的消息,那么繼續(xù)接收數據存儲狀態(tài)的數據隊列響應命令返回的消息,直到成功停止任何數據的存入或寫入操作,即直到接收到確認停止的消息。
通過如上所述的方法,根據數據處理狀態(tài)的數據隊列的處理結果,確定數據存儲狀態(tài)的數據隊列中的數據存入或寫入操作是否應當停止,然后根據數據存入或寫入操作返回的是否確認停止的消息,最后根據該消息來確定隊列狀態(tài)是否進行切換。由此,減少了數據發(fā)生錯誤的概率,從而提高了數據處理的效率。
在另一個示例性實施例示出的數據異步處理方法中,步驟s2535,該方法還包括以下步驟。
判斷消息是否為確認消息,若為是,則將數據處理狀態(tài)的數據隊列的隊列狀態(tài)切換為數據存儲狀態(tài),將數據存儲狀態(tài)的數據隊列的隊列狀態(tài)切換為數據處理狀態(tài)。
其中,確認消息是指根據數據存入或寫入操作已經停止所返回的消息,即說明已經成功停止任何數據的存入或寫入操作。因此,可以將數據處理狀態(tài)的數據隊列的隊列狀態(tài)切換為數據存儲狀態(tài),將數據存儲狀態(tài)的數據隊列的隊列狀態(tài)切換為數據處理狀態(tài)。進一步的,可以在數據處理狀態(tài)的數據隊列的處理結果未已完成的時候將該隊列進行清空,也可以在數據處理的過程中將該隊列進行清空,還可以在進行狀態(tài)切換前或者切換后將該隊列進行清空,以及其他可以實現(xiàn)該隊列進行清空的方式。
數據隊列的隊列狀態(tài)切換后,原來供讀取數據的數據隊列變成了存儲數據的數據隊列,原來供存儲數據的數據隊列變成了讀取數據的數據隊列。
例如,數據隊列b的隊列狀態(tài)為數據存儲狀態(tài),那么數據隊列a的隊列狀態(tài)就是數據處理狀態(tài),那么在狀態(tài)切換后的情況為,數據隊列a的隊列狀態(tài)為數據存儲狀態(tài),數據隊列b的隊列狀態(tài)是數據處理狀態(tài)。
圖6是根據一示例性實施例示出的一種數據異步處理示意圖。下面對數據異步處理進行一個示例性描述。
具體的,如圖6所示,例如,此時數據隊列a和數據隊列b中均無任何數據,數據隊列a的隊列狀態(tài)為數據存儲狀態(tài),數據隊列b的隊列狀態(tài)是數據處理狀態(tài),數據接收模塊331接收到數據后,調用隊列獲取模塊332,確認可以向數據隊列a中放入數據后,數據接收模塊331將數據h1,h2存入數據隊列a中,如果數據隊列b收到隊列切換模塊333的狀態(tài)切換命令,則先停止數據隊列a的數據存入操作,然后將數據隊列b的隊列狀態(tài)切換為數據存儲狀態(tài),數據隊列a的隊列狀態(tài)切換為數據處理狀態(tài)。
圖7是根據一示例性實施例示出的增加一個服務提供方的數據異步處理示意圖。
具體的,如圖7所示,繼續(xù)圖6中的例子,此時數據隊列a中有數據h1,h2,數據隊列b中無任何數據,數據隊列b的隊列狀態(tài)為數據存儲狀態(tài),數據隊列a的隊列狀態(tài)是數據處理狀態(tài),此時,數據處理模塊334能將數據隊列a中的數據h1,h2讀取并存入到數據庫335中直到該數據h1,h2都被處理完畢,數據接收模塊331可以將其它的數據,如數據h3,h4,h5存入到數據隊列b中,當數據隊列a中的數據h1,h2都被處理完畢時,隊列切換模塊333會再次將數據隊列a和數據隊列b的隊列狀態(tài)進行切換。即將數據隊列a的隊列狀態(tài)切換為數據存儲狀態(tài),數據隊列b的隊列狀態(tài)切換為數據處理狀態(tài)。
通過根據圖6和圖7的描述的方法,該方案實現(xiàn)了數據隊列同時執(zhí)行數據存儲和數據讀取操作,提高了數據處理的實時性,有效提高了數據處理的效率。
下述為本發(fā)明裝置實施例,可以用于執(zhí)行本發(fā)明上述數據異步處理方法實施例。對于本發(fā)明裝置實施例中未披露的細節(jié),請參照本發(fā)明數據異步處理方法實施例。
圖8是根據一示例性實施例示出的一種數據異步處理裝置的框圖。該數據異步處理裝置400,如圖8所示,可以包括但不限于:確定模塊410,處理模塊430和切換模塊450。
確定模塊410,用于根據數據隊列的隊列狀態(tài),在各數據隊列中確定數據處理狀態(tài)的數據隊列,數據隊列的隊列狀態(tài)包括數據處理狀態(tài)和數據存儲狀態(tài)。
處理模塊430,用于針對數據處理狀態(tài)的數據隊列中的數據,按照處理次序依次對所述數據進行處理。
切換模塊450,用于在數據處理狀態(tài)的數據隊列中的數據全部處理完畢后,對數據隊列進行隊列狀態(tài)切換。
上述數據異步處理裝置中各個模塊的功能和作用的實現(xiàn)過程具體詳見上述數據異步處理方法中對應步驟的實現(xiàn)過程,在此不再贅述。
在另一個示例性實施例中,該數據異步處理裝置400,如圖9所示,還可以包括但不限于:接收模塊426和獲取模塊428。
接收模塊426,用于接收針對所述數據處理狀態(tài)的數據隊列的數據讀取指令。
獲取模塊428,用于根據所述數據讀取指令,獲取所述數據處理狀態(tài)的數據隊列中的數據。
圖10是圖8對應實施例示出的切換模塊的細節(jié)進行描述的框圖。該切換模塊450,如圖10所示,可以包括但不限于:監(jiān)聽子模塊451和切換子模塊453。
監(jiān)聽子模塊451,用于按照預置的時間間隔監(jiān)聽所述數據處理狀態(tài)的數據隊列的處理結果。
切換子模塊453,用于根據所述處理結果對數據隊列進行隊列狀態(tài)切換。
在另一個示例性實施例中,該切換模塊450,可以包括但不限于:接收子模塊。
該接收子模塊用于接收數據處理狀態(tài)的數據隊列的處理結果并根據處理結果對數據隊列進行隊列狀態(tài)切換。
圖11是圖10對應實施例示出的切換子模塊的細節(jié)進行描述的框圖。該切換子模塊453,如圖11所示,可以包括但不限于:判斷單元4531,接收單元4533和切換單元4535。
判斷單元4531,用于判斷處理結果是否完成,若為是,則向數據存儲狀態(tài)的數據隊列發(fā)送數據存儲停止命令。
接收單元4533,用于接收數據存儲狀態(tài)的數據隊列響應數據存儲停止命令返回的消息。
切換單元4535,用于根據消息對數據隊列進行隊列狀態(tài)切換。
在另一個示例性實施例中,該切換單元4535,可以包括但不限于:切換子單元。
該切換子單元用于判斷消息是否為確認消息,若為是,則將數據處理狀態(tài)的數據隊列的隊列狀態(tài)切換為數據存儲狀態(tài),將數據存儲狀態(tài)的數據隊列的隊列狀態(tài)切換為數據處理狀態(tài)。
應當理解的是,本發(fā)明并不局限于上面已經描述并在附圖中示出的精確結構,并且可以在不脫離其范圍執(zhí)行各種修改和改變。本發(fā)明的范圍僅由所附的權利要求來限制。