两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方法

文檔序號(hào):6363583閱讀:902來(lái)源:國(guó)知局
專利名稱:一種內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種內(nèi)存數(shù)據(jù)庫(kù)領(lǐng)域,更具體的說(shuō),涉及一種內(nèi)存數(shù)據(jù)庫(kù)復(fù)制方法,用于解決多個(gè)內(nèi)存數(shù)據(jù)庫(kù)之間數(shù)據(jù)一致性的問(wèn)題。
背景技術(shù)
隨著電信業(yè)不斷的發(fā)展,業(yè)務(wù)擴(kuò)展越來(lái)越廣,各種新業(yè)務(wù)層出不窮,數(shù)據(jù)量也越來(lái)越大,對(duì)數(shù)據(jù)訪問(wèn)的不間斷要求也越來(lái)越高。大量的用戶資料數(shù)據(jù)、用戶消費(fèi)數(shù)據(jù)都需要存放在內(nèi)存數(shù)據(jù)庫(kù)中,但是由于內(nèi)存的非持久性,一旦內(nèi)存數(shù)據(jù)庫(kù)進(jìn)程或者所在主機(jī)發(fā)生異常停止,內(nèi)存中的數(shù)據(jù)就將全部丟失,直接導(dǎo)致應(yīng)用程序無(wú)法繼續(xù)進(jìn)行訪問(wèn)。如何確保一個(gè)內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)損壞,另一個(gè)節(jié)點(diǎn)能夠快速接管,成為內(nèi)存數(shù)據(jù)庫(kù)安全的關(guān)鍵技術(shù)。目前,內(nèi)存數(shù)據(jù)庫(kù)之間的數(shù)據(jù)保持一致的方式一般有兩種一是完全同步方式,二是SQL語(yǔ)句重做方式。對(duì)于完全同步方式,當(dāng)應(yīng)用程序修改主節(jié)點(diǎn)數(shù)據(jù)時(shí),同時(shí)通過(guò)網(wǎng)絡(luò)去修改其他節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)庫(kù)數(shù)據(jù),當(dāng)兩者都操作成功后,再返回操作成功的標(biāo)志。此種方式雖然能夠保證兩個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)能夠完全一致,但由于需要同時(shí)操作兩個(gè)節(jié)點(diǎn),使得訪問(wèn)效率大打折扣,無(wú)法發(fā)揮內(nèi)存數(shù)據(jù)庫(kù)訪問(wèn)速度快的優(yōu)勢(shì)。另外,隨著需要同步的節(jié)點(diǎn)的增加,訪問(wèn)速度也會(huì)急劇下降。對(duì)于SQL語(yǔ)句重做的方式,應(yīng)用程序修改主節(jié)點(diǎn)數(shù)據(jù)時(shí),同時(shí)將SQL操作寫入日志文件。通過(guò)單獨(dú)的復(fù)制程序,實(shí)時(shí)讀取日志文件,將SQL語(yǔ)句通過(guò)網(wǎng)絡(luò)發(fā)送到其他節(jié)點(diǎn)并執(zhí)行,此種方式雖然不會(huì)影響應(yīng)用訪問(wèn)內(nèi)存數(shù)據(jù)庫(kù)主節(jié)點(diǎn)的速度,但復(fù)制進(jìn)程需要重新解析 SQL語(yǔ)句,并重新在內(nèi)存中查找需要操作的記錄,在數(shù)據(jù)量巨大的電信業(yè)務(wù)系統(tǒng)中,難以在短時(shí)間內(nèi)將變化的數(shù)據(jù)復(fù)制到其他節(jié)點(diǎn)的內(nèi)存中。因此,需要提出一種既能節(jié)省資源,又能快速高效的實(shí)現(xiàn)內(nèi)存數(shù)據(jù)庫(kù)復(fù)制的方法。

