一種持久化的數(shù)據(jù)存儲和查詢方法及對應(yīng)的裝置和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種持久化的數(shù)據(jù)存儲和查詢方法及對應(yīng)的裝置和系統(tǒng),其中,持久化的數(shù)據(jù)存儲方法包括:接收應(yīng)用程序發(fā)送的數(shù)據(jù)存儲操作請求,將與所述數(shù)據(jù)存儲操作請求匹配的數(shù)據(jù)寫入緩存,并在分布式文件系統(tǒng)中創(chuàng)建能標(biāo)識所述數(shù)據(jù)的至少一個key文件;緩存客戶端從所述key文件中獲取能標(biāo)識數(shù)據(jù)的至少一個key值;根據(jù)所述獲取的至少一個key值,在緩存中查找與所述key值匹配的數(shù)據(jù);將在緩存中查找到的與所述key值匹配的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并刪除與所述寫入分布式文件系統(tǒng)的數(shù)據(jù)對應(yīng)的key文件中的key值。
【專利說明】一種持久化的數(shù)據(jù)存儲和查詢方法及對應(yīng)的裝置和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫存儲查詢【技術(shù)領(lǐng)域】,具體涉及一種持久化的數(shù)據(jù)存儲和查詢方法及對應(yīng)的裝置和系統(tǒng)。
【背景技術(shù)】
[0002]現(xiàn)有分布式緩存系統(tǒng)雖然支持分布式部署,可以參見圖1,但是內(nèi)部單個緩存服務(wù)器節(jié)點上存儲的數(shù)據(jù)沒有冗余,如果該緩存服務(wù)器節(jié)點發(fā)生故障則會導(dǎo)致應(yīng)用程序無法查詢數(shù)據(jù),進而導(dǎo)致業(yè)務(wù)中斷或者錯誤。
[0003]目前,解決這個問題的持久化方案主要有快照和AOF(append only file,只增文件)方式,而使用快照的方式每次都將緩存服務(wù)器的內(nèi)存數(shù)據(jù)完整寫入磁盤一次,并不是增量的更新數(shù)據(jù),若內(nèi)存中的數(shù)據(jù)量很大,而且數(shù)據(jù)寫操作非常多,必然會引起大量的磁盤I/O操作而嚴(yán)重影響性能;另外,快照的方式是按照一定的時間間隔將內(nèi)存中的數(shù)據(jù)寫入磁盤中,因此如果緩存服務(wù)器出現(xiàn)意外異常,就會丟失最后一次快照后的所有修改后的數(shù)據(jù)。
[0004]A0F方式是每條命令都要追加log文件,可能會導(dǎo)致數(shù)據(jù)體積過大,當(dāng)緩存系統(tǒng)重啟恢復(fù)數(shù)據(jù)時加載數(shù)據(jù)會非常慢,比如,幾十G的數(shù)據(jù)可能需要幾小時才能加載完,這個耗時不是因此磁盤文件讀取速度慢,而是因為讀取的所有命令都要在緩存服務(wù)器內(nèi)存中重新執(zhí)行一遍;另外,由于每條命令都要寫log文件,緩存的讀寫性能也會有所下降。
[0005]使用快照或A0F的持久化方式,存在著共同的缺點:
[0006]其一,緩存持久化使用Buffer 10造成系統(tǒng)不穩(wěn)定或者崩潰,所謂Buffer 10是指緩存對持久化文件的寫入和讀取操作都會使用物理內(nèi)存的Page Cache,而大多數(shù)數(shù)據(jù)庫系統(tǒng)會使用Direct 10來繞過這層Page Cache并自行維護一個數(shù)據(jù)的Cache,而當(dāng)緩存的持久化文件過大(尤其是快照文件),并對其進行讀寫時,磁盤文件中的數(shù)據(jù)都會被加載到物理內(nèi)存中作為操作系統(tǒng)對該文件的一層Cache,而這層Cache的數(shù)據(jù)與緩存內(nèi)存中管理的數(shù)據(jù)實際是重復(fù)存儲的,雖然內(nèi)核在物理內(nèi)存緊張時會做Page Cache的剔除工作,但內(nèi)核很可能認(rèn)為某塊Page Cache更重要,而讓緩存進程開始Swap,這是系統(tǒng)就會開始出現(xiàn)不穩(wěn)定或者崩潰;
[0007]其二,持久化的數(shù)據(jù)需要緩存服務(wù)器節(jié)點重啟才能加載恢復(fù),因此,在緩存服務(wù)器節(jié)點發(fā)生故障時無法提供服務(wù),導(dǎo)致業(yè)務(wù)中斷或者錯誤;
[0008]其三,服務(wù)端磁盤易遇到瓶頸:數(shù)據(jù)是統(tǒng)一存儲在服務(wù)端磁盤上的,多個不同客戶端同時發(fā)起數(shù)據(jù)訪問請求時,服務(wù)端磁盤容易達到瓶頸,影響性能;
[0009]其四,緩存服務(wù)器不能動態(tài)擴展:數(shù)據(jù)只能存儲在緩存服務(wù)端某目錄下,當(dāng)存儲空間不夠擴展時需停止服務(wù),擴展存儲空間后,再次啟動存儲空間,擴展的過程需要停止上層應(yīng)用系統(tǒng)。
【發(fā)明內(nèi)容】
[0010]本發(fā)明所要解決的技術(shù)問題是提供一種持久化的數(shù)據(jù)存儲和查詢方法及對應(yīng)的裝置和系統(tǒng),能夠?qū)崿F(xiàn)高效的數(shù)據(jù)讀寫,并且完成數(shù)據(jù)備份。
[0011]依據(jù)本發(fā)明提供的一個方面,提供了一種持久化的數(shù)據(jù)存儲方法,包括:
[0012]接收應(yīng)用程序發(fā)送的數(shù)據(jù)存儲操作請求,將與所述數(shù)據(jù)存儲操作請求匹配的數(shù)據(jù)寫入緩存,并在分布式文件系統(tǒng)中創(chuàng)建能標(biāo)識所述數(shù)據(jù)的至少一個key文件;
[0013]緩存客戶端從所述key文件中獲取能標(biāo)識數(shù)據(jù)的至少一個key值;
[0014]根據(jù)所述獲取的至少一個key值,在緩存中查找與所述key值匹配的數(shù)據(jù);
[0015]將在緩存中查找到的與所述key值匹配的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并刪除與所述寫入分布式文件系統(tǒng)的數(shù)據(jù)對應(yīng)的key文件中的key值。
[0016]依據(jù)本發(fā)明的另一個方面,提供了一種持久化的數(shù)據(jù)存儲裝置,包括:
[0017]第一數(shù)據(jù)寫入模塊,用于接收應(yīng)用程序發(fā)送的數(shù)據(jù)存儲操作請求,將與所述數(shù)據(jù)存儲操作請求匹配的數(shù)據(jù)寫入緩存,并在分布式文件系統(tǒng)中創(chuàng)建能標(biāo)識所述數(shù)據(jù)的至少一個key文件;
[0018]數(shù)據(jù)標(biāo)識獲取模塊,用于調(diào)用緩存客戶端從所述key文件中獲取能標(biāo)識數(shù)據(jù)的至少一個key值;
[0019]數(shù)據(jù)查找模塊,用于根據(jù)所述獲取的至少一個key值,在緩存中查找與所述key值匹配的數(shù)據(jù);
[0020]第二數(shù)據(jù)寫入模塊,用于將在緩存中查找到的與所述key值匹配的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并刪除與所述寫入分布式文件系統(tǒng)的數(shù)據(jù)對應(yīng)的key文件中的key值。
[0021]依據(jù)本發(fā)明的再一個方面,提供了一種持久化的數(shù)據(jù)查詢方法,包括:
[0022]預(yù)先通過持久化的數(shù)據(jù)存儲方法完成數(shù)據(jù)存儲;
[0023]接收應(yīng)用程序發(fā)送的數(shù)據(jù)查詢操作請求,在緩存中查找與所述數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù);
[0024]若查詢成功,則將查詢到的匹配的數(shù)據(jù)返回給所述應(yīng)用程序;若查詢失敗,則在分布式文件系統(tǒng)中查詢匹配的數(shù)據(jù);
[0025]在分布式文件系統(tǒng)中查詢到匹配的數(shù)據(jù)的情況下,將查詢到的匹配的的數(shù)據(jù)返回給應(yīng)用程序并寫入緩存。
[0026]依據(jù)本發(fā)明的又一個方面,提供了一種持久化的數(shù)據(jù)查詢系統(tǒng),包括:
[0027]預(yù)先通過持久化的數(shù)據(jù)存儲裝置,完成數(shù)據(jù)的存儲,且所述持久化的數(shù)據(jù)查詢系統(tǒng)還包括:第一數(shù)據(jù)查詢模塊,用于接收應(yīng)用程序發(fā)送的數(shù)據(jù)查詢操作,從緩存中查找與所述數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù);
[0028]第二數(shù)據(jù)查詢模塊,用于當(dāng)在緩存中未查詢到與所述數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù)時,在分布式文件系統(tǒng)中查詢匹配的數(shù)據(jù);
[0029]第三數(shù)據(jù)寫入模塊,用于當(dāng)在分布式文件系統(tǒng)中查詢到匹配的數(shù)據(jù)時,將查詢到的匹配的數(shù)據(jù)返回給應(yīng)用程序并寫入緩存。
[0030]本發(fā)明提供的一種持久化的數(shù)據(jù)存儲方法及裝置,根據(jù)應(yīng)用程序的數(shù)據(jù)存儲操作請求,首先將數(shù)據(jù)寫入緩存,同時在分布式文件系統(tǒng)中創(chuàng)建能標(biāo)識這些數(shù)據(jù)的key文件,緩存客戶端會不間斷的從分布式文件系統(tǒng)中獲取key文件并獲取其中的key值,根據(jù)獲得的key值,在緩存中查詢與該key值匹配的數(shù)據(jù),最后將查找成功的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并刪除與寫入的數(shù)據(jù)對應(yīng)的key文件中的key值。通過本發(fā)明提供的方法,能夠完成數(shù)據(jù)的備份,保障數(shù)據(jù)的安全性和可靠性,采用分布式文件系統(tǒng)存儲數(shù)據(jù)的特點,數(shù)據(jù)是存儲在分布式文件系統(tǒng)的不同的存儲節(jié)點上,存儲空間可以動態(tài)伸縮;另外,緩存與分布式文件系統(tǒng)中的數(shù)據(jù)實時保持一致,不會因為數(shù)據(jù)備份時間的差異而導(dǎo)致數(shù)據(jù)的不一致性或數(shù)據(jù)的丟失。
[0031]本發(fā)明提供的一種持久化的數(shù)據(jù)查詢方法及系統(tǒng),首先接收到應(yīng)用程序的數(shù)據(jù)查詢操作請求,默認(rèn)從緩存中查找匹配的數(shù)據(jù),若查詢成功,則向應(yīng)用程序返回匹配的數(shù)據(jù),若查詢失敗,則從分布式文件系統(tǒng)中查找匹配的數(shù)據(jù),在查找成功的情況下,將查找成功的數(shù)據(jù)返回應(yīng)用程序并寫入緩存。通過本發(fā)明提供的方法,將緩存中的數(shù)據(jù)備份到分布式文件系統(tǒng)中,如果緩存服務(wù)器端發(fā)生故障,則分布式文件系統(tǒng)會馬上提供服務(wù),不會導(dǎo)致應(yīng)用程序不能查詢訪問的問題,也不會導(dǎo)致業(yè)務(wù)的終端。
【專利附圖】
【附圖說明】
[0032]圖1為現(xiàn)有技術(shù)的分布式部署的網(wǎng)絡(luò)架構(gòu)圖;
[0033]圖2為本發(fā)明實施例一的一種持久化的數(shù)據(jù)存儲方法流程圖;
[0034]圖3為本發(fā)明實施例一中使用到的各個模塊間的整體架構(gòu)圖;
[0035]圖4為本發(fā)明實施例一中的數(shù)據(jù)插入操作處理的具體流程圖;
[0036]圖5為本發(fā)明實施例二的一種持久化的數(shù)據(jù)存儲裝置示意圖;
[0037]圖6為本發(fā)明實施例三的一種持久化的數(shù)據(jù)查詢方法流程圖;
[0038]圖7為本發(fā)明實施例三中的數(shù)據(jù)查詢操作處理的具體流程圖;
[0039]圖8為本發(fā)明實施例四的一種持久化的數(shù)據(jù)查詢系統(tǒng)示意圖。
【具體實施方式】
[0040]以下結(jié)合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
[0041]實施例一、一種持久化的數(shù)據(jù)存儲方法。下面結(jié)合圖2-圖4對本發(fā)明提供的方法進行詳細(xì)說明。
[0042]圖2中,S201、接收應(yīng)用程序發(fā)送的數(shù)據(jù)存儲操作請求,將與數(shù)據(jù)存儲操作請求匹配的數(shù)據(jù)寫入緩存,并在分布式文件系統(tǒng)中創(chuàng)建能標(biāo)識該數(shù)據(jù)的至少一個key文件。
[0043]具體的,圖3為本實施例中應(yīng)用程序、數(shù)據(jù)庫、緩存、分布式文件系統(tǒng)、key文件之間的數(shù)據(jù)傳輸連接圖。
[0044]當(dāng)數(shù)據(jù)庫客戶端接收到應(yīng)用程序客戶端發(fā)送的數(shù)據(jù)存儲操作請求(也可以稱為數(shù)據(jù)插入操作請求),可以參見圖4,將數(shù)據(jù)庫客戶端中與應(yīng)用程序發(fā)送的數(shù)據(jù)操作請求中匹配的數(shù)據(jù)寫入緩存。當(dāng)數(shù)據(jù)庫客戶端中的數(shù)據(jù)成功寫入緩存時,數(shù)據(jù)庫客戶端向應(yīng)用程序發(fā)送數(shù)據(jù)寫入緩存成功的信息,并在分布式文件系統(tǒng)中創(chuàng)建能標(biāo)識這些寫入緩存的數(shù)據(jù)的key文件,該文件能唯一標(biāo)識數(shù)據(jù)中的數(shù)據(jù)記錄。其中,數(shù)據(jù)中每一條數(shù)據(jù)記錄對應(yīng)一個key文件,以該數(shù)據(jù)記錄的key值(即關(guān)鍵值)作為文件名,文件內(nèi)容為空;當(dāng)數(shù)據(jù)庫客戶端中的所有數(shù)據(jù)或部分?jǐn)?shù)據(jù)寫入緩存失敗時,直接將寫入緩存失敗的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并在分布式文件系統(tǒng)中創(chuàng)建與沒有寫入分布式文件系統(tǒng)中的數(shù)據(jù)對應(yīng)的key文件。
[0045]需要說明的是,本實施例中的數(shù)據(jù)庫時非關(guān)系型數(shù)據(jù)庫,即NoSQL數(shù)據(jù)庫。
[0046]S202、緩存客戶端從key文件中獲取能標(biāo)識數(shù)據(jù)的至少一個key值。
[0047]具體的,在分布式文件系統(tǒng)中創(chuàng)建了 key文件后,緩存客戶端會實時獲取未寫入分布式文件系統(tǒng)中的數(shù)據(jù)對應(yīng)的key文件,并從獲取的key文件中獲取能唯一標(biāo)識數(shù)據(jù)的key值。其中,key是用來表示數(shù)據(jù)中的數(shù)據(jù)記錄的,未寫入分布式文件系統(tǒng)中的數(shù)據(jù)記錄可能有多條,因此此處緩存客戶端獲得的對應(yīng)的key值可能有多個。
[0048]S203、根據(jù)獲取的至少一個key值,在緩存中查找與該key值匹配的數(shù)據(jù)。
[0049]具體的,由于從分布式文件系統(tǒng)中獲取的key值為未寫入分布式文件系統(tǒng)中的數(shù)據(jù)對應(yīng)的key值,因此這些key值對應(yīng)的數(shù)據(jù)通常應(yīng)該在緩存中存在。因此,可以根據(jù)獲取的這些key值,在緩存中查找與這些key值匹配的數(shù)據(jù)。
[0050]S204、將在緩存中查找到的與所述key值匹配的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并刪除與該寫入分布式文件系統(tǒng)的數(shù)據(jù)對應(yīng)的key文件中的key值。
[0051]具體的,上述步驟根據(jù)獲取的key值在緩存中查找與這些key值對應(yīng)的數(shù)據(jù),在緩存中查找數(shù)據(jù)成功的情況下,將這些查找成功的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并刪除與寫入分布式文件系統(tǒng)的這些數(shù)據(jù)對應(yīng)的key文件中的key值,以便緩存客戶端后續(xù)的查詢,只要緩存客戶端查詢到key文件中的key值,表明這些key值對應(yīng)的數(shù)據(jù)未寫入分布式文件系統(tǒng)中。在緩存中查找數(shù)據(jù)失敗的情況下,緩存客戶端會將查找數(shù)據(jù)失敗的信息發(fā)送給應(yīng)用程序,請求應(yīng)用程序重新發(fā)送數(shù)據(jù)存儲操作請求給數(shù)據(jù)庫客戶端,將查找失敗的數(shù)據(jù)寫入緩存。
[0052]實施例二、一種持久化的數(shù)據(jù)存儲裝置。下面結(jié)合圖5對本發(fā)明提供的裝置進行詳細(xì)說明。
[0053]圖5中,本發(fā)明提供的裝置包括第一數(shù)據(jù)寫入模塊501、數(shù)據(jù)標(biāo)識獲取模塊502、數(shù)據(jù)查找模塊503、第二數(shù)據(jù)寫入模塊504和第一請求模塊505。
[0054]其中,第一數(shù)據(jù)寫入模塊501主要用于接收應(yīng)用程序發(fā)送的數(shù)據(jù)存儲操作請求,將與數(shù)據(jù)存儲操作請求匹配的數(shù)據(jù)寫入緩存,并在分布式文件系統(tǒng)中創(chuàng)建能標(biāo)識該數(shù)據(jù)的至少一個key文件。
[0055]具體的,當(dāng)數(shù)據(jù)庫客戶端接收到應(yīng)用程序客戶端發(fā)送的數(shù)據(jù)存儲操作請求(也可以稱為數(shù)據(jù)出入操作請求),第一數(shù)據(jù)寫入模塊501將數(shù)據(jù)庫客戶端中與應(yīng)用程序發(fā)送的數(shù)據(jù)操作請求中匹配的數(shù)據(jù)寫入緩存。當(dāng)數(shù)據(jù)庫客戶端中的數(shù)據(jù)成功寫入緩存時,數(shù)據(jù)庫客戶端向應(yīng)用程序發(fā)送數(shù)據(jù)寫入緩存成功的信息,并在分布式文件系統(tǒng)中創(chuàng)建能標(biāo)識這些寫入緩存的數(shù)據(jù)的key文件,該文件能唯一標(biāo)識數(shù)據(jù)中的數(shù)據(jù)記錄。其中,數(shù)據(jù)中每一條數(shù)據(jù)記錄對應(yīng)一個key文件,以該數(shù)據(jù)記錄的key值(即關(guān)鍵值)作為文件名,文件內(nèi)容為空;當(dāng)數(shù)據(jù)庫客戶端中的所有數(shù)據(jù)或部分?jǐn)?shù)據(jù)寫入緩存失敗時,第一數(shù)據(jù)寫入模塊501直接將寫入緩存失敗的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并在分布式文件系統(tǒng)中創(chuàng)建與沒有寫入分布式文件系統(tǒng)中的數(shù)據(jù)對應(yīng)的key文件。
[0056]需要說明的是,本實施例中的數(shù)據(jù)庫時非關(guān)系型數(shù)據(jù)庫,即NoSQL數(shù)據(jù)庫。
[0057]數(shù)據(jù)標(biāo)識獲取模塊502主要用于調(diào)用緩存客戶端從key文件中獲取能標(biāo)識數(shù)據(jù)的至少一個key值。
[0058]具體的,在分布式文件系統(tǒng)中創(chuàng)建了 key文件后,設(shè)置于緩存客戶端中的數(shù)據(jù)標(biāo)識獲取模塊502會實時獲取未寫入分布式文件系統(tǒng)中的數(shù)據(jù)對應(yīng)的key文件,并從獲取的key文件中獲取能唯一標(biāo)識數(shù)據(jù)的key值。其中,key值是用來表示數(shù)據(jù)中的數(shù)據(jù)記錄的,未寫入分布式文件系統(tǒng)中的數(shù)據(jù)記錄可能有多條,因此此處緩存客戶端獲得的對應(yīng)的key值可能有多個。
[0059]數(shù)據(jù)查找模塊503主要用于根據(jù)數(shù)據(jù)標(biāo)識獲取模塊502獲取的至少一個key值,在緩存中查找與該key值匹配的數(shù)據(jù)。
[0060]具體的,由于從分布式文件系統(tǒng)中獲取的key值為未寫入分布式文件系統(tǒng)中的數(shù)據(jù)對應(yīng)的key值,這些key值對應(yīng)的數(shù)據(jù)通常應(yīng)該在緩存中存在。因此,數(shù)據(jù)查找模塊503可以根據(jù)獲取的這些key值,在緩存中查找與這些key值匹配的數(shù)據(jù)。
[0061]第二數(shù)據(jù)寫入模塊504主要用于將數(shù)據(jù)查找模塊503在緩存中查找到的與key值匹配的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并刪除與該寫入分布式文件系統(tǒng)的數(shù)據(jù)對應(yīng)的key文件中的key值。
[0062]第一請求模塊505主要用于當(dāng)數(shù)據(jù)查找模塊503在緩存中未查找到與key值匹配的數(shù)據(jù)時,將查找失敗信息發(fā)送給應(yīng)用程序,請求應(yīng)用程序重新向數(shù)據(jù)庫客戶端發(fā)送數(shù)據(jù)存儲操作請求,將查找失敗的數(shù)據(jù)寫入緩存。
[0063]具體的,數(shù)據(jù)查找模塊503根據(jù)數(shù)據(jù)標(biāo)識獲取模塊502獲取的key值在緩存中查找與這些key值對應(yīng)的數(shù)據(jù),數(shù)據(jù)查找模塊503在緩存中查找數(shù)據(jù)成功的情況下,第二數(shù)據(jù)寫入模塊504將這些查找成功的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并刪除與寫入分布式文件系統(tǒng)的這些數(shù)據(jù)對應(yīng)的key文件中的key值,以便緩存客戶端后續(xù)的查詢,只要緩存客戶端查詢到key文件中的key值,表明這些key值對應(yīng)的數(shù)據(jù)未寫入分布式文件系統(tǒng)中。數(shù)據(jù)查找模塊503在緩存中查找數(shù)據(jù)失敗的情況下,第一請求模塊505會將查找數(shù)據(jù)失敗的信息發(fā)送給應(yīng)用程序,請求應(yīng)用程序重新向數(shù)據(jù)庫客戶端發(fā)送數(shù)據(jù)存儲操作請求,將查找失敗的數(shù)據(jù)寫入緩存。
[0064]實施例三、一種持久化的數(shù)據(jù)查詢方法。下面結(jié)合圖6和圖7對本發(fā)明提供的方法進行詳細(xì)說明。
[0065]圖6中,S601、預(yù)先通過持久化的數(shù)據(jù)存儲方法完成數(shù)據(jù)的存儲。
[0066]具體的,本實施例首先采用前述的實施例一中的持久化的數(shù)據(jù)存儲方法完成數(shù)據(jù)的存儲,相關(guān)的技術(shù)特征可以參見實施例一種的詳細(xì)描述,在此不再重復(fù)說明。
[0067]S602、接收應(yīng)用程序發(fā)送的數(shù)據(jù)查詢操作請求,從緩存中查找與數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù)。
[0068]具體的,參見圖7,當(dāng)數(shù)據(jù)庫客戶端接收到應(yīng)用程序客戶端發(fā)送的數(shù)據(jù)查詢操作請求時,默認(rèn)首先從緩存中查找與應(yīng)用程序發(fā)送的數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù)。
[0069]S603、若查詢成功,則將查詢的匹配的數(shù)據(jù)返回給所述應(yīng)用程序;若查詢失敗,則從分布式文件系統(tǒng)中查詢匹配的數(shù)據(jù)。
[0070]具體的,當(dāng)上述步驟從緩存中查找數(shù)據(jù)成功的情況下,將查找成功的數(shù)據(jù)返回給應(yīng)用程序客戶端;若在緩存中查找數(shù)據(jù)失敗的情況下,則從分布式文件系統(tǒng)中查找與數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù)。
[0071]S604、在分布式文件系統(tǒng)中查詢數(shù)據(jù)成功的情況下,將查詢成功的數(shù)據(jù)返回給應(yīng)用程序并寫入緩存。
[0072]具體的,當(dāng)從分布式文件系統(tǒng)中查找與數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù)時,在查找成功的情況下,將查找成功的數(shù)據(jù)反饋給應(yīng)用程序客戶端并將這些查找成功的數(shù)據(jù)寫入緩存。在查找失敗的情況下,從分布式文件系統(tǒng)中讀取key文件并判斷key文件中是否存在與查找失敗的數(shù)據(jù)匹配的key值,若存在,則向應(yīng)用程序發(fā)送請求,請求應(yīng)用程序重新向數(shù)據(jù)庫客戶端發(fā)送數(shù)據(jù)存儲操作請求,將查找失敗的數(shù)據(jù)重新寫入緩存;若在key文件中不存在與查找失敗的數(shù)據(jù)匹配的key,則返回null,結(jié)束流程。
[0073]實施例四、一種持久化的數(shù)據(jù)查詢系統(tǒng)。下面結(jié)合圖8對本發(fā)明提供的系統(tǒng)進行詳細(xì)說明。
[0074]圖8中,本發(fā)明提供的系統(tǒng)包括持久化的數(shù)據(jù)存儲裝置801、第一數(shù)據(jù)查詢模塊802、第二數(shù)據(jù)查詢模塊803、第三數(shù)據(jù)寫入模塊804和第二請求模塊805。
[0075]其中,持久化的存儲裝置801主要用于采用實施例二中的持久化的數(shù)據(jù)存儲裝置,完成數(shù)據(jù)的存儲。
[0076]具體的,本實施例中的持久化的數(shù)據(jù)存儲裝置801先采用實施例二中的持久化的數(shù)據(jù)存儲裝置完成數(shù)據(jù)的存儲,相關(guān)的技術(shù)特征可以參見實施例一種的詳細(xì)描述,在此不再重復(fù)說明。
[0077]第一數(shù)據(jù)查詢模塊802主要用于接收應(yīng)用程序發(fā)送的數(shù)據(jù)查詢操作請求,在緩存中查找與數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù)。
[0078]具體的,當(dāng)數(shù)據(jù)庫客戶端接收到應(yīng)用程序客戶端發(fā)送的數(shù)據(jù)查詢操作請求時,第一數(shù)據(jù)查詢模塊802默認(rèn)首先從緩存中查找與應(yīng)用程序發(fā)送的數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù)。
[0079]第二數(shù)據(jù)查詢模塊803主要用于當(dāng)?shù)谝粩?shù)據(jù)查詢模塊802在緩存中查詢失敗時,在分布式文件系統(tǒng)中查詢匹配的數(shù)據(jù)。
[0080]具體的,當(dāng)?shù)谝粩?shù)據(jù)查詢模塊802在緩存中查找數(shù)據(jù)成功時,將查找成功的數(shù)據(jù)返回給應(yīng)用程序客戶端;在緩存中查找數(shù)據(jù)失敗的情況下,第二數(shù)據(jù)查詢模塊803在分布式文件系統(tǒng)中查找與數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù)。
[0081]第三數(shù)據(jù)寫入模塊804主要用于當(dāng)?shù)诙?shù)據(jù)查詢模塊803在分布式文件系統(tǒng)中查詢數(shù)據(jù)成功時,將查詢成功的數(shù)據(jù)返回給應(yīng)用程序并寫入緩存。
[0082]第二請求模塊805主要用于當(dāng)?shù)诙?shù)據(jù)查詢模塊803在分布式文件系統(tǒng)中查詢數(shù)據(jù)失敗是,讀取分布式文件系統(tǒng)中的key文件文件,并判斷是否存在與查詢失敗的數(shù)據(jù)匹配的key值;若存在,則向應(yīng)用程序請求重新將查找失敗的數(shù)據(jù)寫入緩存。
[0083]具體的,當(dāng)?shù)诙?shù)據(jù)查詢模塊803從分布式文件系統(tǒng)中查找與數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù)時,在查找成功的情況下,第三數(shù)據(jù)寫入模塊804將查找成功的數(shù)據(jù)反饋給應(yīng)用程序客戶端并將這些查找成功的數(shù)據(jù)寫入緩存。在查找失敗的情況下,第二請求模塊805讀取分布式文件系統(tǒng)中的key文件并判斷key文件中是否存在與查找失敗的數(shù)據(jù)匹配的key值,若存在,則向應(yīng)用程序發(fā)送請求,請求應(yīng)用程序重新向數(shù)據(jù)庫客戶端發(fā)送數(shù)據(jù)存儲請求,將查找失敗的數(shù)據(jù)重新寫入緩存;若在key文件中不存在與查找失敗的數(shù)據(jù)匹配的key值,貝U返回null,結(jié)束流程。
[0084]本發(fā)明提供的一種持久化的數(shù)據(jù)存儲方法及裝置,采用分布式文件系統(tǒng)對緩存中的數(shù)據(jù)進行備份,并且實現(xiàn)了緩存與分布式文件系統(tǒng)中的數(shù)據(jù)的互相備份,保障了數(shù)據(jù)的安全性和可靠性;采用分布式文件系統(tǒng)存儲數(shù)據(jù)的特點,數(shù)據(jù)是存儲在分布式文件系統(tǒng)的不同的存儲節(jié)點上,存儲空間可以動態(tài)伸縮;另外,緩存與分布式文件系統(tǒng)中的數(shù)據(jù)實時保持一致,不會因為數(shù)據(jù)備份時間的差異而導(dǎo)致數(shù)據(jù)的不一致性或數(shù)據(jù)的丟失。
[0085]本發(fā)明提供的一種持久化的數(shù)據(jù)查詢方法及系統(tǒng),當(dāng)接收到應(yīng)用程序發(fā)送的數(shù)據(jù)查詢操作請求,首先從緩存中查找匹配的數(shù)據(jù),如果在緩存中查找失敗,再從分布式文件系統(tǒng)中查找匹配的數(shù)據(jù),這樣當(dāng)緩存上的查詢操作發(fā)生異?;蛘呔彺姘l(fā)生故障,就可以從分布式文件系統(tǒng)中查詢,保證了緩存服務(wù)的故障不會導(dǎo)致業(yè)務(wù)中斷,也即保證了系統(tǒng)的安全性和高可用性。
[0086]以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1.一種持久化的數(shù)據(jù)存儲方法,其特征在于,包括: 步驟S201、接收應(yīng)用程序發(fā)送的數(shù)據(jù)存儲操作請求,將與所述數(shù)據(jù)存儲操作請求匹配的數(shù)據(jù)寫入緩存,并在分布式文件系統(tǒng)中創(chuàng)建能標(biāo)識所述數(shù)據(jù)的至少一個key文件; 步驟S202、緩存客戶端從所述key文件中獲取能標(biāo)識數(shù)據(jù)的至少一個key值; 步驟S203、根據(jù)所述獲取的至少一個key值,在緩存中查找與所述key值匹配的數(shù)據(jù);步驟S204、將在緩存中查找到的與所述key值匹配的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并刪除與所述寫入分布式文件系統(tǒng)的數(shù)據(jù)對應(yīng)的key文件中的key值。
2.如權(quán)利要求1所述的數(shù)據(jù)存儲方法,其特征在于,所述步驟S201包括: 在所述數(shù)據(jù)寫入緩存失敗的情況下,將所述寫入緩存失敗的數(shù)據(jù)直接寫入分布式文件系統(tǒng)中。
3.如權(quán)利要求2所述的數(shù)據(jù)存儲方法,其特征在于,所述步驟S202包括: 緩存客戶端實時從key文件中獲取沒有寫入分布式文件系統(tǒng)中的數(shù)據(jù)對應(yīng)的key值。
4.如權(quán)利要求1所述的數(shù)據(jù)存儲方法,其特征在于,執(zhí)行步驟S203之后還包括: 若在緩存中未查找到與所述key值匹配的數(shù)據(jù),則將查找失敗信息發(fā)送給應(yīng)用程序,請求應(yīng)用程序重新向數(shù)據(jù)庫客戶端發(fā)送數(shù)據(jù)存儲操作請求,將查找失敗的數(shù)據(jù)寫入緩存。
5.一種持久化的數(shù)據(jù)存儲裝置,其特征在于,包括: 第一數(shù)據(jù)寫入模塊,用于接收應(yīng)用程序發(fā)送的數(shù)據(jù)存儲操作請求,將與所述數(shù)據(jù)存儲操作請求匹配的數(shù)據(jù)寫入緩存,并在分布式文件系統(tǒng)中創(chuàng)建能標(biāo)識所述數(shù)據(jù)的至少一個key文件; 數(shù)據(jù)標(biāo)識獲取模塊,用于調(diào)用緩存客戶端從所述key文件中獲取能標(biāo)識數(shù)據(jù)的至少一個key值; 數(shù)據(jù)查找模塊,用于根據(jù)所述獲取的至少一個key值,在緩存中查找與所述key值匹配的數(shù)據(jù); 第二數(shù)據(jù)寫入模塊,用于將在緩存中查找到的與所述key值匹配的數(shù)據(jù)寫入分布式文件系統(tǒng)中,并刪除與所述寫入分布式文件系統(tǒng)的數(shù)據(jù)對應(yīng)的key文件中的key值。
6.如權(quán)利要求5所述的數(shù)據(jù)存儲裝置,其特征在于,還包括: 第一請求模塊,用于若在緩存中未查找到與所述key值匹配的數(shù)據(jù),將查找失敗信息發(fā)送給應(yīng)用程序,請求應(yīng)用程序重新向數(shù)據(jù)庫客戶端發(fā)送數(shù)據(jù)存儲操作請求,將查找失敗的數(shù)據(jù)寫入緩存。
7.一種持久化的數(shù)據(jù)查詢方法,其特征在于,包括: 步驟S601、預(yù)先通過權(quán)利要求1-4任一項所述的持久化的數(shù)據(jù)存儲方法完成數(shù)據(jù)存儲; 步驟S602、接收應(yīng)用程序發(fā)送的數(shù)據(jù)查詢操作請求,在緩存中查找與所述數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù); 步驟S603、若查詢成功,則將查詢到的匹配的數(shù)據(jù)返回給所述應(yīng)用程序;若查詢失敗,則在分布式文件系統(tǒng)中查詢匹配的數(shù)據(jù); 步驟S604、在分布式文件系統(tǒng)中查詢到匹配的數(shù)據(jù)的情況下,將查詢到的匹配的的數(shù)據(jù)返回給應(yīng)用程序并寫入緩存。
8.如權(quán)利要求7所述的數(shù)據(jù)查詢方法,其特征在于,所述執(zhí)行步驟S603之后還包括: 在分布式文件系統(tǒng)中未查找到匹配的數(shù)據(jù)的情況下,讀取分布式文件系統(tǒng)中的key文件,并判斷是否存在與所述數(shù)據(jù)匹配的key值; 若存在,則向應(yīng)用程序請求重新將查找失敗的數(shù)據(jù)寫入緩存。
9.一種持久化的數(shù)據(jù)查詢系統(tǒng),其特征在于,預(yù)先通過權(quán)利要求5至6任一項所述的持久化的數(shù)據(jù)存儲裝置,完成數(shù)據(jù)的存儲,且所述持久化的數(shù)據(jù)查詢系統(tǒng)還包括: 第一數(shù)據(jù)查詢模塊,用于接收應(yīng)用程序發(fā)送的數(shù)據(jù)查詢操作,從緩存中查找與所述數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù); 第二數(shù)據(jù)查詢模塊,用于當(dāng)在緩存中未查詢到與所述數(shù)據(jù)查詢操作請求匹配的數(shù)據(jù)時,在分布式文件系統(tǒng)中查詢匹配的數(shù)據(jù); 第三數(shù)據(jù)寫入模塊,用于當(dāng)在分布式文件系統(tǒng)中查詢到匹配的數(shù)據(jù)時,將查詢到的匹配的數(shù)據(jù)返回給應(yīng)用程序并寫入緩存。
10.如權(quán)利要求9所述的數(shù)據(jù)查詢系統(tǒng),其特征在于,還包括: 第二請求模塊,用于當(dāng)在分布式文件系統(tǒng)中未查詢到匹配的數(shù)據(jù)時,讀取分布式文件系統(tǒng)中的key文件,并判斷是否存在與所述數(shù)據(jù)匹配的key值;若存在,則向應(yīng)用程序請求重新將查找失敗的數(shù)據(jù)寫入緩存。
【文檔編號】G06F17/30GK104317926SQ201410601861
【公開日】2015年1月28日 申請日期:2014年10月31日 優(yōu)先權(quán)日:2014年10月31日
【發(fā)明者】牛曉亮 申請人:北京思特奇信息技術(shù)股份有限公司