數(shù)據(jù)處理方法及裝置制造方法
【專利摘要】本發(fā)明提供一種數(shù)據(jù)處理方法及裝置,所述方法包括以下步驟:同步接收數(shù)據(jù)更新請求以及數(shù)據(jù)處理請求,所述數(shù)據(jù)更新請求用于將待寫入數(shù)據(jù)替換待刪除數(shù)據(jù);所述數(shù)據(jù)處理請求用于對所述待刪除數(shù)據(jù)進行相應(yīng)的處理;將待寫入數(shù)據(jù)存儲至第一存儲空間;將待刪除數(shù)據(jù)存儲至第二存儲空間;判斷符合釋放條件的數(shù)據(jù)處理請求是否執(zhí)行完畢;若符合釋放條件的數(shù)據(jù)處理請求執(zhí)行完畢,則將所述第二存儲空間的待刪除數(shù)據(jù)釋放。本發(fā)明采用延遲釋放內(nèi)存的方式,處理更新線程和讀寫線程同步的問題,占用內(nèi)存少,處理效率高。
【專利說明】數(shù)據(jù)處理方法及裝置
【【技術(shù)領(lǐng)域】】
[0001]本發(fā)明涉及數(shù)據(jù)處理【技術(shù)領(lǐng)域】,特別是涉及一種數(shù)據(jù)處理方法及裝置。
【【背景技術(shù)】】
[0002]全內(nèi)存索引廣泛運用于需要實時更新的信息檢索系統(tǒng),如搜索廣告播放系統(tǒng)、實時搜索等。其中索引的數(shù)據(jù)結(jié)構(gòu)決定著索引的數(shù)據(jù)更新方式和檢索方式。為了提升服務(wù)并發(fā)性能,全內(nèi)存索引運行在多核多線程環(huán)境下,即由一個更新線程更新索引,同時多個讀線程讀取索引。
[0003]現(xiàn)有技術(shù)中,主要存在以下幾種索引方式:
[0004]第一、阻塞型同步索引;當(dāng)讀線程或者寫線程需要訪問更新索引時,因另外一個線程已經(jīng)持有訪問該共享數(shù)據(jù)的鎖,因此不能獲取鎖資源而阻塞,直到另外一個線程釋放鎖。該方式極易造成死鎖(deadlock),活鎖(Iivelock)和優(yōu)先級反轉(zhuǎn)(priority inversion)以及效率低下等問題。
[0005]第二、免鎖結(jié)構(gòu)索引;利用指針切換的原子性,在內(nèi)存中維護兩份內(nèi)存緩沖(buffer):讀緩沖和寫緩沖,并通過一指針標示當(dāng)前執(zhí)行的為讀緩沖還是寫緩沖。譬如當(dāng)更新線程將寫緩沖更新完畢后,切換至讀緩沖進行讀寫。但是該方式由于使用雙緩沖,造成內(nèi)存的浪費,而且索引數(shù)據(jù)本來就占用大量內(nèi)存,如果用雙緩沖,內(nèi)存占用增加一倍。
[0006]綜上,需要解決現(xiàn)有技術(shù)`中,在更新線程和讀寫線程同步時,占用內(nèi)存空間大,以及處理效率低下的技術(shù)問題。
【
【發(fā)明內(nèi)容】
】
[0007]本發(fā)明的一個目的在于提供一種數(shù)據(jù)處理方法,旨在解決現(xiàn)有技術(shù)在更新線程和讀寫線程同步時,占用內(nèi)存空間大,以及處理效率低下的技術(shù)問題。
[0008]為解決上述技術(shù)問題,本發(fā)明構(gòu)造了一種數(shù)據(jù)處理方法,:所述方法包括以下步驟:
[0009]同步接收數(shù)據(jù)更新請求以及數(shù)據(jù)處理請求,所述數(shù)據(jù)更新請求用于將待寫入數(shù)據(jù)替換待刪除數(shù)據(jù);所述數(shù)據(jù)處理請求用于對所述待刪除數(shù)據(jù)進行相應(yīng)的處理;
[0010]將待寫入數(shù)據(jù)存儲至第一存儲空間;
[0011]將待刪除數(shù)據(jù)存儲至第二存儲空間;
[0012]判斷符合釋放條件的數(shù)據(jù)處理請求是否執(zhí)行完畢;
[0013]若符合釋放條件的數(shù)據(jù)處理請求執(zhí)行完畢,則將所述第二存儲空間的待刪除數(shù)據(jù)釋放。
[0014]在本發(fā)明一實施例中:同步接收數(shù)據(jù)更新請求以及數(shù)據(jù)處理請求之前,所述方法還包括以下步驟:
[0015]預(yù)先設(shè)置內(nèi)存索引,所述內(nèi)存索引包括第一索引空間以及第二索引空間;
[0016]所述第一索引空間用于存儲待寫入數(shù)據(jù)的指針;[0017]所述第二索引空間用于存儲待刪除數(shù)據(jù)索引。
[0018]在本發(fā)明一實施例中:將待刪除數(shù)據(jù)存儲至第二存儲空間時,所述方法還包括以下步驟:
[0019]在所述第一索引空間中將所述待寫入數(shù)據(jù)指針替換待刪除數(shù)據(jù)指針;
[0020]將所述待刪除數(shù)據(jù)索引存儲至所述第二索引空間。
[0021]在本發(fā)明一實施例中:判斷符合釋放條件的數(shù)據(jù)處理請求是否執(zhí)行完畢的步驟具體包括:
[0022]在接收到數(shù)據(jù)處理請求時,獲取對應(yīng)該數(shù)據(jù)處理請求的第一時間標識;
[0023]在所述第一索引空間中將所述待寫入數(shù)據(jù)指針替換待刪除數(shù)據(jù)指針時,獲取第二時間標識;
[0024]若所述第二時間標識早于所有的第一時間標識,且所述第一時間標識對應(yīng)的數(shù)據(jù)處理請求執(zhí)行完畢,則將所述數(shù)據(jù)處理請求對應(yīng)的待刪除數(shù)據(jù)釋放。
[0025]在本發(fā)明一實施例中:所述內(nèi)存索引還包括第三索引空間,所述第三索引空間用于存儲當(dāng)前正在運行的數(shù)據(jù)更新請求的時間標識。
[0026]本發(fā)明的一個目的在于提供一種數(shù)據(jù)處理裝置,旨在解決現(xiàn)有技術(shù)在更新線程和讀寫線程同步時,占用內(nèi)存空間大,以及處理效率低下的技術(shù)問題。
[0027]為解決上述技術(shù)問題,本發(fā)明構(gòu)造了一種數(shù)據(jù)處理裝置,所述裝置包括:
[0028]請求接收模塊,用于同步接收數(shù)據(jù)更新請求以及數(shù)據(jù)處理請求,其中所述數(shù)據(jù)更新請求用于將待寫入數(shù)據(jù)替換待刪除數(shù)據(jù);所述數(shù)據(jù)處理請求用于對所述待刪除數(shù)據(jù)進行相應(yīng)的處理;
[0029]數(shù)據(jù)存儲模塊,用于將待寫入數(shù)據(jù)存儲至第一存儲空間;以及將待刪除數(shù)據(jù)存儲至第二存儲空間;
[0030]判斷模塊,用于判斷符合釋放條件的數(shù)據(jù)處理請求是否執(zhí)行完畢;
[0031]數(shù)據(jù)釋放模塊,用于在所述判斷模塊判斷符合釋放條件的數(shù)據(jù)處理請求執(zhí)行完畢時,將所述第二存儲空間的待刪除數(shù)據(jù)釋放。
[0032]在本發(fā)明一實施例中:所述裝置還包括:
[0033]設(shè)置模塊,用于預(yù)先設(shè)置內(nèi)存索引,所述內(nèi)存索引包括第一索引空間以及第二索引空間;所述第一索引空間用于存儲待寫入數(shù)據(jù)的指針;所述第二索引空間用于存儲待刪除數(shù)據(jù)索引。
[0034]在本發(fā)明一實施例中:所述裝置還包括:
[0035]控制模塊,用于在所述第一索引空間中將所述待寫入數(shù)據(jù)指針替換待刪除數(shù)據(jù)指針,并將所述待刪除數(shù)據(jù)索引存儲至所述第二索引空間。
[0036]在本發(fā)明一實施例中:所述裝置還包括:
[0037]時間標識獲取模塊,用于在接收到數(shù)據(jù)處理請求時,獲取對應(yīng)該數(shù)據(jù)處理請求的第一時間標識;以及在所述第一索引空間中將所述待寫入數(shù)據(jù)指針替換待刪除數(shù)據(jù)指針時,獲取第二時間標識;
[0038]所述數(shù)據(jù)釋放模塊,還用于在所述第二時間標識早于所有的第一時間標識,且所述第一時間標識對應(yīng)的數(shù)據(jù)處理請求執(zhí)行完畢時,將所述數(shù)據(jù)處理請求對應(yīng)的待刪除數(shù)據(jù)釋放。[0039]在本發(fā)明一實施例中:所述內(nèi)存索引還包括第三索引空間,所述第三索引空間用于存儲當(dāng)前正在運行的數(shù)據(jù)更新請求的時間標識。
[0040]相對于現(xiàn)有技術(shù),本發(fā)明采用延遲釋放待刪除數(shù)據(jù)的方式,處理更新線程和讀寫線程同步的問題,即在同時接收到數(shù)據(jù)更新請求和數(shù)據(jù)處理請求時,先申請第一存儲單元用于存儲待寫入數(shù)據(jù),并將待刪除數(shù)據(jù)存儲至第二存儲單元,知道符合釋放條件的數(shù)據(jù)處理請求都執(zhí)行完畢后,才將第二存儲單元內(nèi)的待刪除數(shù)據(jù)釋放,整個過程無需加鎖,而且占用內(nèi)存小,處理效率高。
[0041]為讓本發(fā)明的上述內(nèi)容能更明顯易懂,下文特舉優(yōu)選實施例,并配合所附圖式,作詳細說明如下:
【【專利附圖】
【附圖說明】】
[0042]圖1為本發(fā)明提供的數(shù)據(jù)處理方法的較佳實施例流程示意圖;
[0043]圖2為本發(fā)明中內(nèi)存索引的較佳實施例結(jié)構(gòu)示意圖;
[0044]圖3為本發(fā)明提供的數(shù)據(jù)處理裝置的較佳實施例結(jié)構(gòu)示意圖。
【【具體實施方式】】
[0045]以下各實施例的說明是參考附加的圖式,用以例示本發(fā)明可用以實施的特定實施例。本發(fā)明所提到的方向用語,例如「上」、「下」、「前」、「后」、「左」、「右」、「內(nèi)」、「外」、「側(cè)面」等,僅是參考附加圖式的方向。因此,使用的方向用語是用以說明及理解本發(fā)明,而非用以限制本發(fā)明。在圖中,結(jié)構(gòu)相似的單元是以相同標號表示。
[0046]請參閱圖1,圖1為本發(fā)明提供的數(shù)據(jù)處理方法的較佳實施例流程示意圖。
[0047]在步驟SlOl中,同步接收數(shù)據(jù)更新請求以及數(shù)據(jù)處理請求。
[0048]其中所述數(shù)據(jù)更新請求用于將待寫入數(shù)據(jù)替換待刪除數(shù)據(jù),即進行數(shù)據(jù)的更新。而所述數(shù)據(jù)處理請求用于對所述待刪除數(shù)據(jù)進行相應(yīng)的處理,譬如對待刪除數(shù)據(jù)進行讀寫處理等。本發(fā)明主要用于處理更新線程和讀寫線程同步的問題,因此該步驟SlOl中的數(shù)據(jù)更新請求和數(shù)據(jù)處理請求同步接收。
[0049]在步驟S102中,將待寫入數(shù)據(jù)存儲至第一存儲空間。
[0050]該步驟即在更新數(shù)據(jù)時,首先申請第一存儲空間,將待寫入數(shù)據(jù)寫入該第一存儲空間。
[0051]在步驟S103中,在預(yù)先設(shè)置的內(nèi)存索引中將待寫入數(shù)據(jù)指針替換待刪除數(shù)據(jù)指針。
[0052]在具體實施過程中,本發(fā)明預(yù)設(shè)一內(nèi)存索引,譬如請參閱圖2,圖2為本發(fā)明提供的內(nèi)存索引的較佳實施例結(jié)構(gòu)示意圖,該內(nèi)存索引包括第一索引空間21、第二索引空間22以及第三索引空間23。
[0053]所述第一索引空間21用于存儲待寫入數(shù)據(jù)的指針;所述第二索引空間22用于存儲待刪除索引數(shù)據(jù)索引,每條待刪除數(shù)據(jù)索引包括有數(shù)據(jù)內(nèi)存指針及該待刪除索引數(shù)據(jù)加入所述第二索引空間22的時間標識。所述第三索引空間23用于存儲當(dāng)前正在運行的數(shù)據(jù)更新請求的時間標識。
[0054]在步驟S104中,將待刪除數(shù)據(jù)存儲至第二存儲空間。[0055]在具體實施過程中,同時還將待刪除數(shù)據(jù)索引寫入第二索引空間22,并記錄當(dāng)前時間標識(譬如時間戳)到該待刪除數(shù)據(jù)索引。
[0056]在步驟S105中,判斷符合釋放條件的數(shù)據(jù)處理請求是否執(zhí)行完畢,若是,則進行步驟S106,否則繼續(xù)進行該判斷步驟S105。
[0057]在具體實施過程中,在接收到數(shù)據(jù)處理請求時,記錄對應(yīng)該數(shù)據(jù)處理請求的第一時間標識。在將待刪除數(shù)據(jù)存儲至第二存儲空間時,記錄待刪除數(shù)據(jù)存儲至所述第二存儲空間的第二時間標識。之后判斷所述第二時間標識是否早于所有的第一時間標識,若所述第二時間標識早于所有的第一時間標識,且所述第一時間標識對應(yīng)的數(shù)據(jù)處理請求執(zhí)行完畢,則將所述數(shù)據(jù)處理請求對應(yīng)的待刪除數(shù)據(jù)釋放。
[0058]除了上述的釋放條件外,還可以有其它的釋放條件,譬如在所述第三索引空間23中獲取最早進入檢索請求的時間標識,這個該時間標識之前的待刪除數(shù)據(jù)全部回收。
[0059]在步驟S106中,將所述第二存儲空間內(nèi)相應(yīng)的待刪除數(shù)據(jù)釋放。
[0060]在具體實施過程中,本發(fā)明提供的數(shù)據(jù)處理方法還包括有檢索的步驟,具體包括:發(fā)送檢索請求到所述第三索引空間23進行注冊,其中注冊的時間包含該檢索請求的時間標識(時間戳),在所述檢索請求執(zhí)行完畢后,在所述第三索引空間23注消。
[0061]請參閱圖3,圖3為本發(fā)明提供的數(shù)據(jù)處理裝置的較佳實施例結(jié)構(gòu)示意圖,所述裝置包括設(shè)置模塊31、請求接收模塊32、數(shù)據(jù)存儲模塊33、控制模塊34、時間標識獲取模塊35、判斷模塊36以及數(shù)據(jù)釋放模塊37。
[0062]所述設(shè)置模塊31預(yù)先設(shè)置內(nèi)存索引,具體請參閱圖2,所述內(nèi)存索引包括第一索引空21、第二索引空間22以及第三索引空間23 ;所述第一索引空間21用于存儲待寫入數(shù)據(jù)的指針;所述第二索引空間22用于存儲待刪除數(shù)據(jù)索引。所述第三索引空間23用于存儲當(dāng)前正在運行的數(shù)據(jù)更新請求的時間標識。
[0063]所述請求接收模塊32同步接收數(shù)據(jù)更新請求以及數(shù)據(jù)處理請求,其中所述數(shù)據(jù)更新請求用于將待寫入數(shù)據(jù)替換待刪除數(shù)據(jù);而所述數(shù)據(jù)處理請求用于對所述待刪除數(shù)據(jù)進行相應(yīng)的處理。
[0064]所述數(shù)據(jù)存儲模塊33將待寫入數(shù)據(jù)存儲至第一存儲空間,并將待刪除數(shù)據(jù)存儲至第二存儲空間。所述控制模塊34在所述內(nèi)存索引的第一索引空間21中將所述待寫入數(shù)據(jù)指針替換待刪除數(shù)據(jù)指針,并將待刪除數(shù)據(jù)索引存儲至所述第二索引空間22。
[0065]所述時間標識獲取模塊35在接收到數(shù)據(jù)處理請求時,獲取對應(yīng)該數(shù)據(jù)處理請求的第一時間標識;在所述內(nèi)存索引的第一索引空間21中將所述待寫入數(shù)據(jù)指針替換待刪除數(shù)據(jù)指針時,獲取第二時間標識。
[0066]所述判斷模塊36判斷符合釋放條件的數(shù)據(jù)處理請求是否執(zhí)行完畢;譬如在所述第二時間標識早于所有的第一時間標識,且所述第一時間標識對應(yīng)的數(shù)據(jù)處理請求執(zhí)行完畢時,判定符合釋放條件的數(shù)據(jù)處理請求執(zhí)行完畢,此時所述數(shù)據(jù)釋放模塊37將所述第二存儲空間的待刪除數(shù)據(jù)釋放。
[0067]關(guān)于所述數(shù)據(jù)處理裝置的具體描述請參閱上文針對數(shù)據(jù)處理方法的較佳實施例的詳細描述,此處不再贅述。
[0068]本發(fā)明采用延遲釋放待刪除數(shù)據(jù)的方式,處理更新線程和讀寫線程同步的問題,即在同時接收到數(shù)據(jù)更新請求和數(shù)據(jù)處理請求時,先申請第一存儲單元用于存儲待寫入數(shù)據(jù),并將待刪除數(shù)據(jù)存儲至第二存儲單元,知道符合釋放條件的數(shù)據(jù)處理請求都執(zhí)行完畢后,才將第二存儲單元內(nèi)的待刪除數(shù)據(jù)釋放,整個過程無需加鎖,而且占用內(nèi)存小,處理效率高。
[0069]綜上所述,雖然本發(fā)明已以優(yōu)選實施例揭露如上,但上述優(yōu)選實施例并非用以限制本發(fā)明,本領(lǐng)域的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),均可作各種更動與潤飾,因此本發(fā)明的保護范圍以權(quán)利要求界定的范圍為準。
【權(quán)利要求】
1.一種數(shù)據(jù)處理方法,其特征在于:所述方法包括以下步驟: 同步接收數(shù)據(jù)更新請求以及數(shù)據(jù)處理請求,所述數(shù)據(jù)更新請求用于將待寫入數(shù)據(jù)替換待刪除數(shù)據(jù);所述數(shù)據(jù)處理請求用于對所述待刪除數(shù)據(jù)進行相應(yīng)的處理; 將待寫入數(shù)據(jù)存儲至第一存儲空間; 將待刪除數(shù)據(jù)存儲至第二存儲空間; 判斷符合釋放條件的數(shù)據(jù)處理請求是否執(zhí)行完畢; 若符合釋放條件的數(shù)據(jù)處理請求執(zhí)行完畢,則將所述第二存儲空間的待刪除數(shù)據(jù)釋放。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于:同步接收數(shù)據(jù)更新請求以及數(shù)據(jù)處理請求之前,所述方法還包括以下步驟: 預(yù)先設(shè)置內(nèi)存索引,所述內(nèi)存索引包括第一索引空間以及第二索引空間; 所述第一索引空間用于存儲待寫入數(shù)據(jù)的指針; 所述第二索引空間用于存儲待刪除數(shù)據(jù)索引。
3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)處理方法,其特征在于:將待刪除數(shù)據(jù)存儲至第二存儲空間時,所述方法還包括以 下步驟: 在所述第一索引空間中將所述待寫入數(shù)據(jù)指針替換待刪除數(shù)據(jù)指針; 將所述待刪除數(shù)據(jù)索引存儲至所述第二索引空間。
4.根據(jù)權(quán)利要求3所述的數(shù)據(jù)處理方法,其特征在于:判斷符合釋放條件的數(shù)據(jù)處理請求是否執(zhí)行完畢的步驟具體包括: 在接收到數(shù)據(jù)處理請求時,獲取對應(yīng)該數(shù)據(jù)處理請求的第一時間標識; 在所述第一索引空間中將所述待寫入數(shù)據(jù)指針替換待刪除數(shù)據(jù)指針時,獲取第二時間標識; 若所述第二時間標識早于所有的第一時間標識,且所述第一時間標識對應(yīng)的數(shù)據(jù)處理請求執(zhí)行完畢,則將所述數(shù)據(jù)處理請求對應(yīng)的待刪除數(shù)據(jù)釋放。
5.根據(jù)權(quán)利要求2所述的數(shù)據(jù)處理方法,其特征在于:所述內(nèi)存索引還包括第三索引空間,所述第三索引空間用于存儲當(dāng)前正在運行的數(shù)據(jù)更新請求的時間標識。
6.一種數(shù)據(jù)處理裝置,其特征在于:所述裝置包括: 請求接收模塊,用于同步接收數(shù)據(jù)更新請求以及數(shù)據(jù)處理請求,其中所述數(shù)據(jù)更新請求用于將待寫入數(shù)據(jù)替換待刪除數(shù)據(jù);所述數(shù)據(jù)處理請求用于對所述待刪除數(shù)據(jù)進行相應(yīng)的處理; 數(shù)據(jù)存儲模塊,用于將待寫入數(shù)據(jù)存儲至第一存儲空間;以及將待刪除數(shù)據(jù)存儲至第二存儲空間; 判斷模塊,用于判斷符合釋放條件的數(shù)據(jù)處理請求是否執(zhí)行完畢; 數(shù)據(jù)釋放模塊,用于在所述判斷模塊判斷符合釋放條件的數(shù)據(jù)處理請求執(zhí)行完畢時,將所述第二存儲空間的待刪除數(shù)據(jù)釋放。
7.根據(jù)權(quán)利要求6所述的數(shù)據(jù)處理裝置,其特征在于:所述裝置還包括: 設(shè)置模塊,用于預(yù)先設(shè)置內(nèi)存索引,所述內(nèi)存索引包括第一索引空間以及第二索引空間;所述第一索引空間用于存儲待寫入數(shù)據(jù)的指針;所述第二索引空間用于存儲待刪除數(shù)據(jù)索引。
8.根據(jù)權(quán)利要求7所述的數(shù)據(jù)處理裝置,其特征在于:所述裝置還包括: 控制模塊,用于在所述第一索引空間中將所述待寫入數(shù)據(jù)指針替換待刪除數(shù)據(jù)指針,并將所述待刪除數(shù)據(jù)索引存儲至所述第二索引空間。
9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)處理裝置,其特征在于:所述裝置還包括: 時間標識獲取模塊,用于在接收到數(shù)據(jù)處理請求時,獲取對應(yīng)該數(shù)據(jù)處理請求的第一時間標識;以及在所述第一索引空間中將所述待寫入數(shù)據(jù)指針替換待刪除數(shù)據(jù)指針時,獲取第二時間標識; 所述數(shù)據(jù)釋放模塊,還用于在所述第二時間標識早于所有的第一時間標識,且所述第一時間標識對應(yīng)的數(shù)據(jù)處理請求執(zhí)行完畢時,將所述數(shù)據(jù)處理請求對應(yīng)的待刪除數(shù)據(jù)釋放。
10.根據(jù)權(quán)利要求7所述的數(shù)據(jù)處理裝置,其特征在于:所述內(nèi)存索引還包括第三索引空間,所述第三索引空間用于存儲當(dāng)前正在運行的數(shù)據(jù)更新請求的時間標識。
【文檔編號】G06F12/08GK103729304SQ201210384703
【公開日】2014年4月16日 申請日期:2012年10月11日 優(yōu)先權(quán)日:2012年10月11日
【發(fā)明者】樊華 申請人:騰訊科技(深圳)有限公司