發(fā)明內(nèi)容
為了實(shí)現(xiàn)多個(gè)內(nèi)存數(shù)據(jù)庫(kù)之間數(shù)據(jù)的實(shí)時(shí)同步,本發(fā)明提出一種內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方法。該方法包括如下步驟
步驟I:主節(jié)點(diǎn)等待其他節(jié)點(diǎn)的連接請(qǐng)求;
步驟2 :備節(jié)點(diǎn)申請(qǐng)連接主節(jié)點(diǎn),并發(fā)送需要復(fù)制的表的表名;
步驟3 :主節(jié)點(diǎn)掃描本節(jié)點(diǎn)的REDO日志文件,根據(jù)接收的表名挑選出需要發(fā)送的數(shù)據(jù)生成包括待復(fù)制表的增量數(shù)據(jù)包,通過(guò)Socket批量發(fā)送給備節(jié)點(diǎn);
步驟4:備節(jié)點(diǎn)接收到需要的數(shù)據(jù)后,在本節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)庫(kù)中逐條寫入,成功后,將成功標(biāo)志發(fā)送給主節(jié)點(diǎn);
步驟5 :主節(jié)點(diǎn)收到成功標(biāo)志后,記錄本次掃描REDO日志文件的截止位置,以便于下次掃描時(shí),從此位置接續(xù)。
本發(fā)明的有益效果是備節(jié)點(diǎn)在向主節(jié)點(diǎn)申請(qǐng)數(shù)據(jù)時(shí),需要向主節(jié)點(diǎn)發(fā)送需要復(fù)制的表的表名,這樣可以根據(jù)實(shí)際需要選擇需要復(fù)制的表,不需要復(fù)制的表則不用發(fā)送, 從而節(jié)省相關(guān)資源。另外,由于各節(jié)點(diǎn)之間直接通過(guò)REDO日志進(jìn)行數(shù)據(jù)復(fù)制,REDO日志中含有每條記錄的內(nèi)存坐標(biāo),備節(jié)點(diǎn)可以直接根據(jù)內(nèi)存坐標(biāo)值在內(nèi)存中定位對(duì)應(yīng)的記錄,快速完成修改操作。進(jìn)一步,REDO日志中每條記錄中存放的是當(dāng)前每個(gè)字段的值,即使之前主節(jié)點(diǎn)和備節(jié)點(diǎn)之間的記錄由于某種原因已經(jīng)不一致了,經(jīng)過(guò)REDO日志的復(fù)制之后,備節(jié)點(diǎn)會(huì)立即將對(duì)應(yīng)記錄的值改成和主節(jié)點(diǎn)一致的數(shù)據(jù),從而確保備節(jié)點(diǎn)的數(shù)據(jù)時(shí)刻和主節(jié)點(diǎn)保持一致。


