欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種分布式數(shù)據(jù)同步系統(tǒng)及方法

文檔序號:7899105閱讀:771來源:國知局
專利名稱:一種分布式數(shù)據(jù)同步系統(tǒng)及方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種數(shù)據(jù)同步系統(tǒng)及方法,特別涉及一種分布式數(shù)據(jù)同步系統(tǒng)及方 法,屬于計算機(jī)技術(shù)領(lǐng)域。
背景技術(shù)
隨著信息技術(shù)的進(jìn)步和應(yīng)用系統(tǒng)數(shù)據(jù)的急劇增加,數(shù)據(jù)庫需要及時存儲和訪問數(shù) 據(jù)。很多應(yīng)用系統(tǒng)之間為了保證數(shù)據(jù)的一致,需要進(jìn)行數(shù)據(jù)庫數(shù)據(jù)的同步。數(shù)據(jù)庫同步問題,大型數(shù)據(jù)庫廠商在其主流數(shù)據(jù)庫產(chǎn)品提出了同構(gòu)復(fù)制技術(shù),并 在此基礎(chǔ)上提出了異構(gòu)數(shù)據(jù)庫復(fù)制技術(shù)。Oracle通過數(shù)據(jù)庫轉(zhuǎn)換器(Oracle Transparent (Gateway)來實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫同步,它是一種對稱復(fù)制。DB2使用CCD (Consistent Change Data)表來實(shí)現(xiàn)異構(gòu)復(fù)制。SyBase利用LTM(Log Transfer Manager)來實(shí)現(xiàn)異構(gòu)復(fù)制,SQL Server提出出版者/預(yù)訂者技術(shù)。目前,廣泛應(yīng)用于商業(yè)當(dāng)中的數(shù)據(jù)庫同步方案主要分為分布式數(shù)據(jù)庫采用的數(shù) 據(jù)同步方法和同步中間件。一些獨(dú)立軟件開發(fā)商也開發(fā)出大量具有異構(gòu)數(shù)據(jù)庫同步功能的 軟件和產(chǎn)品,其中比較著名的有=PeerDirect的PDRE,提出了一種基于控制表變化法的同 步方法。Syware的DataSync,采用影子表技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫同步。SynchroLogic的SyncKit, 采用基于API方法實(shí)現(xiàn)數(shù)據(jù)庫同步。國內(nèi)對于分布式異構(gòu)數(shù)據(jù)庫數(shù)據(jù)同步的研究,比較著名的系統(tǒng)有中國人民大學(xué) 的金倉數(shù)據(jù)庫系統(tǒng)(KingBase)、東南大學(xué)的(ialaxy系統(tǒng)、國防科技大學(xué)的TTR、中科院軟件 所對象技術(shù)中心承擔(dān)的“石化應(yīng)用軟件示范工程”,它利用消息中間件ISMQ實(shí)現(xiàn)了實(shí)時數(shù) 據(jù)庫環(huán)境下的數(shù)據(jù)同步。但是,目前國內(nèi)外數(shù)據(jù)庫同步的方案,主要針對的是存在中心節(jié)點(diǎn)的網(wǎng)絡(luò)環(huán)境,由 中心節(jié)點(diǎn)控制數(shù)據(jù)庫同步。對于無中心節(jié)點(diǎn)的網(wǎng)絡(luò)環(huán)境中,怎樣保持網(wǎng)絡(luò)中每個節(jié)點(diǎn)數(shù)據(jù) 庫中的數(shù)據(jù)實(shí)時一致,在國內(nèi)外的研究中尚未見報道。無中心節(jié)點(diǎn)的網(wǎng)絡(luò)環(huán)境,指網(wǎng)絡(luò)中所 有節(jié)點(diǎn)地位相同,每個節(jié)點(diǎn)可以隨時上線或下線,每個節(jié)點(diǎn)可以隨時發(fā)起數(shù)據(jù)同步請求。

發(fā)明內(nèi)容
本發(fā)明的目的是針對現(xiàn)有技術(shù)的缺陷,設(shè)計一種針對無中心節(jié)點(diǎn)網(wǎng)絡(luò)環(huán)境的分布 式數(shù)據(jù)庫同步系統(tǒng)和方法,實(shí)現(xiàn)實(shí)時、并發(fā)操作的分布式數(shù)據(jù)同步,保證網(wǎng)絡(luò)中每個節(jié)點(diǎn)數(shù) 據(jù)庫中的數(shù)據(jù)實(shí)時一致。本發(fā)明提供了一種分布式數(shù)據(jù)同步系統(tǒng),包括通過網(wǎng)絡(luò)連接的多個節(jié)點(diǎn),其中每 個節(jié)點(diǎn)均包括數(shù)據(jù)庫、節(jié)點(diǎn)狀態(tài)表以及數(shù)據(jù)同步模塊,其中節(jié)點(diǎn)狀態(tài)表包括網(wǎng)絡(luò)中每個節(jié) 點(diǎn)的IP地址、最高版本號和節(jié)點(diǎn)類型,最高版本號在節(jié)點(diǎn)第一次上線時設(shè)置為0,每執(zhí)行一 次對數(shù)據(jù)庫的修改操作最高版本號加1,節(jié)點(diǎn)類型分為決策節(jié)點(diǎn)、備份節(jié)點(diǎn)和普通節(jié)點(diǎn);網(wǎng) 絡(luò)中每個節(jié)點(diǎn)包括的數(shù)據(jù)庫均擁有相同的數(shù)據(jù)庫名、數(shù)據(jù)表名和數(shù)據(jù)表結(jié)構(gòu);數(shù)據(jù)同步模 塊具體包括
節(jié)點(diǎn)上線初始化模塊負(fù)責(zé)在節(jié)點(diǎn)新上線時通過節(jié)點(diǎn)類型選擇模塊,確定新上線 節(jié)點(diǎn)類型,然后向網(wǎng)絡(luò)中其他節(jié)點(diǎn)發(fā)送上線消息,上線消息包括本節(jié)點(diǎn)的IP地址、最高版 本號和節(jié)點(diǎn)類型;在節(jié)點(diǎn)狀態(tài)表中增加本節(jié)點(diǎn)信息;節(jié)點(diǎn)狀態(tài)維護(hù)模塊負(fù)責(zé)接收網(wǎng)絡(luò)中其它節(jié)點(diǎn)的上線消息,修改節(jié)點(diǎn)狀態(tài)表,并每 隔一定時間在網(wǎng)絡(luò)中廣播本節(jié)點(diǎn)的IP地址、最高版本號和節(jié)點(diǎn)類型;節(jié)點(diǎn)類型選擇模塊根據(jù)設(shè)置的節(jié)點(diǎn)類型選擇策略確定本節(jié)點(diǎn)的節(jié)點(diǎn)類型;同步請求生成模塊在本節(jié)點(diǎn)有數(shù)據(jù)同步請求時,生成數(shù)據(jù)同步操作序列;同步請求發(fā)送模塊負(fù)責(zé)向網(wǎng)絡(luò)中其他在線節(jié)點(diǎn)發(fā)送本節(jié)點(diǎn)的數(shù)據(jù)同步操作序 列;串行化調(diào)度模塊負(fù)責(zé)接收網(wǎng)絡(luò)中所有節(jié)點(diǎn)的數(shù)據(jù)同步操作序列,并將這些操作 序列串行化,形成串行化操作序列,序列中每個操作均對應(yīng)一個版本號;決策調(diào)控模塊如果是決策節(jié)點(diǎn),則在有新上線節(jié)點(diǎn)且其最高版本號與決策節(jié)點(diǎn) 不一致時,向該節(jié)點(diǎn)發(fā)送使其最高版本號與決策節(jié)點(diǎn)一致的串行化操作序列;在網(wǎng)絡(luò)中有 數(shù)據(jù)同步請求時,將決策節(jié)點(diǎn)最高版本號之后的串行化操作序列發(fā)送給網(wǎng)絡(luò)中其他節(jié)點(diǎn);同步更新接收模塊接收從決策節(jié)點(diǎn)發(fā)送來的串行化操作序列;同步更新重發(fā)模塊負(fù)責(zé)向決策節(jié)點(diǎn)發(fā)送重發(fā)串行化操作序列的請求,決策節(jié)點(diǎn) 也使用該模塊接收其他節(jié)點(diǎn)發(fā)送的重發(fā)串行化操作序列的請求;同步更新執(zhí)行模塊網(wǎng)絡(luò)中的節(jié)點(diǎn)根據(jù)接收的決策節(jié)點(diǎn)發(fā)送來的串行化操作序 列執(zhí)行本地數(shù)據(jù)庫操作,并更新最高版本號以及本地的串行化操作序列。本發(fā)明還提供了一種分布式數(shù)據(jù)同步方法,該方法使用上述分布式數(shù)據(jù)同步系統(tǒng) 實(shí)現(xiàn)數(shù)據(jù)同步,包括有數(shù)據(jù)同步請求時的數(shù)據(jù)同步和節(jié)點(diǎn)新上線時的數(shù)據(jù)同步,其中有數(shù) 據(jù)同步請求時的數(shù)據(jù)同步包括以下步驟步驟一、網(wǎng)絡(luò)中有節(jié)點(diǎn)發(fā)起分布式數(shù)據(jù)同步請求,通過同步請求生成模塊生成數(shù) 據(jù)同步操作序列;步驟二、所有發(fā)起數(shù)據(jù)同步請求的節(jié)點(diǎn)通過同步請求發(fā)送模塊向網(wǎng)絡(luò)中其他在線 節(jié)點(diǎn)發(fā)送本節(jié)點(diǎn)的數(shù)據(jù)同步操作序列;步驟三、網(wǎng)絡(luò)中所有節(jié)點(diǎn)通過串行化調(diào)度模塊接收網(wǎng)絡(luò)中所有節(jié)點(diǎn)的數(shù)據(jù)同步操 作序列,并將接收到的數(shù)據(jù)同步操作序列串行化,形成串行化操作序列;步驟四、決策節(jié)點(diǎn)通過決策調(diào)控模塊將串行化操作序列發(fā)送給網(wǎng)絡(luò)中其他節(jié)點(diǎn);步驟五、網(wǎng)絡(luò)中的在線節(jié)點(diǎn)通過同步更新接收模塊接收從決策節(jié)點(diǎn)發(fā)送來的串行 化操作序列;步驟六、網(wǎng)絡(luò)中的在線節(jié)點(diǎn)將接收到的串行化操作序列中的版本號與本地節(jié)點(diǎn) 的最高版本號進(jìn)行比較,如果串行化操作序列中的版本號是從本地節(jié)點(diǎn)的最高版本號+1 開始,并且版本號連續(xù),則說明接收到的串行化操作序列正確,轉(zhuǎn)到步驟九;否則轉(zhuǎn)到步驟 七;步驟七、在線節(jié)點(diǎn)通過同步更新重發(fā)模塊向決策節(jié)點(diǎn)發(fā)送重發(fā)串行化操作序列的 請求;步驟八、決策節(jié)點(diǎn)收到重發(fā)串行化操作序列的請求后,重新向該請求重發(fā)的節(jié)點(diǎn) 發(fā)送對應(yīng)的串行化操作序列,轉(zhuǎn)到步驟五;
步驟九、在線節(jié)點(diǎn)通過同步更新執(zhí)行模塊根據(jù)接收的決策節(jié)點(diǎn)發(fā)送來的串行化操 作序列執(zhí)行本地數(shù)據(jù)庫操作,并更新最高版本號以及本地的串行化操作序列;節(jié)點(diǎn)新上線時的數(shù)據(jù)同步包括以下步驟步驟一、節(jié)點(diǎn)新上線時,通過節(jié)點(diǎn)上線初始化模塊確定新上線節(jié)點(diǎn)類型,向網(wǎng)絡(luò)中 其他節(jié)點(diǎn)發(fā)送上線消息,在節(jié)點(diǎn)狀態(tài)表中增加本節(jié)點(diǎn)信息;步驟二、新上線節(jié)點(diǎn)比較自身節(jié)點(diǎn)與決策節(jié)點(diǎn)的最高版本號信息,并進(jìn)行判斷,如 果新上線節(jié)點(diǎn)最高版本號小于決策節(jié)點(diǎn)最高版本號,則轉(zhuǎn)到步驟三,否則轉(zhuǎn)到步驟十;步驟三、新上線節(jié)點(diǎn)通過同步更新重發(fā)模塊請求決策節(jié)點(diǎn)發(fā)送新上線節(jié)點(diǎn)最高版 本號之后的串行化操作序列;步驟四、決策節(jié)點(diǎn)通過決策調(diào)控模塊將版本號從新上線節(jié)點(diǎn)最高版本號+1開始 到?jīng)Q策節(jié)點(diǎn)最高版本號的串行化操作序列發(fā)送給新上線節(jié)點(diǎn);步驟五、新上線節(jié)點(diǎn)通過同步更新接收模塊接收從決策節(jié)點(diǎn)發(fā)送來的串行化操作 序列;步驟六、新上線節(jié)點(diǎn)將接收到的串行化操作序列中的版本號與本地節(jié)點(diǎn)和決策節(jié) 點(diǎn)的最高版本號進(jìn)行比較,如果串行化操作序列中的版本號是從本地節(jié)點(diǎn)的最高版本號+1 開始,并且版本號連續(xù),直到版本號為決策節(jié)點(diǎn)的最高版本號為止,則說明接收到的串行化 操作序列正確,轉(zhuǎn)到步驟九;否則轉(zhuǎn)到步驟七;步驟七、新上線節(jié)點(diǎn)通過同步更新重發(fā)模塊向決策節(jié)點(diǎn)發(fā)送重發(fā)串行化操作序列 的請求;步驟八、決策節(jié)點(diǎn)收到重發(fā)串行化操作序列的請求后,重新向新上線節(jié)點(diǎn)發(fā)送對 應(yīng)的串行化操作序列,轉(zhuǎn)到步驟五;步驟九、新上線節(jié)點(diǎn)通過同步更新執(zhí)行模塊根據(jù)接收的決策節(jié)點(diǎn)發(fā)送來的串行化 操作序列執(zhí)行本地數(shù)據(jù)庫操作,并更新最高版本號以及本地的串行化操作序列;步驟十、新上線節(jié)點(diǎn)通過節(jié)點(diǎn)狀態(tài)維護(hù)模塊每隔一定時間在網(wǎng)絡(luò)中廣播本節(jié)點(diǎn)的 IP地址、最高版本號和節(jié)點(diǎn)類型。有益效果本發(fā)明提出的分布式數(shù)據(jù)同步系統(tǒng)及方法在無中心節(jié)點(diǎn)的網(wǎng)絡(luò)環(huán)境中,可以實(shí)現(xiàn) 實(shí)時、并發(fā)操作的分布式數(shù)據(jù)同步,保證在任意節(jié)點(diǎn)可以隨時上線或下線的情況下,網(wǎng)絡(luò)中 每個節(jié)點(diǎn)數(shù)據(jù)庫中的數(shù)據(jù)實(shí)時一致。


圖1、本發(fā)明所述系統(tǒng)中每個節(jié)點(diǎn)的結(jié)構(gòu)圖;圖2、本發(fā)明所述方法的流程圖。
圖3、有節(jié)點(diǎn)上線或下線時的數(shù)據(jù)同步方法流程圖。
具體實(shí)施例方式下面結(jié)合附圖,具體說明本發(fā)明的優(yōu)選實(shí)施方式。本實(shí)施例是根據(jù)本發(fā)明實(shí)現(xiàn)的一種分布式數(shù)據(jù)同步系統(tǒng),它包括通過網(wǎng)絡(luò) 連接的6個節(jié)點(diǎn)。圖1為系統(tǒng)中每個節(jié)點(diǎn)的結(jié)構(gòu)圖。網(wǎng)絡(luò)中6個節(jié)點(diǎn)的IP地址分 別為 192. 168. 1. 11,192. 168. 1. 12,192. 168. 1. 13,192. 168. 1. 14,192. 168. 1. 15、192. 168. 1. 16。每個節(jié)點(diǎn)本地使用的數(shù)據(jù)庫為MySql數(shù)據(jù)庫,每個節(jié)點(diǎn)的數(shù)據(jù)庫名均為 testdb,數(shù)據(jù)庫表名稱為course,course中字段名及字段類型如表1所示。每個節(jié)點(diǎn)的數(shù) 據(jù)庫的內(nèi)容一致。表l.course表中的字段名及字段類型
數(shù)據(jù)庫表字段名字段類型c_idint(3)c namevarchar(10)course表中的內(nèi)容如表2所示。表2. course表中內(nèi)容
c_idcname1Physics每個節(jié)點(diǎn)的數(shù)據(jù)同步模塊具體包括節(jié)點(diǎn)上線初始化模塊負(fù)責(zé)在節(jié)點(diǎn)新上線時通過節(jié)點(diǎn)類型選擇模塊,確定新上線 節(jié)點(diǎn)類型,然后向網(wǎng)絡(luò)中其他節(jié)點(diǎn)發(fā)送上線消息,上線消息包括本節(jié)點(diǎn)的IP地址、最高版 本號和節(jié)點(diǎn)類型;在節(jié)點(diǎn)狀態(tài)表中增加本節(jié)點(diǎn)信息;節(jié)點(diǎn)狀態(tài)維護(hù)模塊負(fù)責(zé)接收網(wǎng)絡(luò)中其它節(jié)點(diǎn)的上線消息,修改節(jié)點(diǎn)狀態(tài)表,并每 隔一定時間在網(wǎng)絡(luò)中廣播本節(jié)點(diǎn)的IP地址、最高版本號和節(jié)點(diǎn)類型;節(jié)點(diǎn)類型選擇模塊根據(jù)設(shè)置的節(jié)點(diǎn)類型選擇策略確定本節(jié)點(diǎn)的節(jié)點(diǎn)類型;同步請求生成模塊在本節(jié)點(diǎn)有數(shù)據(jù)同步請求時,生成數(shù)據(jù)同步操作序列;同步請求發(fā)送模塊負(fù)責(zé)向網(wǎng)絡(luò)中其他在線節(jié)點(diǎn)發(fā)送本節(jié)點(diǎn)的數(shù)據(jù)同步操作序 列;串行化調(diào)度模塊負(fù)責(zé)接收網(wǎng)絡(luò)中所有節(jié)點(diǎn)的數(shù)據(jù)同步操作序列,并將這些操作 序列串行化,形成串行化操作序列,序列中每個操作均對應(yīng)一個版本號;決策調(diào)控模塊如果是決策節(jié)點(diǎn),則在有新上線節(jié)點(diǎn)且其最高版本號與決策節(jié)點(diǎn) 不一致時,向該節(jié)點(diǎn)發(fā)送使其最高版本號與決策節(jié)點(diǎn)一致的串行化操作序列;在網(wǎng)絡(luò)中有 數(shù)據(jù)同步請求時,將決策節(jié)點(diǎn)最高版本號之后的串行化操作序列發(fā)送給網(wǎng)絡(luò)中其他節(jié)點(diǎn);同步更新接收模塊接收從決策節(jié)點(diǎn)發(fā)送來的串行化操作序列;同步更新重發(fā)模塊負(fù)責(zé)向決策節(jié)點(diǎn)發(fā)送重發(fā)串行化操作序列的請求,決策節(jié)點(diǎn) 也使用該模塊接收其他節(jié)點(diǎn)發(fā)送的重發(fā)串行化操作序列的請求;同步更新執(zhí)行模塊網(wǎng)絡(luò)中的節(jié)點(diǎn)根據(jù)接收的決策節(jié)點(diǎn)發(fā)送來的串行化操作序列 執(zhí)行本地數(shù)據(jù)庫操作,并更新最高版本號以及本地的串行化操作序列。日志處理模塊維護(hù)日志文件,日志文件記錄運(yùn)行過程中的數(shù)據(jù)執(zhí)行消息和錯誤 消息。本實(shí)施方式中,每個節(jié)點(diǎn)還包括共享內(nèi)存和共享內(nèi)存管理模塊。共享內(nèi)存管理模 塊負(fù)責(zé)管理共享內(nèi)存的讀寫;共享內(nèi)存用于緩存本地節(jié)點(diǎn)的同步請求,存放數(shù)據(jù)同步操作 序列以及串行化操作序列。在本實(shí)施例中,進(jìn)行數(shù)據(jù)同步前要對網(wǎng)絡(luò)中新上線節(jié)點(diǎn)進(jìn)行初始化。新上線節(jié)點(diǎn) 通過上線初始化模塊修改節(jié)點(diǎn)狀態(tài)表,通過節(jié)點(diǎn)類型選擇模塊確定新上線節(jié)點(diǎn)類型。節(jié)點(diǎn)類型選擇模塊根據(jù)設(shè)置的節(jié)點(diǎn)類型選擇策略確定本節(jié)點(diǎn)的節(jié)點(diǎn)類型,節(jié)點(diǎn)類型選擇策略可 以有很多種,例如根據(jù)節(jié)點(diǎn)上線順序選擇節(jié)點(diǎn)類型、根據(jù)節(jié)點(diǎn)在線時間選擇節(jié)點(diǎn)類型、根據(jù) 節(jié)點(diǎn)處理速度選擇節(jié)點(diǎn)類型等。本實(shí)施例中采用的節(jié)點(diǎn)類型選擇策略如下當(dāng)網(wǎng)絡(luò)中有新上線節(jié)點(diǎn)時,新上線節(jié)點(diǎn)首先接收獲得其他節(jié)點(diǎn)的狀態(tài)信息,修改 本地節(jié)點(diǎn)狀態(tài)表。當(dāng)節(jié)點(diǎn)狀態(tài)表中沒有發(fā)現(xiàn)決策節(jié)點(diǎn)時即表示只有自身節(jié)點(diǎn)在線,則將本 節(jié)點(diǎn)定義為決策節(jié)點(diǎn);當(dāng)節(jié)點(diǎn)狀態(tài)表中只存在決策節(jié)點(diǎn)時,則將本節(jié)點(diǎn)定義為備份節(jié)點(diǎn); 當(dāng)節(jié)點(diǎn)狀態(tài)表中已經(jīng)存在決策節(jié)點(diǎn)和備份節(jié)點(diǎn)時,則將本節(jié)點(diǎn)定義為普通節(jié)點(diǎn)。當(dāng)網(wǎng)絡(luò)中已有決策節(jié)點(diǎn)以及備份節(jié)點(diǎn)和其他普通節(jié)點(diǎn)的環(huán)境下當(dāng)決策節(jié)點(diǎn)下 線,備份節(jié)點(diǎn)自動升級成決策節(jié)點(diǎn),其他在線節(jié)點(diǎn)在本地節(jié)點(diǎn)狀態(tài)表中刪除已下線的決策 節(jié)點(diǎn)信息,并廣播當(dāng)前本節(jié)點(diǎn)狀態(tài);當(dāng)決策節(jié)點(diǎn)在線,備份節(jié)點(diǎn)下線時,選擇IP地址中最大 的節(jié)點(diǎn)作為新的備份節(jié)點(diǎn),各在線節(jié)點(diǎn)在本地節(jié)點(diǎn)狀態(tài)表中刪除已下線的備份節(jié)點(diǎn)信息, 并廣播當(dāng)前本節(jié)點(diǎn)狀態(tài);當(dāng)決策節(jié)點(diǎn)和備份節(jié)點(diǎn)同時下線時,選擇在線節(jié)點(diǎn)中IP地址最大 的節(jié)點(diǎn)為當(dāng)前的決策節(jié)點(diǎn),選擇在線節(jié)點(diǎn)中IP地址次大的節(jié)點(diǎn)為備份節(jié)點(diǎn),各在線節(jié)點(diǎn) 在本地節(jié)點(diǎn)狀態(tài)表中刪除已下線的決策節(jié)點(diǎn)和備份節(jié)點(diǎn)信息,并廣播當(dāng)前本節(jié)點(diǎn)狀態(tài);當(dāng) 普通節(jié)點(diǎn)下線時,不發(fā)生決策節(jié)點(diǎn)、備份節(jié)點(diǎn)的變更,各在線節(jié)點(diǎn)在本地節(jié)點(diǎn)狀態(tài)表中刪除 已下線普通節(jié)點(diǎn)的信息,并廣播當(dāng)前本節(jié)點(diǎn)狀態(tài)。節(jié)點(diǎn)類型包括3種0表示普通節(jié)點(diǎn);1表示備份節(jié)點(diǎn);2表示決策節(jié)點(diǎn)。根據(jù)節(jié)點(diǎn) 類型選擇策略,節(jié)點(diǎn)狀態(tài)表的內(nèi)容,如表3所示。表3.節(jié)點(diǎn)狀態(tài)表
權(quán)利要求
1.一種分布式數(shù)據(jù)同步系統(tǒng),其特征在于,包括通過網(wǎng)絡(luò)連接的多個節(jié)點(diǎn),其中每個節(jié) 點(diǎn)均包括數(shù)據(jù)庫、節(jié)點(diǎn)狀態(tài)表以及數(shù)據(jù)同步模塊,其中節(jié)點(diǎn)狀態(tài)表包括網(wǎng)絡(luò)中每個節(jié)點(diǎn)的 IP地址、最高版本號和節(jié)點(diǎn)類型,最高版本號在節(jié)點(diǎn)第一次上線時設(shè)置為0,每執(zhí)行一次對 數(shù)據(jù)庫的修改操作最高版本號加1,節(jié)點(diǎn)類型分為決策節(jié)點(diǎn)、備份節(jié)點(diǎn)和普通節(jié)點(diǎn);網(wǎng)絡(luò)中 每個節(jié)點(diǎn)包括的數(shù)據(jù)庫均擁有相同的數(shù)據(jù)庫名、數(shù)據(jù)表名和數(shù)據(jù)表結(jié)構(gòu);數(shù)據(jù)同步模塊具 體包括節(jié)點(diǎn)上線初始化模塊負(fù)責(zé)在節(jié)點(diǎn)新上線時通過節(jié)點(diǎn)類型選擇模塊,確定新上線節(jié)點(diǎn) 類型,然后向網(wǎng)絡(luò)中其他節(jié)點(diǎn)發(fā)送上線消息,上線消息包括本節(jié)點(diǎn)的IP地址、最高版本號 和節(jié)點(diǎn)類型;在節(jié)點(diǎn)狀態(tài)表中增加本節(jié)點(diǎn)信息;節(jié)點(diǎn)狀態(tài)維護(hù)模塊負(fù)責(zé)接收網(wǎng)絡(luò)中其它節(jié)點(diǎn)的上線消息,修改節(jié)點(diǎn)狀態(tài)表,并每隔一 定時間在網(wǎng)絡(luò)中廣播本節(jié)點(diǎn)的IP地址、最高版本號和節(jié)點(diǎn)類型;節(jié)點(diǎn)類型選擇模塊根據(jù)設(shè)置的節(jié)點(diǎn)類型選擇策略確定本節(jié)點(diǎn)的節(jié)點(diǎn)類型; 同步請求生成模塊在本節(jié)點(diǎn)有數(shù)據(jù)同步請求時,生成數(shù)據(jù)同步操作序列; 同步請求發(fā)送模塊負(fù)責(zé)向網(wǎng)絡(luò)中其他在線節(jié)點(diǎn)發(fā)送本節(jié)點(diǎn)的數(shù)據(jù)同步操作序列; 串行化調(diào)度模塊負(fù)責(zé)接收網(wǎng)絡(luò)中所有節(jié)點(diǎn)的數(shù)據(jù)同步操作序列,并將這些操作序列 串行化,形成串行化操作序列,序列中每個操作均對應(yīng)一個版本號;決策調(diào)控模塊如果是決策節(jié)點(diǎn),則在有新上線節(jié)點(diǎn)且其最高版本號與決策節(jié)點(diǎn)不一 致時,向該節(jié)點(diǎn)發(fā)送使其最高版本號與決策節(jié)點(diǎn)一致的串行化操作序列;在網(wǎng)絡(luò)中有數(shù)據(jù) 同步請求時,將決策節(jié)點(diǎn)最高版本號之后的串行化操作序列發(fā)送給網(wǎng)絡(luò)中其他節(jié)點(diǎn); 同步更新接收模塊接收從決策節(jié)點(diǎn)發(fā)送來的串行化操作序列; 同步更新重發(fā)模塊負(fù)責(zé)向決策節(jié)點(diǎn)發(fā)送重發(fā)串行化操作序列的請求,決策節(jié)點(diǎn)也使 用該模塊接收其他節(jié)點(diǎn)發(fā)送的重發(fā)串行化操作序列的請求;同步更新執(zhí)行模塊網(wǎng)絡(luò)中的節(jié)點(diǎn)根據(jù)接收的決策節(jié)點(diǎn)發(fā)送來的串行化操作序列執(zhí)行 本地數(shù)據(jù)庫操作,并更新最高版本號以及本地的串行化操作序列。
2.根據(jù)權(quán)利要求1所述的一種分布式數(shù)據(jù)同步系統(tǒng),其特征在于,所述節(jié)點(diǎn)還包括共 享內(nèi)存,所述數(shù)據(jù)同步模塊還包括共享內(nèi)存管理模塊,共享內(nèi)存管理模塊負(fù)責(zé)管理共享內(nèi) 存的讀寫;共享內(nèi)存用于緩存本地節(jié)點(diǎn)的同步請求,存放數(shù)據(jù)同步操作序列以及串行化操 作序列。
3.根據(jù)權(quán)利要求1或2所述的一種分布式數(shù)據(jù)同步系統(tǒng),其特征在于,所述數(shù)據(jù)同步模 塊還包括日志處理模塊,負(fù)責(zé)維護(hù)日志文件,日志文件記錄運(yùn)行過程中的數(shù)據(jù)執(zhí)行消息和 錯誤消息。
4.一種分布式數(shù)據(jù)同步方法,該方法使用權(quán)利要求1所述系統(tǒng)實(shí)現(xiàn)分布式數(shù)據(jù)同步, 其特征在于,網(wǎng)絡(luò)中有數(shù)據(jù)同步請求時,實(shí)現(xiàn)數(shù)據(jù)同步的步驟包括步驟一、網(wǎng)絡(luò)中有節(jié)點(diǎn)發(fā)起分布式數(shù)據(jù)同步請求,通過同步請求生成模塊生成數(shù)據(jù)同 步操作序列;步驟二、所有發(fā)起數(shù)據(jù)同步請求的節(jié)點(diǎn)通過同步請求發(fā)送模塊向網(wǎng)絡(luò)中其他在線節(jié)點(diǎn) 發(fā)送本節(jié)點(diǎn)的數(shù)據(jù)同步操作序列;步驟三、網(wǎng)絡(luò)中所有節(jié)點(diǎn)通過串行化調(diào)度模塊接收網(wǎng)絡(luò)中所有節(jié)點(diǎn)的數(shù)據(jù)同步操作序 列,并將接收到的數(shù)據(jù)同步操作序列串行化,形成串行化操作序列;步驟四、決策節(jié)點(diǎn)通過決策調(diào)控模塊將串行化操作序列發(fā)送給網(wǎng)絡(luò)中其他節(jié)點(diǎn); 步驟五、網(wǎng)絡(luò)中的在線節(jié)點(diǎn)通過同步更新接收模塊接收從決策節(jié)點(diǎn)發(fā)送來的串行化操 作序列;步驟六、網(wǎng)絡(luò)中的在線節(jié)點(diǎn)將接收到的串行化操作序列中的版本號與本地節(jié)點(diǎn)的最高 版本號進(jìn)行比較,如果串行化操作序列中的版本號是從本地節(jié)點(diǎn)的最高版本號+1開始,并 且版本號連續(xù),則說明接收到的串行化操作序列正確,轉(zhuǎn)到步驟九;否則轉(zhuǎn)到步驟七;步驟七、在線節(jié)點(diǎn)通過同步更新重發(fā)模塊向決策節(jié)點(diǎn)發(fā)送重發(fā)串行化操作序列的請求;步驟八、決策節(jié)點(diǎn)收到重發(fā)串行化操作序列的請求后,重新向該請求重發(fā)的節(jié)點(diǎn)發(fā)送 對應(yīng)的串行化操作序列,轉(zhuǎn)到步驟五;步驟九、在線節(jié)點(diǎn)通過同步更新執(zhí)行模塊根據(jù)接收的決策節(jié)點(diǎn)發(fā)送來的串行化操作序 列執(zhí)行本地數(shù)據(jù)庫操作,并更新最高版本號以及本地的串行化操作序列。
5.根據(jù)權(quán)利要求4所述的一種分布式數(shù)據(jù)同步方法,其特征在于,還包括節(jié)點(diǎn)新上線 時的數(shù)據(jù)同步方法,包括以下步驟步驟一、節(jié)點(diǎn)新上線時,通過節(jié)點(diǎn)上線初始化模塊確定新上線節(jié)點(diǎn)類型,向網(wǎng)絡(luò)中其他 節(jié)點(diǎn)發(fā)送上線消息,在節(jié)點(diǎn)狀態(tài)表中增加本節(jié)點(diǎn)信息;步驟二、新上線節(jié)點(diǎn)比較自身節(jié)點(diǎn)與決策節(jié)點(diǎn)的最高版本號信息,并進(jìn)行判斷,如果新 上線節(jié)點(diǎn)最高版本號小于決策節(jié)點(diǎn)最高版本號,則轉(zhuǎn)到步驟三,否則轉(zhuǎn)到步驟十;步驟三、新上線節(jié)點(diǎn)通過同步更新重發(fā)模塊請求決策節(jié)點(diǎn)發(fā)送新上線節(jié)點(diǎn)最高版本號 之后的串行化操作序列;步驟四、決策節(jié)點(diǎn)通過決策調(diào)控模塊將版本號從新上線節(jié)點(diǎn)最高版本號+1開始到?jīng)Q 策節(jié)點(diǎn)最高版本號的串行化操作序列發(fā)送給新上線節(jié)點(diǎn);步驟五、新上線節(jié)點(diǎn)通過同步更新接收模塊接收從決策節(jié)點(diǎn)發(fā)送來的串行化操作序列;步驟六、新上線節(jié)點(diǎn)將接收到的串行化操作序列中的版本號與本地節(jié)點(diǎn)和決策節(jié)點(diǎn)的 最高版本號進(jìn)行比較,如果串行化操作序列中的版本號是從本地節(jié)點(diǎn)的最高版本號+1開 始,并且版本號連續(xù),直到版本號為決策節(jié)點(diǎn)的最高版本號為止,則說明接收到的串行化操 作序列正確,轉(zhuǎn)到步驟九;否則轉(zhuǎn)到步驟七;步驟七、新上線節(jié)點(diǎn)通過同步更新重發(fā)模塊向決策節(jié)點(diǎn)發(fā)送重發(fā)串行化操作序列的請求;步驟八、決策節(jié)點(diǎn)收到重發(fā)串行化操作序列的請求后,重新向新上線節(jié)點(diǎn)發(fā)送對應(yīng)的 串行化操作序列,轉(zhuǎn)到步驟五;步驟九、新上線節(jié)點(diǎn)通過同步更新執(zhí)行模塊根據(jù)接收的決策節(jié)點(diǎn)發(fā)送來的串行化操作 序列執(zhí)行本地數(shù)據(jù)庫操作,并更新最高版本號以及本地的串行化操作序列;步驟十、新上線節(jié)點(diǎn)通過節(jié)點(diǎn)狀態(tài)維護(hù)模塊每隔一定時間在網(wǎng)絡(luò)中廣播本節(jié)點(diǎn)的IP 地址、最高版本號和節(jié)點(diǎn)類型。
全文摘要
本發(fā)明涉及一種分布式數(shù)據(jù)同步系統(tǒng)及方法,包括通過網(wǎng)絡(luò)連接的多個節(jié)點(diǎn),其中每個節(jié)點(diǎn)均包括數(shù)據(jù)庫、節(jié)點(diǎn)狀態(tài)表以及數(shù)據(jù)同步模塊,數(shù)據(jù)同步模塊具體包括節(jié)點(diǎn)上線初始化模塊、節(jié)點(diǎn)狀態(tài)維護(hù)模塊、節(jié)點(diǎn)類型選擇模塊、同步請求生成模塊、同步請求發(fā)送模塊、串行化調(diào)度模塊、決策調(diào)控模塊、同步更新接收模塊、同步更新重發(fā)模塊、同步更新執(zhí)行模塊。本發(fā)明還提供了利用所述系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)同步的方法。本發(fā)明提出的分布式數(shù)據(jù)同步系統(tǒng)及方法在無中心節(jié)點(diǎn)的網(wǎng)絡(luò)環(huán)境中,可以實(shí)現(xiàn)實(shí)時、并發(fā)操作的分布式數(shù)據(jù)同步,保證在任意節(jié)點(diǎn)可以隨時上線或下線的情況下,網(wǎng)絡(luò)中每個節(jié)點(diǎn)數(shù)據(jù)庫中的數(shù)據(jù)實(shí)時一致。
文檔編號H04L29/08GK102088489SQ201010624118
公開日2011年6月8日 申請日期2010年12月31日 優(yōu)先權(quán)日2010年12月31日
發(fā)明者包成剛, 李侃 申請人:北京理工大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
勃利县| 田东县| 海兴县| 赤壁市| 德化县| 淳安县| 射洪县| 建德市| 沂南县| 梅州市| 石棉县| 宁津县| 东台市| 隆尧县| 东乡族自治县| 南城县| 吉首市| 黄冈市| 宝应县| 怀化市| 满城县| 莆田市| 芮城县| 丰顺县| 普宁市| 天峨县| 湛江市| 潜江市| 抚顺市| 宁晋县| 贡嘎县| 岳西县| 承德市| 中超| 合作市| 弥渡县| 海南省| 建瓯市| 苍溪县| 靖西县| 德兴市|