專利名稱:數(shù)據(jù)更新及查詢控制方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,具體涉及一種數(shù)據(jù)更新及查詢控制方法及系統(tǒng)。
背景技術(shù):
對(duì)于數(shù)據(jù)存儲(chǔ)模塊,保證系統(tǒng)的實(shí)時(shí)性和數(shù)據(jù)的準(zhǔn)確性一直是比較關(guān)鍵的問題。 現(xiàn)有業(yè)務(wù)中考慮到穩(wěn)定性和數(shù)據(jù)準(zhǔn)確性問題,很多系統(tǒng)都依賴于數(shù)據(jù)庫(kù)嚴(yán)品。一般而言,一 個(gè)系統(tǒng)單獨(dú)的提供查詢或者單獨(dú)提供更新都不會(huì)存在太大問題,但如果某個(gè)單獨(dú)的系統(tǒng)在 查詢并發(fā)量很大的情況下還要處理大量同步更新,那么就會(huì)出現(xiàn)查詢實(shí)時(shí)性、更新即時(shí)性 問題。同時(shí),數(shù)據(jù)庫(kù)針對(duì)通用性考慮的較多導(dǎo)致效率損失較大,且面對(duì)大量更新時(shí)磁盤隨機(jī) I/O壓力較大,隨著數(shù)據(jù)規(guī)模的增長(zhǎng),已經(jīng)難以滿足應(yīng)用對(duì)性能的要求。目前大多都采用升 級(jí)硬件來(lái)提高性能,導(dǎo)致成本很高。此外,傳統(tǒng)數(shù)據(jù)庫(kù)為了保障數(shù)據(jù)查詢的快速,對(duì)于新增 的數(shù)據(jù)會(huì)采用直接保存到磁盤對(duì)應(yīng)位置的方法,由于多是隨機(jī)存儲(chǔ)所以帶來(lái)很高的磁盤I/ 0壓力,為此程序在很多情況下不可能采用直接寫盤的操作,基本都是通過(guò)系統(tǒng)級(jí)緩存來(lái)保 存新更新的數(shù)據(jù),最終由系統(tǒng)的磁盤調(diào)度策略來(lái)寫盤。當(dāng)系統(tǒng)斷電、死機(jī)就難以避免的會(huì)產(chǎn) 生最新的某些數(shù)據(jù)丟失,最終導(dǎo)致數(shù)據(jù)準(zhǔn)確性受影響。再有這種大量的隨機(jī)I/O也會(huì)影響 系統(tǒng)的整體表現(xiàn)?,F(xiàn)有寬帶服務(wù)開通的技術(shù)有如下不足現(xiàn)有技術(shù)僅有一個(gè)內(nèi)存區(qū)和一個(gè)磁盤區(qū), 由一個(gè)系統(tǒng)同時(shí)提供查詢和更新,為了保障沒有沖突,需設(shè)置查詢和更新的鎖策略導(dǎo)致難 以實(shí)現(xiàn)實(shí)時(shí)查詢及更新即時(shí)性問題,且系統(tǒng)復(fù)雜。
發(fā)明內(nèi)容
本發(fā)明的第一目的是提出一種實(shí)時(shí)的數(shù)據(jù)更新及查詢控制方法。本發(fā)明的第二目的是提出一種實(shí)時(shí)的數(shù)據(jù)更新及查詢控制系統(tǒng)。為實(shí)現(xiàn)上述第一目的,本發(fā)明提供了一種數(shù)據(jù)更新及查詢控制方法,包括內(nèi)存區(qū) 將接收的更新數(shù)據(jù)歸并到兩個(gè)硬盤區(qū)中的任意一個(gè),以及在歸并完成后清空自身存儲(chǔ)的更 新數(shù)據(jù);在接收到查詢請(qǐng)求時(shí),將兩個(gè)硬盤區(qū)中未執(zhí)行歸并操作的硬盤區(qū)的數(shù)據(jù)以及內(nèi)存 區(qū)中至少一個(gè)內(nèi)存區(qū)的數(shù)據(jù)返回?cái)?shù)據(jù)查詢方。為實(shí)現(xiàn)上述第二目的,本發(fā)明提供了一種數(shù)據(jù)更新及查詢控制系統(tǒng),包括內(nèi)存 區(qū),用于接收更新數(shù)據(jù);兩個(gè)硬盤區(qū),用于分別執(zhí)行存儲(chǔ)內(nèi)存區(qū)中任一個(gè)的更新數(shù)據(jù)的操 作,以及將自身的數(shù)據(jù)返回至數(shù)據(jù)查詢方的操作;控制模塊,用于控制內(nèi)存區(qū)將自身存儲(chǔ)的 數(shù)據(jù)歸并到兩個(gè)硬盤區(qū)中的任意一個(gè);在歸并完成后,清空內(nèi)存區(qū)中執(zhí)行歸并操作的內(nèi)存 區(qū);控制兩個(gè)硬盤區(qū)中未執(zhí)行歸并操作的硬盤區(qū)以及內(nèi)存區(qū)中至少一個(gè)內(nèi)存區(qū)將數(shù)據(jù)返回 至數(shù)據(jù)查詢方。本發(fā)明各個(gè)實(shí)施例中,通過(guò)利用兩個(gè)硬盤區(qū)分別執(zhí)行更新數(shù)據(jù)的歸并及查詢實(shí)現(xiàn) 將查詢及更新操作分流,避免了現(xiàn)有技術(shù)中需要設(shè)置鎖策略而導(dǎo)致的實(shí)時(shí)性及系統(tǒng)復(fù)雜性 問題。
附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說(shuō)明書的一部分,與本發(fā)明的實(shí) 施例一并用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中圖1為本發(fā)明的數(shù)據(jù)更新及查詢控制方法的實(shí)施例一流程圖;圖2為本發(fā)明的數(shù)據(jù)更新及查詢控制方法的實(shí)施例二示意圖;圖3為本發(fā)明的數(shù)據(jù)更新及查詢控制系統(tǒng)中哈希(Hash)模塊的實(shí)施例示意圖;圖4為本發(fā)明的數(shù)據(jù)更新及查詢控制系統(tǒng)的實(shí)施例結(jié)構(gòu)圖。
具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行說(shuō)明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實(shí) 施例僅用于說(shuō)明和解釋本發(fā)明,并不用于限定本發(fā)明。方法實(shí)施例圖1為本發(fā)明的數(shù)據(jù)更新及查詢控制方法的實(shí)施例一流程圖。如圖1所示,本實(shí) 施例包括步驟S102 內(nèi)存區(qū)接收更新數(shù)據(jù);具體操作過(guò)程參見圖2中第一及第二階段的解 釋說(shuō)明;步驟S104:內(nèi)存區(qū)將接收的更新數(shù)據(jù)歸并到兩個(gè)硬盤區(qū)中的任意一個(gè),以及在歸 并完成后清空自身存儲(chǔ)的數(shù)據(jù);具體操作過(guò)程參見圖2中第二及第三階段的解釋說(shuō)明;步驟S106 在接收到查詢請(qǐng)求時(shí),將兩個(gè)硬盤區(qū)中未執(zhí)行歸并操作的硬盤區(qū)的數(shù) 據(jù)以及內(nèi)存區(qū)中至少一個(gè)內(nèi)存區(qū)的數(shù)據(jù)返回?cái)?shù)據(jù)查詢方;具體操作過(guò)程參見圖2中第一至 第四階段的解釋說(shuō)明。本實(shí)施例通過(guò)利用兩個(gè)硬盤區(qū)分別執(zhí)行更新數(shù)據(jù)的歸并及查詢實(shí)現(xiàn)將查詢及更 新操作分流,避免了現(xiàn)有技術(shù)中需要設(shè)置鎖策略而導(dǎo)致的實(shí)時(shí)性及系統(tǒng)復(fù)雜性問題。圖2為本發(fā)明的數(shù)據(jù)更新及查詢控制方法的實(shí)施例二流程圖,其中,內(nèi)存區(qū)1、2以 及硬盤區(qū)1、2的結(jié)構(gòu)以及位置關(guān)系參見圖4的解釋說(shuō)明。以下主要將以在執(zhí)行過(guò)程中的各 階段的更新與查詢操作進(jìn)行解釋說(shuō)明。如圖2所示,本實(shí)施例包括以下幾個(gè)階段第一階段如圖2中的上圖所示,內(nèi)存區(qū)1、2(即第一內(nèi)存區(qū)及第二內(nèi)存區(qū))中無(wú) 數(shù)據(jù),則由內(nèi)存區(qū)1首先接收更新數(shù)據(jù),當(dāng)有用戶查詢時(shí),若硬盤區(qū)1 (對(duì)應(yīng)于第二硬盤區(qū)) 及硬盤區(qū)2 (對(duì)應(yīng)于第一硬盤區(qū))中的數(shù)據(jù)相同,將內(nèi)存區(qū)1和硬盤區(qū)1的鏈表數(shù)據(jù)做一個(gè) 合并返回給用戶;具體操作時(shí),也可以將硬盤區(qū)2和內(nèi)存區(qū)1的鏈表數(shù)據(jù)做一個(gè)合并返回給用戶;若 兩個(gè)硬盤區(qū)的數(shù)據(jù)不同,可以將硬盤區(qū)1、2及內(nèi)存區(qū)1的鏈表數(shù)據(jù)做一個(gè)合并返回給用戶, 但需要保證硬盤1及2均沒有執(zhí)行更新數(shù)據(jù)的歸并動(dòng)作,也就是說(shuō)要保證每一時(shí)刻更新與 查詢操作由不同的硬盤區(qū)操作以實(shí)現(xiàn)分流;第二階段如圖2中的中圖所示,首先在內(nèi)存區(qū)1滿或者預(yù)設(shè)的歸并時(shí)間已到時(shí), 關(guān)閉對(duì)內(nèi)存區(qū)1的更新,把更新的請(qǐng)求都放到內(nèi)存區(qū)2,即由內(nèi)存區(qū)2接收更新數(shù)據(jù);其次, 歸并線程歸并內(nèi)存區(qū)1和硬盤區(qū)1的數(shù)據(jù)到硬盤區(qū)2 ;最后,在接收到查詢請(qǐng)求時(shí),將內(nèi)存 區(qū)1、內(nèi)存區(qū)2、硬盤區(qū)1的數(shù)據(jù)合并返回給用戶;
需要說(shuō)明的是,具體操作時(shí),也可以直接將內(nèi)存區(qū)1的數(shù)據(jù)歸并硬盤區(qū)1中;在用 戶查詢時(shí)將內(nèi)存區(qū)1、內(nèi)存區(qū)2、硬盤區(qū)2的數(shù)據(jù)做一個(gè)合并返回給用戶;也就是說(shuō),本發(fā)明 的核心思想在于收到更新數(shù)據(jù)時(shí)直接更新內(nèi)存,而非實(shí)時(shí)更新硬盤的數(shù)據(jù),只有當(dāng)某個(gè)內(nèi) 存滿時(shí),才將數(shù)據(jù)歸并到硬盤中,這樣就避免了在高并發(fā)查詢時(shí)存在隨機(jī)I/O更新帶來(lái)的 系統(tǒng)性能損失;具體歸并到哪個(gè)硬盤可以根據(jù)實(shí)際需要而設(shè)置,只需要保證歸并操作對(duì)應(yīng) 的硬盤和返回查詢數(shù)據(jù)的硬盤不是同一硬盤即可,即保證更新數(shù)據(jù)與查詢數(shù)據(jù)完全分流;第三階段如圖2中的下圖所示,當(dāng)內(nèi)存區(qū)1和硬盤區(qū)1歸并到硬盤區(qū)2結(jié)束時(shí), 則清空內(nèi)存區(qū)1 ;此時(shí),將從內(nèi)存區(qū)2和硬盤區(qū)2中的數(shù)據(jù)返回給數(shù)據(jù)查詢方;具體操作時(shí),第三階段還可以包括在歸并完成后或在清空內(nèi)存區(qū)1后,把硬盤區(qū)2的數(shù)據(jù)拷貝給硬盤區(qū)1 ;這個(gè)步驟 保證了硬盤區(qū)1與硬盤區(qū)2中的數(shù)據(jù)同步,也就是說(shuō)在返回?cái)?shù)據(jù)時(shí),只要返回任何一個(gè)硬 盤區(qū)中的數(shù)據(jù)即可,而無(wú)需返回兩個(gè)硬盤區(qū)中最新被更新的硬盤數(shù)據(jù),若無(wú)此步驟,則可以 將歸并完成后的硬盤設(shè)為執(zhí)行數(shù)據(jù)查詢的硬盤,相應(yīng)的另一個(gè)硬盤作為更新操作,這樣兩 個(gè)硬盤的功能切換滿足查詢與更新分流以及查詢正確性的要求,故此步驟為一個(gè)優(yōu)選的步 驟;優(yōu)選地,還可以包括在每次歸并完成后都記錄一個(gè)更新隊(duì)列(被歸并的全部更 新數(shù)據(jù)稱為一個(gè)更新隊(duì)列)的時(shí)間點(diǎn)(即時(shí)間標(biāo)識(shí));此時(shí)間點(diǎn)作為數(shù)據(jù)回放的標(biāo)記,用于 當(dāng)程序異常終止導(dǎo)致內(nèi)存數(shù)據(jù)丟失或死機(jī)斷電帶來(lái)的數(shù)據(jù)丟失時(shí),通過(guò)程序啟動(dòng)時(shí)首先掛 載磁盤數(shù)據(jù),再回放硬盤區(qū)中的更新隊(duì)列,并根據(jù)該時(shí)間點(diǎn)對(duì)應(yīng)的更新請(qǐng)求恢復(fù)內(nèi)存區(qū)中 的數(shù)據(jù),從而避免了內(nèi)存數(shù)據(jù)丟失;相應(yīng)地,此步驟需要各內(nèi)存區(qū)按照先后順序存儲(chǔ)更新數(shù) 據(jù)請(qǐng)求,從而保證硬盤區(qū)中也是按照先后順序存儲(chǔ)更新數(shù)據(jù)請(qǐng)求,這樣,整個(gè)系統(tǒng)就不存在 隨機(jī)磁盤I/O問題,所有的I/O操作都是順序的;第四階段當(dāng)內(nèi)存區(qū)2滿或者預(yù)設(shè)的歸并時(shí)間已到,則停止內(nèi)存區(qū)2的更新,把更 新都發(fā)到內(nèi)存區(qū)1 ;若保證硬盤區(qū)1與硬盤區(qū)2中的數(shù)據(jù)同步,則在用戶查詢數(shù)據(jù)時(shí),將內(nèi) 存區(qū)1及硬盤區(qū)1中的數(shù)據(jù)返回至數(shù)據(jù)查詢放,即回到第一階段,依次循環(huán)執(zhí)行。此外,優(yōu)選地,本實(shí)施例還可以包括在一內(nèi)存區(qū)、第二內(nèi)存區(qū)、第一硬盤區(qū)或第二 硬盤區(qū)的使用率小于預(yù)設(shè)閾值時(shí)(也可以是圖3或圖4中的數(shù)據(jù)更新及查詢控制系統(tǒng)空閑 時(shí)),歸并整理一內(nèi)存區(qū)、第二內(nèi)存區(qū)、第一硬盤區(qū)或第二硬盤區(qū)的數(shù)據(jù)。此步驟通過(guò)定期來(lái) 整理磁盤和數(shù)據(jù),能保證提供每天M小時(shí)不間斷服務(wù),避免因數(shù)據(jù)增加、刪除引起的磁盤 碎片以及同類型數(shù)據(jù)存儲(chǔ)分散而導(dǎo)致系統(tǒng)整體性能降低的缺陷。本實(shí)施例通過(guò)利用兩個(gè)硬盤區(qū)分別執(zhí)行更新數(shù)據(jù)的歸并及查詢以將查詢及更新 操作分流,并利用兩個(gè)內(nèi)存區(qū)交替接收更新數(shù)據(jù),以及只在某一內(nèi)存區(qū)滿時(shí)將更新數(shù)據(jù)歸 并到硬盤區(qū),上述兩個(gè)硬盤區(qū)及內(nèi)存區(qū)不間斷的實(shí)時(shí)接收更新數(shù)據(jù)并提供查詢服務(wù),提高 系統(tǒng)性能以及增大數(shù)據(jù)承載量。優(yōu)選地,通過(guò)把系統(tǒng)隨機(jī)寫I/O轉(zhuǎn)化成為批量的順序的磁 盤寫I/O操作以及回放數(shù)據(jù)更新隊(duì)列恢復(fù)內(nèi)存區(qū),避免死機(jī)斷電等帶來(lái)的數(shù)據(jù)丟失,提高 數(shù)據(jù)的準(zhǔn)確性;并通過(guò)在空閑時(shí)對(duì)內(nèi)存及硬盤區(qū)的數(shù)據(jù)整理可以提供每天M小時(shí)不間斷 運(yùn)行。系統(tǒng)實(shí)施例圖3為本發(fā)明的數(shù)據(jù)更新及查詢控制系統(tǒng)中Hash模塊的實(shí)施例示意圖;圖4為本發(fā)明的數(shù)據(jù)更新及查詢控制系統(tǒng)的實(shí)施例結(jié)構(gòu)圖。上述圖1、2方法發(fā)明的各個(gè)實(shí)施例均可 以在圖4結(jié)構(gòu)圖所示結(jié)構(gòu)的系統(tǒng)中實(shí)現(xiàn)。以下結(jié)合圖3及4進(jìn)行解釋說(shuō)明。如圖4所示,該數(shù)據(jù)更新及查詢控制系統(tǒng)(以下簡(jiǎn)稱為系統(tǒng))包括內(nèi)存區(qū)42,用 于接收更新數(shù)據(jù);兩個(gè)硬盤區(qū)(即硬盤區(qū)1及硬盤區(qū)幻,用于分別執(zhí)行存儲(chǔ)內(nèi)存區(qū)中任一 個(gè)的更新數(shù)據(jù)的操作,以及將自身的數(shù)據(jù)返回至數(shù)據(jù)查詢方的操作;控制模塊46,用于控 制內(nèi)存區(qū)將自身存儲(chǔ)的更新數(shù)據(jù)歸并到兩個(gè)硬盤區(qū)中的任意一個(gè);在歸并完成后,清空內(nèi) 存區(qū)中執(zhí)行歸并操作的內(nèi)存區(qū);控制兩個(gè)硬盤區(qū)中未執(zhí)行歸并操作的硬盤區(qū)以及內(nèi)存區(qū)中 至少一個(gè)內(nèi)存區(qū)將數(shù)據(jù)返回至數(shù)據(jù)查詢方。其中,內(nèi)存區(qū)1及內(nèi)存區(qū)2屬于內(nèi)存區(qū)42 ;硬 盤區(qū)1及硬盤區(qū)2屬于硬盤區(qū)44。具體設(shè)置時(shí)可以優(yōu)選為兩個(gè)內(nèi)存區(qū),如內(nèi)存區(qū)1及內(nèi)存 區(qū)2,當(dāng)然,也可以根據(jù)實(shí)際需要設(shè)置多個(gè)內(nèi)存區(qū)。內(nèi)存區(qū)42還可以包括Hash子模塊421,用于保存主鍵(Key)的哈希表,其中,主鍵的內(nèi)容根據(jù)業(yè)務(wù)設(shè)置, 可以是手機(jī)號(hào)、身份證編碼等;具體操作時(shí),為了使這些主鍵定長(zhǎng)和均勻分布,可以對(duì)主鍵 做簽名,作為這一份數(shù)據(jù)的主鍵,其中具體可以采用MD5信息摘要算法簽名獲得64位或者 1 位簽名;哈希表中桶的大小(也就是每行所包括的數(shù)值個(gè)數(shù))可以根據(jù)數(shù)據(jù)量由配置 文件配置;新增加的key值由一個(gè)更新線程負(fù)責(zé)增加到Hash表中;此模塊通過(guò)保存主鍵到其數(shù)值這種類型的數(shù)據(jù)結(jié)構(gòu),可以保證通過(guò)一步計(jì)算就能 直接定位到各內(nèi)存區(qū)的key值,即通過(guò)主鍵找到其所有相關(guān)的數(shù)據(jù)的功能,進(jìn)而在查詢時(shí) 通過(guò)主鍵來(lái)獲取數(shù)據(jù),如需要保存用戶的業(yè)務(wù)流水、用戶的郵件、某個(gè)關(guān)鍵詞的檢索結(jié)果 等時(shí),則將這些應(yīng)用數(shù)據(jù)以key到數(shù)值(value)的對(duì)應(yīng)方式保存;Hash字典中每個(gè)key的類 型是隨意的,value的內(nèi)容也是無(wú)具體類型的,可以保存文字、圖片等;Hash字典中每個(gè)key 后面的value都是處在新增、刪除不斷變化中;掩碼子模塊422 用于表示數(shù)據(jù)是否被刪除,其中每條數(shù)據(jù)在掩碼表中占一位;當(dāng) 收到數(shù)據(jù)刪除命令或更新命令時(shí),直接更新掩碼表對(duì)應(yīng)的位而不是立即刪除真實(shí)的磁盤區(qū) 塊;掩碼表采用操作系統(tǒng)的內(nèi)存磁盤映射技術(shù)實(shí)現(xiàn),最大限度的節(jié)省磁盤空間;每個(gè)查詢 結(jié)果都要過(guò)一遍掩碼表來(lái)確定數(shù)據(jù)是否已被刪除;標(biāo)識(shí)(identification,簡(jiǎn)稱ID)子模塊423 用于保存數(shù)據(jù)更新及查詢控制系統(tǒng) 為每個(gè)數(shù)據(jù)分配的一個(gè)順序號(hào)碼;此ID對(duì)系統(tǒng)外部不可見,每條數(shù)據(jù)的ID號(hào)碼都不相同, 作為系統(tǒng)內(nèi)部對(duì)數(shù)據(jù)的唯一標(biāo)識(shí);具體操作時(shí),為了降低整個(gè)系統(tǒng)的復(fù)雜度,這個(gè)ID字典 也可以采用Hash字典的方式保存;緩存存儲(chǔ)區(qū)(也可以稱為緩存存儲(chǔ)子模塊)4 用于緩存訪問頻率較高的鏈表, 避免查詢磁盤帶來(lái)的I/O操作;在內(nèi)存存儲(chǔ)空間一定的條件下淘汰策略有兩個(gè),一個(gè)是按 照訪問頻率淘汰,還有一個(gè)是如果某個(gè)主鍵key的鏈表有更新則淘汰;ID緩存存儲(chǔ)區(qū)(也可以稱為ID緩存存儲(chǔ)子模塊)425用于緩存被訪問頻率較高的 數(shù)據(jù)文件;淘汰方式和高頻鏈表緩存存儲(chǔ)子模塊424的淘汰策略一致。硬盤區(qū)44還可以包括索引存儲(chǔ)區(qū)(也可以稱為索引存儲(chǔ)子模塊)441 用于為每個(gè)數(shù)據(jù)文件的ID和數(shù) 據(jù)文件之間建立有對(duì)應(yīng)關(guān)系的索引;由于每個(gè)數(shù)據(jù)可能大小不一,為了讓系統(tǒng)高效并便于 管理需要把多個(gè)數(shù)據(jù)文件打包成為2G大?。凰饕募斜4婷總€(gè)數(shù)據(jù)在打包文件中的位置和大??;查詢時(shí),通過(guò)內(nèi)部ID索引定位到數(shù)據(jù)文件位置;變化數(shù)據(jù)存儲(chǔ)區(qū)(也可以稱為變化數(shù)據(jù)存儲(chǔ)子模塊)442,用于保存所有更新數(shù)據(jù) 以及生成用于表征恢復(fù)兩個(gè)內(nèi)存區(qū)的更新數(shù)據(jù)的時(shí)間起始點(diǎn)的時(shí)間標(biāo)識(shí);具體操作時(shí),變 化數(shù)據(jù)存儲(chǔ)區(qū)442還可以保存新增命令、刪除命令、更新命令等。具體地,該硬盤區(qū)1、2及內(nèi)存區(qū)1、2保存的是內(nèi)部ID的數(shù)值構(gòu)成的鏈表,每個(gè)鏈 表節(jié)點(diǎn)保存一個(gè)ID號(hào),每個(gè)鏈表都屬于某個(gè)主鍵key值。根據(jù)上述各個(gè)模塊的描述可知,數(shù)據(jù)更新及查詢控制系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)刪除、更新及 新增的流程可以概括為當(dāng)收到數(shù)據(jù)新增命令、刪除命令或更新命令時(shí),將新增命令、刪除 命令或更新命令保存入更新隊(duì)列模塊中;并在接收到刪除命令或更新命令時(shí),直接把掩碼 表內(nèi)部數(shù)據(jù)ID對(duì)應(yīng)的位置為刪除,以及清除內(nèi)部ID緩存區(qū)和鏈表緩存區(qū);更新線程(屬于 上述控制模塊46)給數(shù)據(jù)文件分配一個(gè)順序增長(zhǎng)的內(nèi)部數(shù)據(jù)ID,并把內(nèi)部數(shù)據(jù)ID保存到主 鍵對(duì)應(yīng)的鏈表尾部,以及將數(shù)據(jù)保存到索引存儲(chǔ)區(qū)441。數(shù)據(jù)查詢的流程可以概括為通過(guò)查詢主鍵的key值計(jì)算MD5值,并用主鍵MD5值 查詢Hash表定位鏈表位置;判斷鏈表緩存區(qū)是否已經(jīng)存在緩存內(nèi)容;若緩存區(qū)中無(wú)查詢數(shù) 據(jù),則將硬盤區(qū)1或硬盤區(qū)2及內(nèi)存區(qū)1或、和內(nèi)存區(qū)2的數(shù)據(jù)合并,若有則直接獲取緩存 區(qū)中的查詢數(shù)據(jù);通過(guò)濾掩碼表剔除被刪除的內(nèi)部數(shù)據(jù)ID;根據(jù)內(nèi)部數(shù)據(jù)ID從索引存儲(chǔ)區(qū) 441讀取文件數(shù)據(jù);看緩存區(qū)是否有空間,有則保存到緩存區(qū),為下一次查詢提速;把最終 的文件數(shù)據(jù)返回給數(shù)據(jù)查詢方。此外,查詢、更新分別監(jiān)聽兩個(gè)不同的端口 ;查詢采用多線 程監(jiān)聽同一個(gè)端口,更新只有一個(gè)線程監(jiān)聽,這樣避免了多線程同時(shí)更新的鎖問題。本實(shí)施例通過(guò)利用兩個(gè)硬盤區(qū)1及2分別執(zhí)行更新數(shù)據(jù)的歸并及查詢以將查詢 及更新操作分流,并利用單線程接收更新并記錄更新隊(duì)列來(lái)保障數(shù)據(jù)接收的快速穩(wěn)定,以 及在接收更新數(shù)據(jù)后直接修改內(nèi)存而不修改磁盤數(shù)據(jù)區(qū),磁盤數(shù)據(jù)區(qū)通過(guò)歸并線程集中操 作,上述兩個(gè)硬盤區(qū)1、2及內(nèi)存區(qū)1、2不間斷的實(shí)時(shí)接收更新數(shù)據(jù)并提供查詢服務(wù),提高 系統(tǒng)性能以及增大數(shù)據(jù)承載量及吞吐量。優(yōu)選地,通過(guò)把系統(tǒng)隨機(jī)寫I/O轉(zhuǎn)化成為批量的 順序的磁盤寫I/O操作以及回放數(shù)據(jù)更新隊(duì)列恢復(fù)內(nèi)存區(qū),避免死機(jī)斷電等帶來(lái)的數(shù)據(jù)丟 失,提高數(shù)據(jù)的準(zhǔn)確性;并通過(guò)在空閑時(shí)對(duì)內(nèi)存及硬盤區(qū)的數(shù)據(jù)整理可以提供每天M小時(shí) 不間斷運(yùn)行;同時(shí)抽象key-value-value的數(shù)據(jù)結(jié)構(gòu)滿足多種應(yīng)用需求。最后應(yīng)說(shuō)明的是以上僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,盡管 參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),其依然可以對(duì) 前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換。凡在 本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù) 范圍之內(nèi)。
8
權(quán)利要求
1.一種數(shù)據(jù)更新及查詢控制方法,其特征在于,包括以下步驟內(nèi)存區(qū)將接收的更新數(shù)據(jù)歸并到兩個(gè)硬盤區(qū)中的任意一個(gè),以及在歸并完成后清空自 身存儲(chǔ)的更新數(shù)據(jù);在接收到查詢請(qǐng)求時(shí),將所述兩個(gè)硬盤區(qū)中未執(zhí)行歸并操作的硬盤區(qū)的數(shù)據(jù)以及所述 內(nèi)存區(qū)中至少一個(gè)內(nèi)存區(qū)的數(shù)據(jù)返回?cái)?shù)據(jù)查詢方。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)更新及查詢控制方法,其特征在于,所述內(nèi)存區(qū)將接收 的更新數(shù)據(jù)歸并到兩個(gè)硬盤區(qū)中的任意一個(gè)的步驟包括兩個(gè)內(nèi)存區(qū)相互交替接收更新數(shù)據(jù),并在停止接收更新數(shù)據(jù)時(shí)將自身存儲(chǔ)的更新數(shù)據(jù) 歸并到所述兩個(gè)硬盤區(qū)中的任意一個(gè)。
3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)更新及查詢控制方法,其特征在于,所述兩個(gè)內(nèi)存區(qū)相 互交替接收更新數(shù)據(jù)的步驟包括所述兩個(gè)內(nèi)存區(qū)中的一個(gè)內(nèi)存區(qū)在存儲(chǔ)空間滿時(shí)或者到達(dá)預(yù)設(shè)的歸并時(shí)間時(shí),切換到 另一內(nèi)存區(qū)接收更新數(shù)據(jù)。
4.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的數(shù)據(jù)更新及查詢控制方法,其特征在于在所 述在歸并完成后清空自身存儲(chǔ)的數(shù)據(jù)的步驟之后還包括將所述兩個(gè)硬盤區(qū)中執(zhí)行歸并操作的硬盤區(qū)中的數(shù)據(jù)拷貝到未執(zhí)行歸并操作的硬盤 區(qū)中。
5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)更新及查詢控制方法,其特征在于,所述在接收到查詢 請(qǐng)求時(shí),將所述兩個(gè)硬盤區(qū)中未執(zhí)行歸并操作的硬盤區(qū)的數(shù)據(jù)以及所述兩個(gè)內(nèi)存區(qū)中至少 一個(gè)內(nèi)存區(qū)的數(shù)據(jù)返回?cái)?shù)據(jù)查詢方的步驟包括在所述兩個(gè)內(nèi)存區(qū)中的第一內(nèi)存區(qū)接收更新數(shù)據(jù)時(shí),將所述未執(zhí)行歸并操作的硬盤區(qū) 以及第一內(nèi)存區(qū)的數(shù)據(jù)返回至所述數(shù)據(jù)查詢方;在所述兩個(gè)內(nèi)存區(qū)中的第二內(nèi)存區(qū)接收更新數(shù)據(jù)且所述第一內(nèi)存區(qū)未清空時(shí),將所述 未執(zhí)行歸并操作的硬盤區(qū)、第一內(nèi)存區(qū)以及第二內(nèi)存區(qū)的數(shù)據(jù)返回至所述數(shù)據(jù)查詢方;在所述第二內(nèi)存區(qū)接收更新數(shù)據(jù)且所述第一內(nèi)存區(qū)已清空時(shí),將所述未執(zhí)行歸并操作 的硬盤區(qū)以及第二內(nèi)存區(qū)的數(shù)據(jù)返回至所述數(shù)據(jù)查詢方。
6.根據(jù)上述權(quán)利要求2或3所述的數(shù)據(jù)更新及查詢控制方法,其特征在于,還包括所述兩個(gè)內(nèi)存區(qū)均按先后順序存儲(chǔ)數(shù)據(jù)更新請(qǐng)求;所述兩個(gè)硬盤區(qū)中執(zhí)行歸并操作的硬盤區(qū)在歸并完成后,生成用于表征恢復(fù)所述兩個(gè) 內(nèi)存區(qū)的更新數(shù)據(jù)的時(shí)間起始點(diǎn)的時(shí)間標(biāo)識(shí)。
7.根據(jù)上述權(quán)利要求2或3所述的數(shù)據(jù)更新及查詢控制方法,其特征在于,還包括在所述兩個(gè)內(nèi)存區(qū)中任一個(gè)的使用率小于預(yù)設(shè)閾值時(shí),歸并整理使用率小于預(yù)設(shè)閾值的內(nèi)存區(qū);在所述兩個(gè)硬盤區(qū)中任一個(gè)的使用率小于預(yù)設(shè)閾值時(shí),歸并整理使用率小于預(yù)設(shè)閾值 的硬盤區(qū)。
8.一種數(shù)據(jù)更新及查詢控制系統(tǒng),其特征在于,該系統(tǒng)包括內(nèi)存區(qū),用于接收更新數(shù)據(jù);兩個(gè)硬盤區(qū),用于分別執(zhí)行存儲(chǔ)所述內(nèi)存區(qū)中任一個(gè)的更新數(shù)據(jù)的操作,以及將自身 的數(shù)據(jù)返回至數(shù)據(jù)查詢方的操作;控制模塊,用于控制所述內(nèi)存區(qū)將自身存儲(chǔ)的更新數(shù)據(jù)歸并到所述兩個(gè)硬盤區(qū)中的任 意一個(gè);在歸并完成后,清空所述內(nèi)存區(qū)中執(zhí)行歸并操作的內(nèi)存區(qū);控制所述兩個(gè)硬盤區(qū) 中未執(zhí)行歸并操作的硬盤區(qū)以及所述內(nèi)存區(qū)中至少一個(gè)內(nèi)存區(qū)將數(shù)據(jù)返回至所述數(shù)據(jù)查 詢方。
9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)更新及查詢控制系統(tǒng),其特征在于,所述內(nèi)存區(qū)的個(gè)數(shù) 為兩個(gè),用于相互交替接收更新數(shù)據(jù),并在停止接收更新數(shù)據(jù)時(shí)將自身存儲(chǔ)的更新數(shù)據(jù)歸 并到所述兩個(gè)硬盤區(qū)中的任意一個(gè)。
10.根據(jù)權(quán)利要求8或9所述的數(shù)據(jù)更新及查詢控制系統(tǒng),其特征在于,所述兩個(gè)硬盤 區(qū)均包括索引存儲(chǔ)子模塊,用于為每個(gè)數(shù)據(jù)文件的ID和數(shù)據(jù)文件之間建立對(duì)應(yīng)關(guān)系的索引;變化數(shù)據(jù)存儲(chǔ)子模塊,用于保存所有更新數(shù)據(jù)以及生成用于表征恢復(fù)所述兩個(gè)內(nèi)存區(qū) 的更新數(shù)據(jù)的時(shí)間起始點(diǎn)的時(shí)間標(biāo)識(shí)。
全文摘要
本發(fā)明提供了一種數(shù)據(jù)更新及查詢控制方法及系統(tǒng),其中,該方法包括內(nèi)存區(qū)將接收的更新數(shù)據(jù)歸并到兩個(gè)硬盤區(qū)中的任意一個(gè),以及在歸并完成后清空自身存儲(chǔ)的更新數(shù)據(jù);在接收到查詢請(qǐng)求時(shí),將兩個(gè)硬盤區(qū)中未執(zhí)行歸并操作的硬盤區(qū)的數(shù)據(jù)以及內(nèi)存區(qū)中至少一個(gè)內(nèi)存區(qū)的數(shù)據(jù)返回?cái)?shù)據(jù)查詢方。本發(fā)明通過(guò)利用兩個(gè)硬盤區(qū)分別執(zhí)行更新數(shù)據(jù)的歸并及查詢實(shí)現(xiàn)將查詢及更新操作分流,避免了現(xiàn)有技術(shù)中需要設(shè)置鎖策略而導(dǎo)致的實(shí)時(shí)性及系統(tǒng)復(fù)雜性問題。
文檔編號(hào)G06F17/30GK102096676SQ20091024232
公開日2011年6月15日 申請(qǐng)日期2009年12月11日 優(yōu)先權(quán)日2009年12月11日
發(fā)明者蘭建明, 孫少陵, 羅治國(guó), 韓金宇, 黃曉慶 申請(qǐng)人:中國(guó)移動(dòng)通信集團(tuán)公司