圖I為本發(fā)明的內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方式的流程圖。圖2為本發(fā)明的備節(jié)點(diǎn)的接收線程流程圖。圖3為本發(fā)明作為數(shù)據(jù)源的主節(jié)點(diǎn)的發(fā)送線程流程圖。
具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。本發(fā)明的內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方法,如圖I所示,包括如下步驟
步驟I :主節(jié)點(diǎn)等待其他節(jié)點(diǎn)的連接請(qǐng)求,例如打開(kāi)socket接口,啟動(dòng)監(jiān)聽(tīng)服務(wù);
步驟2 :備節(jié)點(diǎn)申請(qǐng)連接主節(jié)點(diǎn),并發(fā)送需要復(fù)制的表的表名;
步驟3 :主節(jié)點(diǎn)掃描本節(jié)點(diǎn)的REDO日志文件,根據(jù)接收的表名挑選出需要發(fā)送的數(shù)據(jù), 生成待復(fù)制表的增量數(shù)據(jù)包,通過(guò)Socket批量發(fā)送給備節(jié)點(diǎn);
步驟4:備節(jié)點(diǎn)從端口讀取接收到的數(shù)據(jù)后,在本節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)庫(kù)中按順序?qū)懭耄晒?將成功標(biāo)志發(fā)送給主節(jié)點(diǎn);
步驟5 :主節(jié)點(diǎn)收到成功標(biāo)志后,記錄本次掃描REDO日志文件的截止位置,以便于下次掃描時(shí),從此位置接續(xù)。其中備節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送需要復(fù)制的表名列表,該列表中可以同時(shí)包含多個(gè)表名,如“bbb;myteSt”,多個(gè)表名之間可以用“;”分隔。主節(jié)點(diǎn)接收到此列表之后,先保留在臨時(shí)變量中,然后實(shí)時(shí)去讀取REDO日志,REDO日志中每條記錄中都含有表名信息,主節(jié)點(diǎn)讀出此表名,然后判斷是否需要復(fù)制,如果需要,則發(fā)送相應(yīng)的數(shù)據(jù)給備節(jié)點(diǎn),否則就繼續(xù)讀取下一條表名。備節(jié)點(diǎn)收到數(shù)據(jù)之后,根據(jù)操作標(biāo)志,在對(duì)應(yīng)表的對(duì)應(yīng)記錄上做修改操作,實(shí)現(xiàn)數(shù)據(jù)的復(fù)制。在內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制中,當(dāng)申請(qǐng)數(shù)據(jù)復(fù)制后,備節(jié)點(diǎn)啟動(dòng)接收線程,其流程圖如圖2所示
備節(jié)點(diǎn)連接到數(shù)據(jù)源主節(jié)點(diǎn),如果未連接上數(shù)據(jù)源主節(jié)點(diǎn),則在休眠指定時(shí)間后,繼續(xù)連接;如果連接到數(shù)據(jù)源主節(jié)點(diǎn),則從端口讀取數(shù)據(jù)源主節(jié)點(diǎn)發(fā)送的數(shù)據(jù),并逐條寫入本機(jī)內(nèi)存數(shù)據(jù)庫(kù);判斷是否寫入成功,如果寫入成功,則向主節(jié)點(diǎn)發(fā)送成功標(biāo)志,如果寫入不成功,則斷開(kāi)連接,并在休眠指定時(shí)間后,重新執(zhí)行上述所有步驟。
在內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制中,作為數(shù)據(jù)源的主節(jié)點(diǎn),啟動(dòng)接收線程,其流程圖如圖3 所示
主節(jié)點(diǎn)打開(kāi)socket接口,啟動(dòng)監(jiān)聽(tīng)服務(wù),等待申請(qǐng)者的連接;當(dāng)接收申請(qǐng)者的連接請(qǐng)求后,根據(jù)REDO日志生成包括待復(fù)制表的增量數(shù)據(jù)包并發(fā)送;接收來(lái)自申請(qǐng)者的接收處理成功標(biāo)志;如果增量數(shù)據(jù)已全部發(fā)送完畢,記錄對(duì)應(yīng)的文件位置,休眠指定時(shí)間,該指定時(shí)間例如可以是I秒,之后,重新執(zhí)行上述所有步驟。以下為采用本發(fā)明方法的配置文件信息,本文件配置的是進(jìn)程運(yùn)行時(shí)使用的基本信息,采用INI文件格式。[DRS_INF0]
DR_P0RT = 12001 #本機(jī)作為數(shù)據(jù)源時(shí)開(kāi)放的監(jiān)聽(tīng)端口號(hào) #復(fù)制的數(shù)據(jù)源
HOST= 192.168.O.2:12001
TAB= bbb;mytest#需要復(fù)制的表,分號(hào)分隔
如果多個(gè)節(jié)點(diǎn)的“HOST”配置都指向同一個(gè)值,則會(huì)實(shí)現(xiàn)一個(gè)節(jié)點(diǎn)向多個(gè)節(jié)點(diǎn)復(fù)制。也就是說(shuō),如果備節(jié)點(diǎn)為多個(gè)時(shí),多個(gè)備節(jié)點(diǎn)連接同一個(gè)主節(jié)點(diǎn),主節(jié)點(diǎn)能夠?yàn)槊總€(gè)請(qǐng)求數(shù)據(jù)的備節(jié)點(diǎn)創(chuàng)建獨(dú)立的復(fù)制線程,從而實(shí)現(xiàn)內(nèi)存數(shù)據(jù)庫(kù)的多節(jié)點(diǎn)復(fù)制。 以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方法,包括步驟I:主節(jié)點(diǎn)等待其他節(jié)點(diǎn)的連接請(qǐng)求;步驟2 :備節(jié)點(diǎn)申請(qǐng)連接主節(jié)點(diǎn),并發(fā)送需要復(fù)制的表的表名;步驟3 :主節(jié)點(diǎn)掃描本節(jié)點(diǎn)的REDO日志文件,根據(jù)接收的表名挑選出需要發(fā)送的數(shù)據(jù)生成包括待復(fù)制表的增量數(shù)據(jù)包,通過(guò)Socket批量發(fā)送給備節(jié)點(diǎn);步驟4:備節(jié)點(diǎn)接收到需要的數(shù)據(jù)后,在本節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)庫(kù)中逐條寫入,成功后,將成功標(biāo)志發(fā)送給主節(jié)點(diǎn);步驟5 :主節(jié)點(diǎn)收到成功標(biāo)志后,記錄本次掃描REDO日志文件的截止位置,以便于下次掃描時(shí),從此位置接續(xù)。
2.根據(jù)權(quán)利要求I所述的內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方法,其特征在于在步驟I中主節(jié)點(diǎn)提供監(jiān)聽(tīng)服務(wù),等待其他其他節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)。
3.根據(jù)權(quán)利要求I所述的內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方法,其特征在于復(fù)制是以表為單位的,僅對(duì)指定的表進(jìn)行復(fù)制。
4.根據(jù)權(quán)利要求I所述的內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方法,其特征在于RED0日志中含有每條記錄的內(nèi)存坐標(biāo),備節(jié)點(diǎn)直接根據(jù)內(nèi)存坐標(biāo)值在內(nèi)存中定位對(duì)應(yīng)的記錄,快速完成寫入操作。
5.根據(jù)權(quán)利要求I所述的內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方法,其特征在于備節(jié)點(diǎn)為多個(gè),多個(gè)備節(jié)點(diǎn)連接同一個(gè)主節(jié)點(diǎn),主節(jié)點(diǎn)為每個(gè)請(qǐng)求數(shù)據(jù)的備節(jié)點(diǎn)創(chuàng)建獨(dú)立的復(fù)制線程,從而實(shí)現(xiàn)內(nèi)存數(shù)據(jù)庫(kù)的多節(jié)點(diǎn)復(fù)制。
6.根據(jù)權(quán)利要求I所述的內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方法,其特征在于在步驟2中,備節(jié)點(diǎn)能夠一次同時(shí)向主節(jié)點(diǎn)發(fā)送N個(gè)需要復(fù)制的表名列表,N > 2。
全文摘要
本發(fā)明提供了一種內(nèi)存數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制方法,包括以下步驟主節(jié)點(diǎn)等待其他節(jié)點(diǎn)的連接請(qǐng)求;備節(jié)點(diǎn)申請(qǐng)連接主節(jié)點(diǎn),并發(fā)送需要復(fù)制的表的表名;主節(jié)點(diǎn)掃描本節(jié)點(diǎn)的REDO日志文件,根據(jù)接收的表名生成包括待復(fù)制表的增量數(shù)據(jù)包,并發(fā)送給備節(jié)點(diǎn);備節(jié)點(diǎn)接收到需要的數(shù)據(jù)后,在本節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)庫(kù)中逐條寫入,成功后,將成功標(biāo)志發(fā)送給主節(jié)點(diǎn);主節(jié)點(diǎn)收到成功標(biāo)志后,記錄本次掃描REDO日志文件的截止位置,以便于下次掃描時(shí),從此位置接續(xù)。本發(fā)明采用備節(jié)點(diǎn)主動(dòng)申請(qǐng)、主節(jié)點(diǎn)被動(dòng)發(fā)送的的方式,將主節(jié)點(diǎn)的REDO日志實(shí)時(shí)發(fā)送到各個(gè)備節(jié)點(diǎn)上,實(shí)現(xiàn)內(nèi)存數(shù)據(jù)庫(kù)多節(jié)點(diǎn)復(fù)制。因此,既節(jié)省了資源,又能快速高效的實(shí)現(xiàn)內(nèi)存數(shù)據(jù)庫(kù)的復(fù)制。
文檔編號(hào)G06F17/30GK102609479SQ20121001782
公開(kāi)日2012年7月25日 申請(qǐng)日期2012年1月20日 優(yōu)先權(quán)日2012年1月20日
發(fā)明者王金山 申請(qǐng)人:北京神州數(shù)碼思特奇信息技術(shù)股份有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
西华县| 宽甸| 盘锦市| 辛集市| 建阳市| 志丹县| 溆浦县| 大方县| 高密市| 清河县| 罗江县| 隆德县| 曲沃县| 东山县| 洛浦县| 平顺县| 咸宁市| 喀什市| 江北区| 达州市| 玛多县| 文安县| 将乐县| 靖宇县| 鄂尔多斯市| 登封市| 鄱阳县| 蛟河市| 安平县| 伊宁县| 广德县| 白银市| 萨嘎县| 衡阳县| 咸宁市| 龙胜| 普格县| 四川省| 临沧市| 原平市| 纳雍县|