專利名稱:一種支持歷史Key信息的內(nèi)存數(shù)據(jù)庫(kù)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)應(yīng)用領(lǐng)域,尤其涉及內(nèi)存數(shù)據(jù)庫(kù)領(lǐng)域,可用于空中交通管制系 統(tǒng)(ATC)中需要保存歷史信息的數(shù)據(jù)存儲(chǔ)。
背景技術(shù):
ATC系統(tǒng)中,在集群或雙機(jī)服務(wù)器環(huán)境中,雷達(dá)數(shù)據(jù)處理同一飛機(jī)目標(biāo)的多個(gè)跟蹤 數(shù)據(jù)。這些目標(biāo)跟蹤數(shù)據(jù)是在時(shí)間流逝中被雷達(dá)探測(cè)到并被處理的。一般的,同一個(gè)目標(biāo)被 賦以一個(gè)唯一的編號(hào)(即航跡號(hào))直到飛機(jī)目標(biāo)消失。隨著時(shí)間的流逝和處理的進(jìn)行,一個(gè) 目標(biāo)將在一個(gè)航跡號(hào)下產(chǎn)生連續(xù)的多個(gè)處理目標(biāo)點(diǎn)信息。在集群服務(wù)器環(huán)境中,雷達(dá)的數(shù) 據(jù)處理集中在主態(tài)的進(jìn)程或主機(jī)中。當(dāng)這些主機(jī)關(guān)閉或進(jìn)程失效時(shí),集群將發(fā)生主備切換, 備份機(jī)變?yōu)橹鲬B(tài)機(jī),這時(shí)該主機(jī)將重新跟蹤目標(biāo),而航跡號(hào)的生成也會(huì)和之前不一致,這為 系統(tǒng)的其它處理帶來不便。所以通常主態(tài)機(jī)的航跡歷史數(shù)據(jù)將定時(shí)送往備份機(jī),以便發(fā)生 主備切換時(shí),系統(tǒng)可以較好的延續(xù)已有的航跡號(hào)進(jìn)行處理。如果在運(yùn)行過程中,集群中其它 主機(jī)存有這些目標(biāo)的中間處理歷史數(shù)據(jù),其他主機(jī)就可以直接提取這些目標(biāo)的歷史中間數(shù) 據(jù),直接進(jìn)行處理,這樣就可以解決沒有歷史數(shù)據(jù)而導(dǎo)致的跟蹤精度不高的問題。采用這種 方法以后,其它主機(jī)或進(jìn)程在備份狀態(tài)時(shí)可以不接收雷達(dá)數(shù)據(jù)并進(jìn)行相關(guān)處理,也不必進(jìn) 行這些歷史數(shù)據(jù)的同步操作,大大節(jié)省CPU資源。memcached (http//memcached. org/)是著名的內(nèi)存數(shù)據(jù)庫(kù),通過部署在不同主機(jī) 上memcached還具有分布式內(nèi)存數(shù)據(jù)庫(kù)的特征。在本發(fā)明中為提高訪問效率各主機(jī)采用了 memcached內(nèi)存數(shù)據(jù)庫(kù)。內(nèi)存數(shù)據(jù)庫(kù)是一種Key-value數(shù)據(jù)庫(kù),它是一種非關(guān)系數(shù)據(jù)庫(kù),這 種數(shù)據(jù)庫(kù)適合存放對(duì)應(yīng)關(guān)系明確、可以用Key值進(jìn)行檢索查詢的數(shù)據(jù)。在一些特殊的應(yīng)用 中,如集群或雙機(jī)環(huán)境中,雷達(dá)數(shù)據(jù)處理同一目標(biāo)的多個(gè)跟蹤數(shù)據(jù),這種數(shù)據(jù)需要在多個(gè)主 機(jī)間進(jìn)行存儲(chǔ),即要求對(duì)同一 Key有多條數(shù)據(jù)的存儲(chǔ),但memcahed不支持重復(fù)Key的存儲(chǔ), 本發(fā)明旨在對(duì)memcahed進(jìn)行改造,加入了支持歷史Key值存儲(chǔ)的技術(shù),對(duì)于雷達(dá)數(shù)據(jù)處理 的應(yīng)用,Key即為航跡號(hào)。
發(fā)明內(nèi)容
本發(fā)明的目的是解決以ATC系統(tǒng)為代表的分布式系統(tǒng)中以Key-Value方式對(duì)同一 Key值存儲(chǔ)的歷史數(shù)據(jù)的訪問問題。本發(fā)明的基本思路是對(duì)memcahed進(jìn)行改造,改造后的memcahed成為能夠支持歷 史信息的Hmemcached,支持對(duì)歷史Key值數(shù)據(jù)的存儲(chǔ)。Key值的數(shù)據(jù)存儲(chǔ)不是覆蓋,而是采 用不斷追加記錄的方式。一個(gè)Key的歷史數(shù)據(jù)的數(shù)量可以根據(jù)具體應(yīng)用的需要而設(shè)定。使 用者在追加時(shí)不需考慮數(shù)據(jù)的歷史特征。本發(fā)明的目的是這樣達(dá)到的對(duì)memcahed中的某些函數(shù)進(jìn)行改造,改造后的 memcahed成為能夠支持歷史信息的Hmemcached。對(duì)于同一 KEY值不同的歷史數(shù)據(jù)在 Hmemcached內(nèi)部的存儲(chǔ)使用Key_No作為Key值的形式,No是值從0到MAX_RECN0_1中的某個(gè)數(shù)。當(dāng)主機(jī)中某個(gè)進(jìn)程提出對(duì)某個(gè)Key寫入請(qǐng)求時(shí),啟動(dòng)數(shù)據(jù)操作流程,由HMemcached通 過查詢當(dāng)前操作的Key的記錄條數(shù),若未超過設(shè)定的最大記錄條數(shù),則直接追加一條記錄; 若超過設(shè)定的最大記錄條數(shù),則采用先進(jìn)先出的方法,刪除掉首條記錄,再將新記錄追加至 此Key的記錄中。系統(tǒng)中的數(shù)據(jù)以KEY-VALUE的方式存儲(chǔ),memcached客戶端實(shí)例化為N個(gè),N為集 群中主機(jī)的個(gè)數(shù)。每個(gè)客戶端連接一個(gè)集群環(huán)境中的服務(wù)器主機(jī),主態(tài)進(jìn)程調(diào)用對(duì)Key值 進(jìn)行賦值操作時(shí),調(diào)用每個(gè)客戶端實(shí)例對(duì)集群中主機(jī)的Hmemcached進(jìn)行寫入操作,數(shù)據(jù)被 寫入每個(gè)主機(jī)的Hmemecached管理的內(nèi)存中。所述對(duì)memcahed進(jìn)行改造包括增加自定義get_KeyitemList函數(shù),改造 process_update_command 函數(shù)、complete_nread 函數(shù)、process_get_command 函數(shù)禾口 process_delete_command 函數(shù)。在自定義get_KeyitemList函數(shù)中,獲得Key對(duì)應(yīng)的所有歷史item,存儲(chǔ)到作為返 回值的item_list鏈表中,確定返回該Key值有多少條記錄。在process_update_command加入對(duì)更新的Key值的處理,完成新記錄數(shù)據(jù)的加 入。在completejread函數(shù)中加入對(duì)更新的Key值的處理,完成新記錄數(shù)據(jù)的加入。在process_get_co_and加入讀取指定Key所有記錄數(shù)據(jù)的處理。在prOCeSS_delete_COmmand加入讀取指定Key所有記錄數(shù)據(jù)并進(jìn)行刪除處理。數(shù)據(jù)操作流程包括數(shù)據(jù)寫入、數(shù)據(jù)讀出和數(shù)據(jù)刪除。數(shù)據(jù)操作流程中的數(shù)據(jù)寫入過程是當(dāng)Hmemcached需要寫入數(shù)據(jù)時(shí),調(diào)用改造后 的process_update_command函數(shù),該函數(shù)將當(dāng)前要操作的Key中的所有的歷史記錄讀出到 一個(gè)臨時(shí)item鏈表tmpitemList中,此鏈表中的Key_N0的NO是從0到MAX_RECN0_1,其中 Key_N0記錄對(duì)應(yīng)的是數(shù)據(jù)庫(kù)中Key_N0+l的值。然后,根據(jù)當(dāng)前最大的Key_N0作加一操作, 得到新的 Key_N0,調(diào)用 item_alloc 分配一個(gè) new_item。當(dāng) tmpitemList 的 size 大于 MAX_ RECNO時(shí),則新的Key_N0為Key_ MAX_RECN0 ;此后調(diào)用改造后的complete_nread進(jìn)行數(shù)據(jù) 庫(kù)的更新操作,調(diào)用 store_item 存儲(chǔ) new_item。若 tmpitemList 的 size 大于 MAX_RECN0, 則采用先進(jìn)先出策略,將Key_N0中No的最小值對(duì)應(yīng)的記錄刪除,調(diào)用d0_item_i^place函 數(shù)將tmpitemList里的Key_N0對(duì)應(yīng)的item代替數(shù)據(jù)庫(kù)中舊的Key_N0對(duì)應(yīng)的item。數(shù)據(jù)操作流程中的數(shù)據(jù)讀出過程是當(dāng)Hmemcached需要讀取數(shù)據(jù)時(shí),調(diào)用改造后 的process_get_command的函數(shù)讀出某個(gè)Key的數(shù)據(jù),將ΚθΥ_0···Ν0_1的所有數(shù)據(jù)一起讀 出,并返回當(dāng)前Key值下的記錄條目。數(shù)據(jù)操作流程中的數(shù)據(jù)刪除過程是當(dāng)memcached需要?jiǎng)h除某個(gè)Key值數(shù)據(jù)時(shí),調(diào) 用改造后的process_delete_command的函數(shù)將Κθγ_(>··Ν0-1的所有數(shù)據(jù)一起刪除。系統(tǒng)中的數(shù)據(jù)以KEY-VALUE的方式存儲(chǔ),使用memcahed內(nèi)存數(shù)據(jù)庫(kù)軟件的客戶端 無需改造,支持^^ get Add replace delete常規(guī)操作。本發(fā)明的積極效果是
1、有效解決了以ATC系統(tǒng)為代表的分布式系統(tǒng)中以Key-Value方式對(duì)同一 Key值存儲(chǔ) 的歷史數(shù)據(jù)的訪問問題。在發(fā)生主備切換時(shí),系統(tǒng)可以較好的延續(xù)已有的數(shù)據(jù)進(jìn)行處理,解 決沒有歷史數(shù)據(jù)而導(dǎo)致的跟蹤精度不高的問題。
2、其它主機(jī)或進(jìn)程在備份狀態(tài)時(shí)可以不接收雷達(dá)數(shù)據(jù)并進(jìn)行相關(guān)處理,也不必進(jìn) 行這些歷史數(shù)據(jù)的同步操作,大大節(jié)省CPU資源。3、Memcached的客戶端實(shí)現(xiàn)非常多,本發(fā)明使用現(xiàn)存的memcached客戶端而無需 改動(dòng),支持如kt get Add replace delete常規(guī)操作,方便、實(shí)用。
圖1 是 get_KeyitemList 實(shí)現(xiàn)流程圖。圖 2 是改造后的 process_update_command 流程圖。圖3是改造后的complete_nread流程圖。圖4是改造后的process_get_command流程圖。圖 5 是改造后的 process_delete_command 流程圖。
具體實(shí)施例方式對(duì)memcahed內(nèi)存數(shù)據(jù)庫(kù)中的函數(shù)進(jìn)行改造,包括新增自定義get_KeyitemLi st函 數(shù),改造 process_update_command、complete_nread、process_get_command 禾口 process_ delete_command函數(shù)。改造后的memcahed數(shù)據(jù)庫(kù)成為能夠支持歷史信息的Hmemcached數(shù) 據(jù)庫(kù),支持對(duì)歷史Key值數(shù)據(jù)的存儲(chǔ)。Key值的數(shù)據(jù)存儲(chǔ)不是覆蓋,而是采用不斷追加記錄 的方式。一個(gè)Key的歷史數(shù)據(jù)的數(shù)量可以根據(jù)具體應(yīng)用的需要而設(shè)定。使用者在追加時(shí)不 需考慮數(shù)據(jù)的歷史特征。使用的過程非常簡(jiǎn)單,使用者只需從網(wǎng)上下載一個(gè)memcached客戶端的實(shí)現(xiàn),對(duì) 其進(jìn)行封裝memcached客戶端實(shí)例化為N個(gè),N為集群中主機(jī)的個(gè)數(shù),每個(gè)客戶端連接一 個(gè)集群環(huán)境中的服務(wù)器主機(jī)。主態(tài)進(jìn)程調(diào)用對(duì)Key值進(jìn)行賦值操作時(shí),調(diào)用每個(gè)實(shí)例進(jìn)行 寫入操作,這樣數(shù)據(jù)將被寫入每個(gè)主機(jī)的Hmemecached管理的內(nèi)存中。主備發(fā)生切換時(shí),從 備機(jī)升級(jí)為主機(jī)的Hmemecached內(nèi)存中已經(jīng)有相關(guān)的歷史數(shù)據(jù),可以直接讀取出來并繼續(xù) 進(jìn)行處理。使用memcahed內(nèi)存數(shù)據(jù)庫(kù)軟件的客戶端無需改造,支持kt get Add replace delete常規(guī)操作。對(duì)于同一 KEY值不同的數(shù)據(jù)在Hmemcached內(nèi)部的存儲(chǔ)使用Key_N0作為Key值的 形式,NO是值從0到MAX_RECN0-1中的某個(gè)數(shù),當(dāng)主機(jī)中某個(gè)進(jìn)程提出對(duì)某個(gè)Key寫入請(qǐng) 求時(shí),啟動(dòng)數(shù)據(jù)操作流程,由HMemcached通過查詢當(dāng)前操作的Key的記錄條數(shù),若未超過設(shè) 定的最大記錄條數(shù),則直接追加一條記錄;若超過設(shè)定的最大記錄條數(shù),則采用先進(jìn)先出的 方法,刪除掉首條記錄,再將新記錄追加至此Key的記錄中;
附圖給出了對(duì)memcahed數(shù)據(jù)庫(kù)中的函數(shù)進(jìn)行改造的內(nèi)容和過程。在自定義getJfeyitemList函數(shù)中,獲得Key對(duì)應(yīng)的所有item,存儲(chǔ)到作為返回值 的item_list鏈表中,確定返回該Key值有多少條記錄。定義的方法是開始后設(shè)No=0,生 成Key_No字符串,對(duì)Key_No調(diào)用do-item-get-notedeleted函數(shù),將讀到數(shù)據(jù)放入item_ list列表,判斷是否No > =系統(tǒng)允許的最大記錄數(shù)MAX_RECN0,否,No=No+l,回到Key_no=0 后,重新生成Key_No字符串,是,處理結(jié)束,返回No。在process_update_command加入對(duì)更新的Key值的處理,完成新記錄數(shù)據(jù)的加 入。處理的具體方法是在原有代碼if語句后加入N=get_KeyitemList,讀出Key的所有記
5錄放入緩存g_itemlist中,然后判斷是否N > =系統(tǒng)允許的最大記錄數(shù)MAX_RECN0,是,將 新加記錄放入g_itemlist中,記錄名為Key_d,其中,d=MAX_RECN0,回到原有代碼,處理結(jié) 束;否,將新加記錄放Agjtemlist中,記錄名為Key_d,其中,d=N ;回到原有代碼,處理結(jié)
束ο在completejread函數(shù)中加入對(duì)更新的Key值的處理,完成新記錄數(shù)據(jù)的加入。 處理的具體方法是在原有代碼 STATS_L0CK() ;g_stats. set_cmds++ ;STATS_UNL0CK()之后 加入N=g_itemlist中記錄的個(gè)數(shù),判斷N=系統(tǒng)允許的最大記錄數(shù)MAX_RECN0 ?否,回原有 代碼,是,i=N,調(diào)用d0_item_i^place,將g_itemlist中第i條記錄替換當(dāng)前數(shù)據(jù)庫(kù)中的第 i-1條記錄,判斷若i > 1 ?是,回到i=N,否則到原代碼。在process_get_command加入讀取指定Key所有記錄數(shù)據(jù)的處理。處理的具體方 法是在原有代碼 do {while (Key_token- > length! =0)};Key=Key_token > value 之后力口 入N=get_KeyitemList,讀出Key的所有記錄放入緩存g_itemlist中,取i=0,判斷是否i < N 否,回到原有代碼,處理結(jié)束;是,生成Key_d字符串其中,d為i,獲得Key_d記錄的 長(zhǎng)度,回到原有代碼,在Key_token++語句前,然后,重復(fù)進(jìn)行i < N的判斷。在prOCeSS_delete_COmmand加入讀取指定Key所有記錄數(shù)據(jù)并進(jìn)行刪除處理。處 理的具體方法是在原有代碼 Key=tokens [Key_T0KEN]. value ; nKey=tokens [Key_T0KEN]. Ie之后加入N=get_Keyitemlist,讀出Key的所有記錄放入緩存g_itemlist中,當(dāng)i=0,判 斷i < N,否,回到原有代碼,處理結(jié)束,是,生成Key_d字符串(d為i),獲得Key_d記錄的 長(zhǎng)度,然后回到原有代碼,至函數(shù)尾部,并重復(fù)進(jìn)行是否i < N的判斷。數(shù)據(jù)操作流程包括數(shù)據(jù)寫入、數(shù)據(jù)讀出和數(shù)據(jù)刪除。數(shù)據(jù)操作流程中的數(shù)據(jù)寫入過程是當(dāng)Hmemcached需要寫入數(shù)據(jù)時(shí),調(diào)用改造后 的process_update_command函數(shù),該函數(shù)將當(dāng)前要操作的Key中的所有的歷史記錄讀出到 一個(gè)臨時(shí)item鏈表tmpitemList中。此鏈表中的Key_N0的NO是從0到MAX_RECN0_1,其中 Key_N0記錄對(duì)應(yīng)的是數(shù)據(jù)庫(kù)中Key_N0+l的值。然后,根據(jù)當(dāng)前最大的Key_N0作加一操作, 得到新的 Key_N0,調(diào)用 item_alloc 分配一個(gè) new_item ;當(dāng) tmpitemList 的 size 大于 MAX_ RECNO時(shí),則新的Key_N0為Key_MAX_RECN0 ;此后調(diào)用改造后的complete_nread進(jìn)行數(shù)據(jù) 庫(kù)的更新操作,調(diào)用 store_item 存儲(chǔ) new_item ;若 tmpitemList 的 size 大于 MAX_RECN0, 則采用先進(jìn)先出策略,將Key_N0中No的最小值對(duì)應(yīng)的記錄刪除,調(diào)用d0_item_i^place函 數(shù)將tmpitemList里的Key_N0對(duì)應(yīng)的item代替數(shù)據(jù)庫(kù)中舊的Key_N0對(duì)應(yīng)的item ;
數(shù)據(jù)操作流程中的數(shù)據(jù)讀出過程是當(dāng)Hmemcached需要讀取數(shù)據(jù)時(shí),調(diào)用改造后的 process_get_command的函數(shù)讀出某個(gè)Key的數(shù)據(jù),將ΚθΥ_0···Ν0_1的所有數(shù)據(jù)一起讀出, 并返回當(dāng)前Key值下的記錄條目。數(shù)據(jù)操作流程中的數(shù)據(jù)刪除過程是當(dāng)memcached需要?jiǎng)h除某個(gè)Key值數(shù)據(jù)時(shí),調(diào) 用改造后的process_delete_command的函數(shù)將Κθγ_(>··Ν0-1的所有數(shù)據(jù)一起刪除。
權(quán)利要求
1.一種支持歷史Key信息的內(nèi)存數(shù)據(jù)庫(kù),其特征在于對(duì)memcahed中的某些函數(shù)進(jìn)行 改造,改造后的memcahed成為能夠支持歷史信息的Hmemcached ;對(duì)于同一 KEY值不同的數(shù)據(jù)在Hmemcached內(nèi)部的存儲(chǔ)使用Key_N0作為Key值的形 式,NO是值從0到系統(tǒng)最大記錄數(shù)MAX_RECN0-1中的某個(gè)數(shù),當(dāng)主機(jī)中某個(gè)進(jìn)程提出對(duì)某個(gè) Key寫入請(qǐng)求時(shí),啟動(dòng)數(shù)據(jù)操作流程,由Hmemcached通過查詢當(dāng)前操作的Key的記錄條數(shù), 若未超過設(shè)定的最大記錄條數(shù),則直接追加一條記錄;若超過設(shè)定的最大記錄條數(shù),則采用 先進(jìn)先出的方法,刪除掉首條記錄,再將新記錄追加至此Key的記錄中;系統(tǒng)中的數(shù)據(jù)以KEY-VALUE的方式存儲(chǔ),memcached客戶端實(shí)例化為N個(gè),N為集群中 主機(jī)的個(gè)數(shù),每個(gè)客戶端連接一個(gè)集群環(huán)境中的服務(wù)器主機(jī),主態(tài)進(jìn)程調(diào)用對(duì)Key值進(jìn)行 賦值操作時(shí),調(diào)用每個(gè)客戶端實(shí)例對(duì)集群中主機(jī)的Hmemecached進(jìn)行寫入操作,數(shù)據(jù)被寫 入每個(gè)主機(jī)的Hmemecached管理的內(nèi)存中;所述對(duì)memcahed中的某些函數(shù)進(jìn)行改造包括增加自定義getJfeyitemList函數(shù),改 造 process_update_command 函數(shù)、complete_nread 函數(shù)、process_get_command 函數(shù)禾口 process_delete_command 函數(shù);在自定義getJfeyitemList函數(shù)中,獲得Key對(duì)應(yīng)的所有歷史item,存儲(chǔ)到作為返回值 的item_list鏈表中,確定返回該Key值有多少條記錄;在process_update_command加入對(duì)更新的Key值的處理,完成新記錄數(shù)據(jù)的加入; 在completejread函數(shù)中加入對(duì)更新的Key值的處理,完成新記錄數(shù)據(jù)的加入; 在process_get_command加入讀取指定Key所有記錄數(shù)據(jù)的處理; 在pr0cess_delete_c0mmand加入讀取指定Key所有記錄數(shù)據(jù)并進(jìn)行刪除處理; 數(shù)據(jù)操作流程包括數(shù)據(jù)寫入、數(shù)據(jù)讀出和數(shù)據(jù)刪除。
2.如權(quán)利要求1所述的內(nèi)存數(shù)據(jù)庫(kù),其特征在于所述數(shù)據(jù)操作流程中的數(shù)據(jù)寫入過 程是當(dāng)Hmemcached需要寫入數(shù)據(jù)時(shí),調(diào)用改造后的process_update_command函數(shù),該函 數(shù)將當(dāng)前要操作的Key中的所有的歷史記錄讀出到一個(gè)臨時(shí)item鏈表tmpitemList中,此 鏈表中的Key_N0的NO是從0到MAX_RECN0_1,其中Key_N0記錄對(duì)應(yīng)的是數(shù)據(jù)庫(kù)中Key_ N0+1的值;然后,根據(jù)當(dāng)前最大的Key_N0作加一操作,得到新的Key_N0,調(diào)用item_all0C 分配一個(gè) new_item ;當(dāng) tmpitemList 的 size 大于 MAX_RECN0 時(shí),則新的 Key_N0 為 Key_ MAX_RECN0 ;此后調(diào)用改造后的completejread進(jìn)行數(shù)據(jù)庫(kù)的更新操作,調(diào)用storejtem 存儲(chǔ)new_item,若tmpitemList的size大于MAX_RECN0,則采用先進(jìn)先出策略,將Key_N0 中No的最小值對(duì)應(yīng)的記錄刪除,調(diào)用do_item_replace函數(shù)將tmpitemList里的Key_N0 對(duì)應(yīng)的item代替數(shù)據(jù)庫(kù)中舊的Key_N0對(duì)應(yīng)的item ;所述數(shù)據(jù)操作流程中的數(shù)據(jù)讀出過程是當(dāng)Hmemcached需要讀取數(shù)據(jù)時(shí),調(diào)用改造后 的process_get_command的函數(shù)讀出某個(gè)Key的數(shù)據(jù),將ΚθΥ_0···Ν0_1的所有數(shù)據(jù)一起讀 出,并返回當(dāng)前Key值下的記錄條目;數(shù)據(jù)操作流程中的數(shù)據(jù)刪除過程是當(dāng)memcached需要?jiǎng)h除某個(gè)Key值數(shù)據(jù)時(shí),調(diào)用改 造后的process_delete_command的函數(shù)將Κθυ_(>··Ν0-1的所有數(shù)據(jù)一起刪除。
3.如權(quán)利要求1所述的內(nèi)存數(shù)據(jù)庫(kù),其特征在于系統(tǒng)中的數(shù)據(jù)以KEY-VALUE的方 式存儲(chǔ),使用memcahed內(nèi)存數(shù)據(jù)庫(kù)軟件的客戶端無需改造,支持kt get Add replace delete常規(guī)操作。
全文摘要
支持歷史Key信息的內(nèi)存數(shù)據(jù)庫(kù)涉及計(jì)算機(jī)應(yīng)用領(lǐng)。在memcached中添加自定義函數(shù)get_KeyitemList,對(duì)process_update_command、complete_nread、process_get_command和process_delete_command函數(shù)改造后成為支持歷史Key值存儲(chǔ)的Hmemcached。Key值的數(shù)據(jù)存儲(chǔ)采用不斷追加記錄的方式。一個(gè)Key的歷史數(shù)據(jù)的數(shù)量根據(jù)需要設(shè)定。同一KEY值的不同歷史數(shù)據(jù)在Hmemcached內(nèi)部的存儲(chǔ)使用Key_NO作為Key值的形式,NO是從0到系統(tǒng)允許的最大記錄數(shù)MAX_RECNO-1中的一個(gè)數(shù)字。記錄時(shí)若未超過設(shè)定的最大記錄條數(shù),直接追加;若超過則采用先進(jìn)先出的方法,刪除掉首條記錄,再將新記錄追加至此Key中。本發(fā)明有效解決了分布式系統(tǒng)中以Key-Value方式對(duì)同一Key值存儲(chǔ)的歷史數(shù)據(jù)訪問問題,數(shù)據(jù)被寫入每個(gè)主機(jī)的Hmemecached管理的內(nèi)存中,客戶端無需改動(dòng),方便實(shí)用。
文檔編號(hào)G06F17/30GK102073690SQ20101060711
公開日2011年5月25日 申請(qǐng)日期2010年12月27日 優(yōu)先權(quán)日2010年12月16日
發(fā)明者劉宇, 劉舒, 李曉峰, 胡術(shù), 莫思特, 邱敦國(guó), 黃戈 申請(qǐng)人:四川川大智勝軟件股份有限公司