一種支持?jǐn)?shù)據(jù)持久化的內(nèi)存存取方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及基于支持?jǐn)?shù)據(jù)持久化的內(nèi)存對(duì)象緩存系統(tǒng)的數(shù)據(jù)存取方法。
【背景技術(shù)】
[0002]Memcached是一個(gè)高性能的內(nèi)存對(duì)象緩存系統(tǒng),用于動(dòng)態(tài)Web應(yīng)用以減輕數(shù)據(jù)庫負(fù)載。它通過在內(nèi)存中緩存數(shù)據(jù)和對(duì)象來減少讀取數(shù)據(jù)庫的次數(shù),從而提高動(dòng)態(tài)、數(shù)據(jù)庫驅(qū)動(dòng)網(wǎng)站的速度,但是Memcached只是一個(gè)內(nèi)存緩存系統(tǒng),數(shù)據(jù)不能夠永久保存,當(dāng)程序出現(xiàn)異常和突然斷電情況關(guān)閉情況下數(shù)據(jù)會(huì)完全丟失,不適合有高安全性的需要,極大的限制了它的適用場(chǎng)景。Berkeleydb是一個(gè)高性能key-value,嵌入式數(shù)據(jù)庫,數(shù)據(jù)庫輕巧高效,能夠支持?jǐn)?shù)千的并發(fā)線程同時(shí)操作數(shù)據(jù)庫,最高支持256TB數(shù)據(jù),支持集群功能,數(shù)據(jù)同步,集群高可用等很多功能,但是Berkeleydb是一個(gè)嵌入式數(shù)據(jù)庫,只提供API,沒有一個(gè)友好網(wǎng)絡(luò)接口以及訪問協(xié)議,集群添加,刪除以及集群配置,啟動(dòng)都有嚴(yán)格要求,離實(shí)際使用環(huán)境距離還比較遠(yuǎn),必須通過大量開發(fā)和測(cè)試工作。
【發(fā)明內(nèi)容】
[0003]為了克服現(xiàn)有技術(shù)的不足,本發(fā)明的目的在于提供一種支持?jǐn)?shù)據(jù)持久化的內(nèi)存存取方法和裝置,利用Memcached存儲(chǔ)系統(tǒng)與berkeley數(shù)據(jù)庫結(jié)合所組成的支持?jǐn)?shù)據(jù)持久化的存儲(chǔ)系統(tǒng),將單實(shí)例存儲(chǔ)方式擴(kuò)展為集群模式,實(shí)現(xiàn)多點(diǎn)同步讀寫。
[0004]為解決上述問題,本發(fā)明所采用的技術(shù)方案如下:
[0005]方案一:
[0006]一種支持?jǐn)?shù)據(jù)持久化的內(nèi)存存取方法,包括以下步驟:
[0007]S1:接收客戶端的數(shù)據(jù)請(qǐng)求,并判斷該數(shù)據(jù)請(qǐng)求是否符合標(biāo)準(zhǔn)協(xié)議,若是,則執(zhí)行S2,否則拒絕該數(shù)據(jù)請(qǐng)求;
[0008]S2:判斷該數(shù)據(jù)請(qǐng)求為數(shù)據(jù)讀取請(qǐng)求還是數(shù)據(jù)寫入請(qǐng)求,若為數(shù)據(jù)寫入請(qǐng)求,執(zhí)行S3,若為數(shù)據(jù)讀取請(qǐng)求,執(zhí)行S4 ;
[0009]S3:解析數(shù)據(jù)寫入請(qǐng)求,根據(jù)待寫入數(shù)據(jù)建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu),并調(diào)用存儲(chǔ)接口將待寫入數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)存儲(chǔ)端;
[0010]S4:解析數(shù)據(jù)讀取請(qǐng)求,并調(diào)用存儲(chǔ)接口向數(shù)據(jù)存儲(chǔ)端獲取相應(yīng)的數(shù)據(jù)。
[0011]進(jìn)一步地,數(shù)據(jù)存儲(chǔ)端為由一個(gè)主節(jié)點(diǎn)和多個(gè)從節(jié)點(diǎn)組成的數(shù)據(jù)存儲(chǔ)集群;
[0012]在S3中,待寫入數(shù)據(jù)首先嘗試寫入主節(jié)點(diǎn)中,若寫入失敗,則返回?cái)?shù)據(jù)寫入失敗提示,若寫入成功,則由主節(jié)點(diǎn)將寫入的數(shù)據(jù)依次同步至各個(gè)從節(jié)點(diǎn)中;
[0013]在S4中,在調(diào)用存儲(chǔ)接口向數(shù)據(jù)存儲(chǔ)端獲取相應(yīng)的數(shù)據(jù)的過程中,若數(shù)據(jù)讀取失敗,則判斷當(dāng)前嘗試讀取的節(jié)點(diǎn)類型,若為主節(jié)點(diǎn),則返回?cái)?shù)據(jù)讀取失敗提示,若為從節(jié)點(diǎn),則跳轉(zhuǎn)至主節(jié)點(diǎn)嘗試讀取數(shù)據(jù)。
[0014]進(jìn)一步地,組成數(shù)據(jù)存儲(chǔ)集群包括以下步驟:
[0015]接收用戶對(duì)主節(jié)點(diǎn)所設(shè)置的數(shù)據(jù)同步端口信息、IP地址信息和對(duì)外服務(wù)端口信息,并啟動(dòng)主節(jié)點(diǎn);
[0016]接收用戶對(duì)從節(jié)點(diǎn)所設(shè)置的數(shù)據(jù)同步端口信息、IP地址信息和對(duì)外服務(wù)端口信息,并向主節(jié)點(diǎn)發(fā)起連接請(qǐng)求,其中,從節(jié)點(diǎn)的IP地址為根據(jù)主節(jié)點(diǎn)的IP地址所分配。
[0017]進(jìn)一步地,標(biāo)準(zhǔn)協(xié)議為標(biāo)準(zhǔn)的Memcached協(xié)議,存儲(chǔ)接口為Berkeleydb存儲(chǔ)接口。
[0018]方案二:
[0019]一種支持?jǐn)?shù)據(jù)持久化的內(nèi)存存取裝置,包括以下模塊:
[0020]請(qǐng)求合法性判斷模塊:用于接收客戶端的數(shù)據(jù)請(qǐng)求,并判斷該數(shù)據(jù)請(qǐng)求是否符合標(biāo)準(zhǔn)協(xié)議,若是,則執(zhí)行請(qǐng)求類型判斷模塊,否則拒絕該數(shù)據(jù)請(qǐng)求;
[0021]請(qǐng)求類型判斷模塊:用于判斷該數(shù)據(jù)請(qǐng)求為數(shù)據(jù)讀取請(qǐng)求還是數(shù)據(jù)寫入請(qǐng)求,若為數(shù)據(jù)寫入請(qǐng)求,執(zhí)行寫入請(qǐng)求處理模塊,若為數(shù)據(jù)讀取請(qǐng)求,執(zhí)行讀取請(qǐng)求處理模塊;
[0022]寫入請(qǐng)求處理模塊:用于解析數(shù)據(jù)寫入請(qǐng)求,根據(jù)待寫入數(shù)據(jù)建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu),并調(diào)用存儲(chǔ)接口將待寫入數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)存儲(chǔ)端;
[0023]讀取請(qǐng)求處理模塊:解析數(shù)據(jù)讀取請(qǐng)求,并調(diào)用存儲(chǔ)接口向數(shù)據(jù)存儲(chǔ)端獲取相應(yīng)的數(shù)據(jù)。
[0024]進(jìn)一步地,數(shù)據(jù)存儲(chǔ)端為由一個(gè)主節(jié)點(diǎn)和多個(gè)從節(jié)點(diǎn)組成的數(shù)據(jù)存儲(chǔ)集群;
[0025]在寫入請(qǐng)求處理模塊中,待寫入數(shù)據(jù)首先嘗試寫入主節(jié)點(diǎn)中,若寫入失敗,則返回?cái)?shù)據(jù)寫入失敗提示,若寫入成功,則由主節(jié)點(diǎn)將寫入的數(shù)據(jù)依次同步至各個(gè)從節(jié)點(diǎn)中;
[0026]在讀取請(qǐng)求處理模塊中,在調(diào)用存儲(chǔ)接口向數(shù)據(jù)存儲(chǔ)端獲取相應(yīng)的數(shù)據(jù)的過程中,若數(shù)據(jù)讀取失敗,則判斷當(dāng)前嘗試讀取的節(jié)點(diǎn)類型,若為主節(jié)點(diǎn),則返回?cái)?shù)據(jù)讀取失敗提示,若為從節(jié)點(diǎn),則跳轉(zhuǎn)至主節(jié)點(diǎn)嘗試讀取數(shù)據(jù)。
[0027]進(jìn)一步地,組成數(shù)據(jù)存儲(chǔ)集群包括以下步驟:
[0028]接收用戶對(duì)主節(jié)點(diǎn)所設(shè)置的數(shù)據(jù)同步端口信息、IP地址信息和對(duì)外服務(wù)端口信息,并啟動(dòng)主節(jié)點(diǎn);
[0029]接收用戶對(duì)從節(jié)點(diǎn)所設(shè)置的數(shù)據(jù)同步端口信息、IP地址信息和對(duì)外服務(wù)端口信息,并向主節(jié)點(diǎn)發(fā)起連接請(qǐng)求,其中,從節(jié)點(diǎn)的IP地址為根據(jù)主節(jié)點(diǎn)的IP地址所分配。
[0030]進(jìn)一步地,標(biāo)準(zhǔn)協(xié)議為標(biāo)準(zhǔn)的Memcached協(xié)議,存儲(chǔ)接口為Berkeleydb存儲(chǔ)接口。
[0031]相比現(xiàn)有技術(shù),本發(fā)明的有益效果在于:通過結(jié)合Memcached和Berkeleydb得到一個(gè)支持?jǐn)?shù)據(jù)持久化的內(nèi)存Key-value數(shù)據(jù)庫系統(tǒng),利用該數(shù)據(jù)庫系統(tǒng)進(jìn)行數(shù)據(jù)存取業(yè)務(wù),能保證數(shù)據(jù)的高速讀寫,而且通過將持久化組件組成集群實(shí)例,避免出現(xiàn)單實(shí)例時(shí)數(shù)據(jù)或者實(shí)例失效導(dǎo)致數(shù)據(jù)損失的問題,而且通過配置集群中的節(jié)點(diǎn)實(shí)現(xiàn)負(fù)載均衡。
【附圖說明】
[0032]圖1為本發(fā)明的一種支持?jǐn)?shù)據(jù)持久化的內(nèi)存存取方法的流程圖。
【具體實(shí)施方式】
[0033]下面,結(jié)合附圖以及【具體實(shí)施方式】,對(duì)本發(fā)明做進(jìn)一步描述:
[0034]本發(fā)明中,使用Memcached作為基礎(chǔ),保留了 Memcached的對(duì)外接口,修改了Memcached內(nèi)部的數(shù)據(jù)保存機(jī)制,利用Berkeleydb的存儲(chǔ)接口實(shí)現(xiàn)了數(shù)據(jù)的持久化,Berkeleydb作為持久化組件,得到一個(gè)支持?jǐn)?shù)據(jù)持久化的內(nèi)存Key-value數(shù)據(jù)庫系統(tǒng)。基于該數(shù)據(jù)庫系統(tǒng),參考圖1為本發(fā)明的一種支持?jǐn)?shù)據(jù)持久化的內(nèi)存存取方法,包括以下步驟:
[0035]S1:接收客戶端的數(shù)據(jù)請(qǐng)求,并判斷該數(shù)據(jù)請(qǐng)求是否符合標(biāo)準(zhǔn)協(xié)議,若是,則執(zhí)行S2,否則拒絕該數(shù)據(jù)請(qǐng)求。
[0036]接收到數(shù)據(jù)請(qǐng)求后會(huì)利用Memcached協(xié)議解析數(shù)據(jù)請(qǐng)求,若解析成功,則表示該數(shù)據(jù)請(qǐng)求合法,即滿足Memcached協(xié)議的標(biāo)準(zhǔn),若解析失敗,則表示該數(shù)據(jù)請(qǐng)求為不合法的,拒絕該數(shù)據(jù)請(qǐng)求。
[0037]S2:判斷該數(shù)據(jù)請(qǐng)求為數(shù)據(jù)讀取請(qǐng)求還是數(shù)據(jù)寫入請(qǐng)求,若為數(shù)據(jù)寫入請(qǐng)求,執(zhí)行S3,若為數(shù)據(jù)讀取請(qǐng)求,執(zhí)行S4。數(shù)據(jù)請(qǐng)求包括兩種類型,一種是數(shù)據(jù)讀取請(qǐng)求,即從持久化組件中讀取數(shù)據(jù),另一種是數(shù)據(jù)寫入請(qǐng)求,即向持久化組件中寫入數(shù)據(jù)。
[0038]S3:解析數(shù)據(jù)寫入請(qǐng)求,根據(jù)待寫入數(shù)據(jù)建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu),并調(diào)用存儲(chǔ)接口將待寫入數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)存儲(chǔ)端。
[0039]數(shù)據(jù)存儲(chǔ)端指持久化組件,首先解析數(shù)據(jù)寫入請(qǐng)求所對(duì)應(yīng)的業(yè)務(wù)內(nèi)容,結(jié)合待寫入數(shù)據(jù)建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu),具體的數(shù)據(jù)結(jié)構(gòu)由業(yè)務(wù)內(nèi)容定義,不作詳述,然后調(diào)用Berkeleydb存儲(chǔ)接口將建立相應(yīng)數(shù)據(jù)結(jié)構(gòu)后的數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)存儲(chǔ)端。
[0040]S4:解析數(shù)據(jù)讀取請(qǐng)求,并調(diào)用存儲(chǔ)接口向數(shù)據(jù)存儲(chǔ)端獲取相應(yīng)的數(shù)據(jù)。
[0041]首先解析數(shù)據(jù)讀取請(qǐng)求所對(duì)應(yīng)的的業(yè)務(wù)內(nèi)容,根據(jù)待讀取數(shù)據(jù)調(diào)用Berkeleydb存儲(chǔ)接口從數(shù)據(jù)存儲(chǔ)端獲取相應(yīng)的數(shù)據(jù)。
[0042]上述中的數(shù)據(jù)存儲(chǔ)端為由一個(gè)主節(jié)點(diǎn)和多個(gè)從節(jié)點(diǎn)組成的數(shù)據(jù)存儲(chǔ)集群,數(shù)據(jù)存儲(chǔ)集群的運(yùn)行機(jī)制如下:
[0043]首先設(shè)置主節(jié)點(diǎn)的數(shù)據(jù)同步端口,綁定主節(jié)點(diǎn)的IP地址和設(shè)置主節(jié)點(diǎn)的對(duì)外服務(wù)端口,其中,數(shù)據(jù)同步端口供內(nèi)部數(shù)據(jù)傳輸使用,主節(jié)點(diǎn)的IP地址和對(duì)外服務(wù)端口提供給外部客戶端連接使用;設(shè)置完主節(jié)點(diǎn)并啟動(dòng)主節(jié)點(diǎn)后,便可以允許其它節(jié)點(diǎn)的加入,加入的節(jié)點(diǎn)作為從節(jié)點(diǎn),通過設(shè)置從節(jié)點(diǎn)的數(shù)據(jù)同步端口,綁定從節(jié)點(diǎn)的IP地址和設(shè)置從節(jié)點(diǎn)的對(duì)外服務(wù)端口建立從節(jié)點(diǎn)的基本連接信息,其中,從節(jié)點(diǎn)的IP地址為根據(jù)主節(jié)點(diǎn)的IP地址所分配,例如,主節(jié)點(diǎn)的IP地址為192.168.1.100,則從節(jié)點(diǎn)的IP地址可以為192.168.1.101。在數(shù)據(jù)存儲(chǔ)集群內(nèi),如