本申請(qǐng)涉及區(qū)塊鏈技術(shù)領(lǐng)域,具體涉及一種數(shù)據(jù)同步方法及系統(tǒng)。
背景技術(shù):
區(qū)塊鏈網(wǎng)絡(luò)是一個(gè)基于分布式原理的網(wǎng)絡(luò)系統(tǒng),理論上來講各網(wǎng)絡(luò)節(jié)點(diǎn)上的內(nèi)容是一致的,想獲取區(qū)塊鏈中的數(shù)據(jù),只要從其中任意一個(gè)節(jié)點(diǎn),或者本地節(jié)點(diǎn)獲取即可。
但是在實(shí)際的應(yīng)用當(dāng)中,本地節(jié)點(diǎn)可以自由配置當(dāng)前本地節(jié)點(diǎn)的類型。例如,可以選擇性地將本地節(jié)點(diǎn)配置為包含完整區(qū)塊鏈數(shù)據(jù)的全記錄節(jié)點(diǎn)(full-node),或包含部分區(qū)塊鏈數(shù)據(jù)的非全記錄節(jié)點(diǎn)(n-full-node)。
本地存儲(chǔ)哪些數(shù)據(jù)可以由當(dāng)前本地節(jié)點(diǎn)類型及具體配置所決定,因此本地節(jié)點(diǎn)的區(qū)塊鏈中不一定存有當(dāng)前網(wǎng)絡(luò)中完整區(qū)塊鏈的所有數(shù)據(jù)。
在本地節(jié)點(diǎn)配置為非全記錄節(jié)點(diǎn)時(shí),在進(jìn)行數(shù)據(jù)同步時(shí)需要向所在區(qū)塊鏈網(wǎng)絡(luò)的其它節(jié)點(diǎn)獲取所需的數(shù)據(jù),當(dāng)前現(xiàn)有的數(shù)據(jù)同步方法難以實(shí)現(xiàn)在上述場(chǎng)景中進(jìn)行安全且高效的數(shù)據(jù)同步。
技術(shù)實(shí)現(xiàn)要素:
鑒于現(xiàn)有技術(shù)中的上述缺陷或不足,期望提供一種適用于區(qū)塊鏈網(wǎng)絡(luò)中非全記錄節(jié)點(diǎn)進(jìn)行安全且高效的數(shù)據(jù)同步的數(shù)據(jù)同步方法及系統(tǒng)。
第一方面,本發(fā)明提供一種數(shù)據(jù)同步方法,該方法包括:
向目標(biāo)節(jié)點(diǎn)請(qǐng)求包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù);其中,目標(biāo)數(shù)據(jù)對(duì)應(yīng)于一數(shù)據(jù)單元,包括用于通過校驗(yàn)將各目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈的數(shù)據(jù)鏈校驗(yàn)信息;
接收所請(qǐng)求的賬本數(shù)據(jù)并進(jìn)行校驗(yàn);
根據(jù)數(shù)據(jù)鏈校驗(yàn)信息將各通過校驗(yàn)的賬本數(shù)據(jù)中的目標(biāo)數(shù)據(jù)按序連接成數(shù)據(jù)鏈,并依次根據(jù)數(shù)據(jù)鏈中的各目標(biāo)數(shù)據(jù)對(duì)數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步。
第二方面,本發(fā)明提供另一種數(shù)據(jù)同步方法,該方法包括:
接收請(qǐng)求包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù)的請(qǐng)求信息;其中,目標(biāo)數(shù)據(jù)對(duì)應(yīng)于一數(shù)據(jù)單元,包括用于通過校驗(yàn)將各目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈的數(shù)據(jù)鏈校驗(yàn)信息;
根據(jù)請(qǐng)求信息在本地區(qū)塊鏈中查找包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù),返回查找到的賬本數(shù)據(jù)以供根據(jù)目標(biāo)數(shù)據(jù)對(duì)對(duì)應(yīng)的數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步。
第三方面,本發(fā)明提供一種數(shù)據(jù)同步系統(tǒng),該系統(tǒng)包括:
數(shù)據(jù)獲取單元,配置用于向目標(biāo)節(jié)點(diǎn)請(qǐng)求包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù);其中,目標(biāo)數(shù)據(jù)對(duì)應(yīng)于一數(shù)據(jù)單元,包括用于通過校驗(yàn)將各目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈的數(shù)據(jù)鏈校驗(yàn)信息;
數(shù)據(jù)校驗(yàn)單元,配置用于接收所請(qǐng)求的賬本數(shù)據(jù)并進(jìn)行校驗(yàn);
數(shù)據(jù)同步單元,配置用于根據(jù)數(shù)據(jù)鏈校驗(yàn)信息將各通過校驗(yàn)的賬本數(shù)據(jù)中的目標(biāo)數(shù)據(jù)按序連接成數(shù)據(jù)鏈,并依次根據(jù)數(shù)據(jù)鏈中的各目標(biāo)數(shù)據(jù)對(duì)數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步;
數(shù)據(jù)查詢單元,配置用于接收請(qǐng)求包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù)的請(qǐng)求信息,根據(jù)請(qǐng)求信息在本地區(qū)塊鏈中查找包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù),返回查找到的賬本數(shù)據(jù)以供根據(jù)目標(biāo)數(shù)據(jù)對(duì)對(duì)應(yīng)的數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步。
第四方面,本發(fā)明提供一種分布式數(shù)據(jù)同步網(wǎng)絡(luò),包括若干節(jié)點(diǎn),各節(jié)點(diǎn)上分別配置有上述數(shù)據(jù)同步系統(tǒng)。
第五方面,本發(fā)明還提供一種設(shè)備,包括一個(gè)或多個(gè)處理器和存儲(chǔ)器,其中存儲(chǔ)器包含可由該一個(gè)或多個(gè)處理器執(zhí)行的指令以使得該一個(gè)或多個(gè)處理器執(zhí)行根據(jù)本發(fā)明各實(shí)施例提供的數(shù)據(jù)同步方法。
第六方面,本發(fā)明還提供一種存儲(chǔ)有計(jì)算機(jī)程序的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),該計(jì)算機(jī)程序使計(jì)算機(jī)執(zhí)行根據(jù)本發(fā)明各實(shí)施例提供的數(shù)據(jù)同步方法。
本發(fā)明諸多實(shí)施例提供的數(shù)據(jù)同步方法及系統(tǒng)在通過交易存儲(chǔ)在區(qū)塊鏈的各賬本數(shù)據(jù)中、對(duì)應(yīng)于同一數(shù)據(jù)單元(例如數(shù)據(jù)表)的目標(biāo)數(shù)據(jù)中配置用于通過校驗(yàn)將各目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈的數(shù)據(jù)鏈校驗(yàn)信息,實(shí)現(xiàn)對(duì)獲取的各目標(biāo)數(shù)據(jù)進(jìn)行有序驗(yàn)證,同時(shí)還對(duì)接收的賬本數(shù)據(jù)進(jìn)行驗(yàn)證,為數(shù)據(jù)同步提供了多重安全保障;
本發(fā)明一些實(shí)施例提供的數(shù)據(jù)同步方法及系統(tǒng)進(jìn)一步通過將數(shù)據(jù)同步配置為分段同步,并在請(qǐng)求信息中配置相關(guān)信息以供校驗(yàn)當(dāng)前同步段和數(shù)據(jù)鏈的下一項(xiàng)目標(biāo)數(shù)據(jù),以避免在分段同步中進(jìn)行重復(fù)遍歷,保障數(shù)據(jù)同步的高效性;
本發(fā)明一些實(shí)施例提供的數(shù)據(jù)同步方法及系統(tǒng)進(jìn)一步通過將數(shù)據(jù)鏈校驗(yàn)信息配置為隊(duì)列號(hào)和校驗(yàn)碼(例如哈希值等)的組合,提高了校驗(yàn)的安全性的同時(shí)豐富了請(qǐng)求端和查詢端兩端的校驗(yàn)方式,并使得進(jìn)一步提高數(shù)據(jù)同步的效率具備可行性;
本發(fā)明一些實(shí)施例提供的數(shù)據(jù)同步方法及系統(tǒng)進(jìn)一步通過接收超時(shí)時(shí)重新生成包括實(shí)時(shí)的同步段信息的請(qǐng)求信息,并更換目標(biāo)節(jié)點(diǎn)發(fā)送,進(jìn)一步提高了數(shù)據(jù)同步的效率;
本發(fā)明一些實(shí)施例提供的數(shù)據(jù)同步方法及系統(tǒng)進(jìn)一步通過將無法與當(dāng)前數(shù)據(jù)鏈連接的目標(biāo)數(shù)據(jù)存入臨時(shí)隊(duì)列,保障了數(shù)據(jù)同步的準(zhǔn)確性和高效性;
本發(fā)明一些實(shí)施例提供的數(shù)據(jù)同步方法及系統(tǒng)進(jìn)一步通過在每個(gè)同步段查詢完時(shí)發(fā)送能與數(shù)據(jù)鏈連接成鏈的結(jié)束信息,保障了分段同步的準(zhǔn)確性和高效性;
本發(fā)明一些實(shí)施例提供的數(shù)據(jù)同步方法及系統(tǒng)進(jìn)一步通過對(duì)目標(biāo)數(shù)據(jù)進(jìn)行驗(yàn)證,以避免進(jìn)行不必要的同步操作,進(jìn)一步提高了數(shù)據(jù)同步的準(zhǔn)確性和高效性;
本發(fā)明一些實(shí)施例提供的數(shù)據(jù)同步方法及系統(tǒng)進(jìn)一步通過將目標(biāo)數(shù)據(jù)配置為數(shù)據(jù)庫操作日志,減少了存儲(chǔ)在區(qū)塊鏈中的數(shù)據(jù)量,減少了數(shù)據(jù)通訊的時(shí)間成本,進(jìn)一步提高了數(shù)據(jù)同步的高效性;
本發(fā)明一些實(shí)施例提供的數(shù)據(jù)同步方法及系統(tǒng)進(jìn)一步通過在查詢當(dāng)前同步段之前利用區(qū)塊鏈的特性校驗(yàn)當(dāng)前同步段的最后一項(xiàng)賬本數(shù)據(jù)(結(jié)束點(diǎn)),從而無需對(duì)部分同步段進(jìn)行遍歷查詢,大幅提升了數(shù)據(jù)同步的效率。
附圖說明
通過閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本申請(qǐng)的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
圖1為本發(fā)明一實(shí)施例中一種數(shù)據(jù)同步方法的流程圖。
圖2為圖1所示方法的一種優(yōu)選實(shí)施方式的流程圖。
圖3為圖2所示方法的一種優(yōu)選實(shí)施方式的流程圖。
圖4為圖3所示方法的一種優(yōu)選實(shí)施方式的流程圖。
圖5為圖1所示方法中步驟S14的一種優(yōu)選實(shí)施方式的流程圖。
圖6為圖1所示方法中步驟S16的一種優(yōu)選實(shí)施方式的流程圖。
圖7為圖6所示步驟S16的一種優(yōu)選實(shí)施方式的流程圖。
圖8為圖1所示方法的一種優(yōu)選實(shí)施方式的流程圖。
圖9為本發(fā)明一實(shí)施例中另一種數(shù)據(jù)同步方法的流程圖。
圖10為圖9所示方法的一種優(yōu)選實(shí)施方式的流程圖。
圖11為圖9所示步驟S25的一種優(yōu)選實(shí)施方式的流程圖。
圖12為圖11所示步驟S25的一種優(yōu)選實(shí)施方式的流程圖。
圖13為本發(fā)明一實(shí)施例中數(shù)據(jù)同步系統(tǒng)的結(jié)構(gòu)示意圖。
圖14為本發(fā)明一實(shí)施例中分布式數(shù)據(jù)同步網(wǎng)絡(luò)的結(jié)構(gòu)示意圖。
圖15為本發(fā)明一實(shí)施例中一種設(shè)備的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本申請(qǐng)作進(jìn)一步的詳細(xì)說明??梢岳斫獾氖牵颂幩枋龅木唧w實(shí)施例僅僅用于解釋相關(guān)發(fā)明,而非對(duì)該發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與發(fā)明相關(guān)的部分。
需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。下面將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本申請(qǐng)。
圖1為本發(fā)明一實(shí)施例中一種數(shù)據(jù)同步方法的流程圖。
如圖1所示,在本實(shí)施例中,本發(fā)明提供的一種適用于數(shù)據(jù)同步端的數(shù)據(jù)同步方法包括:
S12:向目標(biāo)節(jié)點(diǎn)請(qǐng)求包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù)。其中,目標(biāo)數(shù)據(jù)對(duì)應(yīng)于一數(shù)據(jù)單元,包括用于通過校驗(yàn)將各目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈的數(shù)據(jù)鏈校驗(yàn)信息。
S14:接收所請(qǐng)求的賬本數(shù)據(jù)并進(jìn)行校驗(yàn)。
S16:根據(jù)數(shù)據(jù)鏈校驗(yàn)信息將各通過校驗(yàn)的賬本數(shù)據(jù)中的目標(biāo)數(shù)據(jù)按序連接成數(shù)據(jù)鏈,并依次根據(jù)數(shù)據(jù)鏈中的各目標(biāo)數(shù)據(jù)對(duì)數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步。
具體地,在本實(shí)施例中,數(shù)據(jù)單元為數(shù)據(jù)表,目標(biāo)數(shù)據(jù)為數(shù)據(jù)庫操作日志,數(shù)據(jù)鏈校驗(yàn)信息包括以下一組信息:前一目標(biāo)數(shù)據(jù)所在賬本數(shù)據(jù)的第一隊(duì)列號(hào)sfPreviousTxnLgrSeq,當(dāng)前目標(biāo)數(shù)據(jù)所在賬本數(shù)據(jù)的第二隊(duì)列號(hào)sfTxnLgrSeq,前一目標(biāo)數(shù)據(jù)所在賬本數(shù)據(jù)的第一校驗(yàn)碼sfPrevTxnLedgerHash,當(dāng)前目標(biāo)數(shù)據(jù)所在賬本數(shù)據(jù)的第二校驗(yàn)碼sfTxnLedgerHash,其中校驗(yàn)碼類型為哈希值。
例如,在當(dāng)前網(wǎng)絡(luò)區(qū)塊鏈的各賬本數(shù)據(jù)(ledger)中,隊(duì)列號(hào)為5、14、22、90等的各ledger中存有數(shù)據(jù)表m的數(shù)據(jù)庫操作日志。
通過交易存儲(chǔ)在隊(duì)列號(hào)為5的ledger中的目標(biāo)數(shù)據(jù)TD1中存儲(chǔ)的數(shù)據(jù)鏈校驗(yàn)信息包括:第一隊(duì)列號(hào)0,第二隊(duì)列號(hào)5,第一校驗(yàn)碼Null,第二校驗(yàn)碼Hashledger5;
存儲(chǔ)在隊(duì)列號(hào)為14的ledger中的目標(biāo)數(shù)據(jù)TD2中存儲(chǔ)的數(shù)據(jù)鏈校驗(yàn)信息包括:第一隊(duì)列號(hào)5,第二隊(duì)列號(hào)14,第一校驗(yàn)碼Hashledger5,第二校驗(yàn)碼Hashledger14;
依此類推,每項(xiàng)目標(biāo)數(shù)據(jù)中的數(shù)據(jù)鏈校驗(yàn)信息可供校驗(yàn)前一項(xiàng)目標(biāo)數(shù)據(jù),從而將各目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈。
在更多實(shí)施例中,還可根據(jù)實(shí)際需求采用以下可選配置:
將數(shù)據(jù)單元配置為數(shù)據(jù)塊等不同類型或格式的數(shù)據(jù)單元;
將目標(biāo)數(shù)據(jù)配置為待更新數(shù)據(jù)、待更新數(shù)據(jù)的下載地址等不同類型或格式的目標(biāo)數(shù)據(jù);
將校驗(yàn)碼類型配置為各種本領(lǐng)域技術(shù)人員常用的加密算法或校驗(yàn)算法所生成的校驗(yàn)碼;
將數(shù)據(jù)鏈校驗(yàn)信息配置為包括當(dāng)前目標(biāo)數(shù)據(jù)所在賬本數(shù)據(jù)的第二隊(duì)列號(hào),后一目標(biāo)數(shù)據(jù)所在賬本數(shù)據(jù)的第三隊(duì)列號(hào),當(dāng)前目標(biāo)數(shù)據(jù)所在賬本數(shù)據(jù)的第二校驗(yàn)碼,后一目標(biāo)數(shù)據(jù)所在賬本數(shù)據(jù)的第三校驗(yàn)碼;或,包括上述第一隊(duì)列號(hào)、第二隊(duì)列號(hào)、第三隊(duì)列號(hào),以及,第一校驗(yàn)碼、第二校驗(yàn)碼、第三校驗(yàn)碼;乃至于其它各類不同參數(shù)組合的配置,只要能通過校驗(yàn)將各目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈,即可實(shí)現(xiàn)相同的技術(shù)效果。
上述實(shí)施例在通過交易存儲(chǔ)在區(qū)塊鏈的各賬本數(shù)據(jù)中、對(duì)應(yīng)于同一數(shù)據(jù)單元(例如數(shù)據(jù)表)的目標(biāo)數(shù)據(jù)中配置用于通過校驗(yàn)將各目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈的數(shù)據(jù)鏈校驗(yàn)信息,實(shí)現(xiàn)對(duì)獲取的各目標(biāo)數(shù)據(jù)進(jìn)行有序驗(yàn)證,同時(shí)還對(duì)接收的賬本數(shù)據(jù)進(jìn)行驗(yàn)證,為數(shù)據(jù)同步提供了多重安全保障;進(jìn)一步還通過將數(shù)據(jù)鏈校驗(yàn)信息配置為隊(duì)列號(hào)和校驗(yàn)碼(例如哈希值等)的組合,提高了校驗(yàn)的安全性的同時(shí)豐富了請(qǐng)求端和查詢端兩端的校驗(yàn)方式,并使得進(jìn)一步提高數(shù)據(jù)同步的效率具備可行性;還進(jìn)一步通過將目標(biāo)數(shù)據(jù)配置為數(shù)據(jù)庫操作日志,減少了存儲(chǔ)在區(qū)塊鏈中的數(shù)據(jù)量,減少了數(shù)據(jù)通訊的時(shí)間成本,進(jìn)一步提高了數(shù)據(jù)同步的高效性。
圖2為圖1所示方法的一種優(yōu)選實(shí)施方式的流程圖。
如圖2所示,在一優(yōu)選實(shí)施例中,步驟S12包括:
S121:將當(dāng)前網(wǎng)絡(luò)中的區(qū)塊鏈劃分為若干同步段。
S123:依次向目標(biāo)節(jié)點(diǎn)發(fā)送請(qǐng)求信息以分別獲取各同步段內(nèi)包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù)。
其中,請(qǐng)求信息包括用于校驗(yàn)當(dāng)前同步段中第一項(xiàng)賬本數(shù)據(jù)的賬本數(shù)據(jù)校驗(yàn)信息,以及,當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)的校驗(yàn)信息。
具體地,在本實(shí)施例中,步驟S121中,將區(qū)塊鏈劃分為長(zhǎng)度為256的若干同步段,步驟S123中依次請(qǐng)求遍歷各同步段,各同步段的賬本數(shù)據(jù)的隊(duì)列號(hào)為1-256、257-512、513-768、……,等。在更多實(shí)施例中,還可根據(jù)實(shí)際需求將同步段的長(zhǎng)度設(shè)置為不同大小的固定長(zhǎng)度或不固定長(zhǎng)度。
在本實(shí)施例中,用于校驗(yàn)當(dāng)前同步段中第一項(xiàng)賬本數(shù)據(jù)的賬本數(shù)據(jù)校驗(yàn)信息包括當(dāng)前同步段中第一項(xiàng)賬本數(shù)據(jù)的隊(duì)列號(hào)TxnLedgerSeq和哈希值TxnLedgerHash;當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)的校驗(yàn)信息包括當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)所在賬本數(shù)據(jù)的隊(duì)列號(hào)LedgerSeq和哈希值LedgerHash。
以請(qǐng)求隊(duì)列號(hào)為257-512的同步段為例,請(qǐng)求信息包括用于校驗(yàn)隊(duì)列號(hào)為257的ledger的賬本數(shù)據(jù)校驗(yàn)信息(257,Hashledger257),以及當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)所在隊(duì)列號(hào)為251的賬本數(shù)據(jù)的校驗(yàn)信息(251,Hashledger251)。其中,Hashledger257可以根據(jù)具體情況從本地或當(dāng)前網(wǎng)絡(luò)其它節(jié)點(diǎn)的區(qū)塊鏈中獲取。
在更多實(shí)施例中,上述請(qǐng)求信息中的兩項(xiàng)校驗(yàn)信息還可根據(jù)配置不同參數(shù)的數(shù)據(jù)鏈校驗(yàn)信息采用相對(duì)應(yīng)的不同配置。
上述實(shí)施例進(jìn)一步通過將數(shù)據(jù)同步配置為分段同步,并在請(qǐng)求信息中配置相關(guān)信息以供校驗(yàn)當(dāng)前同步段和數(shù)據(jù)鏈的下一項(xiàng)目標(biāo)數(shù)據(jù),以避免在分段同步中進(jìn)行重復(fù)遍歷,保障數(shù)據(jù)同步的高效性。
圖3為圖2所示方法的一種優(yōu)選實(shí)施方式的流程圖。
如圖3所示,在一優(yōu)選實(shí)施例中,步驟S123之前還包括:
S122:判斷本地區(qū)塊鏈?zhǔn)欠翊嬗挟?dāng)前同步段:若存有,則直接從本地獲取當(dāng)前同步段內(nèi)包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù)。
圖4為圖3所示方法的一種優(yōu)選實(shí)施方式的流程圖。
如圖4所示,在一優(yōu)選實(shí)施例中,步驟S12之前還包括:
S11:獲取該數(shù)據(jù)單元的名稱,并查詢當(dāng)前網(wǎng)絡(luò)的區(qū)塊鏈中是否存在該數(shù)據(jù)單元:若不存在,則結(jié)束同步。
具體地,例如當(dāng)接收到非法的數(shù)據(jù)同步請(qǐng)求,要求對(duì)區(qū)塊鏈中不存在的數(shù)據(jù)表n進(jìn)行數(shù)據(jù)同步時(shí),可能會(huì)導(dǎo)致作無用功而浪費(fèi)系統(tǒng)資源,在同步之前先獲取數(shù)據(jù)表n的名稱,并查詢區(qū)塊鏈中是否存在數(shù)據(jù)表n,以篩除非法數(shù)據(jù)同步請(qǐng)求。
圖5為圖1所示方法中步驟S14的一種優(yōu)選實(shí)施方式的流程圖。
如圖5所示,在一優(yōu)選實(shí)施例中,步驟S14包括:
S141:接收所請(qǐng)求的賬本數(shù)據(jù);
S143:從本地或當(dāng)前網(wǎng)絡(luò)的區(qū)塊鏈獲取所接收的賬本數(shù)據(jù)的校驗(yàn)碼;
S145:根據(jù)所獲取的校驗(yàn)碼和所接收的賬本數(shù)據(jù)中的第二校驗(yàn)碼進(jìn)行校驗(yàn):若校驗(yàn)失敗,則返回步驟S141。
具體地,在本實(shí)施例中,每個(gè)ledger會(huì)記錄之前256個(gè)ledger的哈希值,同時(shí)每隔256*256個(gè)ledger會(huì)記錄前面的隊(duì)列號(hào)為256的整數(shù)倍的ledger的哈希值。
例如,在步驟S141中,接收到隊(duì)列號(hào)為22的ledger;
在步驟S143中,判斷本地區(qū)塊鏈?zhǔn)欠翊嬗嘘?duì)列號(hào)為23-278中任一項(xiàng)ledger,若存有,則直接從中獲取Hashledger22;若為存有,則從網(wǎng)絡(luò)中其它節(jié)點(diǎn)的區(qū)塊鏈中獲取Hashledger22;
在步驟S145中,對(duì)接收到的ledger中的第二校驗(yàn)碼Hashledger22和步驟S143中獲取的Hashledger22進(jìn)行比對(duì)校驗(yàn):兩者相同則校驗(yàn)成功,進(jìn)入步驟S16;否則校驗(yàn)失敗,舍棄接收的隊(duì)列號(hào)為22的ledger,返回步驟S141繼續(xù)等待接收數(shù)據(jù)。
在一優(yōu)選實(shí)施例中,步驟S141還包括:若接收超時(shí),則重新生成請(qǐng)求信息,向目標(biāo)節(jié)點(diǎn)發(fā)送,或,更換目標(biāo)節(jié)點(diǎn)發(fā)送。
在一優(yōu)選實(shí)施例中,請(qǐng)求信息還包括根據(jù)當(dāng)前已接收并通過校驗(yàn)的各賬本數(shù)據(jù)確定的同步段信息。
具體地,重新生成請(qǐng)求信息時(shí),根據(jù)當(dāng)前已接收并通過校驗(yàn)的各賬本數(shù)據(jù)重新確定同步段的同步范圍,生成同步段信息,并更新上述用于校驗(yàn)當(dāng)前同步段中第一項(xiàng)賬本數(shù)據(jù)的賬本數(shù)據(jù)校驗(yàn)信息,以及,當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)的校驗(yàn)信息。
例如,當(dāng)節(jié)點(diǎn)A接收節(jié)點(diǎn)B返回的隊(duì)列號(hào)為22的ledger超時(shí),節(jié)點(diǎn)A可能已經(jīng)接收了隊(duì)列號(hào)為5和14的ledger,并對(duì)數(shù)據(jù)表進(jìn)行了同步更新,同時(shí)也可能已經(jīng)接收了隊(duì)列號(hào)為251的ledger并存儲(chǔ)在臨時(shí)隊(duì)列中(下文會(huì)詳細(xì)闡述),因此在重新生成請(qǐng)求信息時(shí)需要重新確定同步段,不再是1-256,而可能是15-250,以避免重復(fù)遍歷查詢同步。同時(shí),重新確定同步段為15-250時(shí),更新當(dāng)前同步段中第一項(xiàng)賬本數(shù)據(jù)的賬本數(shù)據(jù)校驗(yàn)信息為(15,Hashledger15),當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)的校驗(yàn)信息為(14,Hashledger14)。
上述實(shí)施例進(jìn)一步通過接收超時(shí)時(shí)重新生成包括實(shí)時(shí)的同步段信息的請(qǐng)求信息,并更換目標(biāo)節(jié)點(diǎn)發(fā)送,進(jìn)一步提高了數(shù)據(jù)同步的效率。
圖6為圖1所示方法中步驟S16的一種優(yōu)選實(shí)施方式的流程圖。
如圖6所示,在一優(yōu)選實(shí)施例中,步驟S16包括:
S165:根據(jù)數(shù)據(jù)鏈校驗(yàn)信息判斷當(dāng)前通過校驗(yàn)的賬本數(shù)據(jù)中的第一目標(biāo)數(shù)據(jù)是否能與當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)連接成鏈:
否,則進(jìn)入步驟S166:將第一目標(biāo)數(shù)據(jù)存入臨時(shí)隊(duì)列;
是,則進(jìn)入步驟S167:將第一目標(biāo)數(shù)據(jù)存入當(dāng)前數(shù)據(jù)鏈,并根據(jù)第一目標(biāo)數(shù)據(jù)對(duì)所述數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步;以及,
S168:將臨時(shí)隊(duì)列中能與當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)連接成鏈的第二目標(biāo)數(shù)據(jù)存入當(dāng)前數(shù)據(jù)鏈,并根據(jù)第二目標(biāo)數(shù)據(jù)對(duì)數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步。
具體地,例如,查詢端依次查詢到并返回了隊(duì)列號(hào)為5、14、22、90、150、251等若干ledger,然而因?yàn)榫W(wǎng)絡(luò)等原因?qū)е陆邮斩瞬⒎前瓷鲜鲰樞蚪邮丈鲜龈黜?xiàng)ledger。
數(shù)據(jù)鏈的初始項(xiàng)的隊(duì)列號(hào)為0,校驗(yàn)碼為null,當(dāng)隊(duì)列號(hào)為5的ledger通過步驟S14的校驗(yàn),進(jìn)入步驟S165后,將其數(shù)據(jù)鏈校驗(yàn)信息中的第一隊(duì)列號(hào)0和第一校驗(yàn)碼Null與數(shù)據(jù)鏈的初始項(xiàng)比對(duì)校驗(yàn),校驗(yàn)通過,可以連接成鏈,則進(jìn)入步驟S167,將隊(duì)列號(hào)為5的ledger存入數(shù)據(jù)鏈,并根據(jù)隊(duì)列號(hào)為5的ledger對(duì)數(shù)據(jù)表m進(jìn)行數(shù)據(jù)同步。在步驟S168中,此時(shí)臨時(shí)隊(duì)列為空,不存在第二目標(biāo)數(shù)據(jù),返回等待。
當(dāng)隊(duì)列號(hào)為22的ledger通過步驟S14的校驗(yàn),進(jìn)入步驟S165后,將其第一隊(duì)列號(hào)14和第一校驗(yàn)碼Hashledger14分別與當(dāng)前數(shù)據(jù)鏈的最后一項(xiàng)隊(duì)列號(hào)為5的ledger的第二隊(duì)列號(hào)5和第二校驗(yàn)碼Hashledger5進(jìn)行校驗(yàn):校驗(yàn)失敗,無法連接成鏈,則進(jìn)入步驟S166,將隊(duì)列號(hào)為22的ledger存入臨時(shí)隊(duì)列,返回等待。
當(dāng)隊(duì)列號(hào)為90的ledger通過步驟S14的校驗(yàn),進(jìn)入步驟S165后,同樣校驗(yàn)失敗,無法連接成鏈,存入臨時(shí)隊(duì)列,返回等待。
當(dāng)隊(duì)列號(hào)為14的ledger通過步驟S14的校驗(yàn),進(jìn)入步驟S165后,與當(dāng)前數(shù)據(jù)鏈的最后一項(xiàng)隊(duì)列號(hào)為5的ledger進(jìn)行校驗(yàn):校驗(yàn)通過,可以連接成鏈,則進(jìn)入步驟S167,將隊(duì)列號(hào)為14的ledger存入數(shù)據(jù)鏈,并根據(jù)隊(duì)列號(hào)為14的ledger對(duì)數(shù)據(jù)表m進(jìn)行數(shù)據(jù)同步。
在步驟S168中,分別校驗(yàn)臨時(shí)隊(duì)列中的兩項(xiàng)ledger能否與當(dāng)前數(shù)據(jù)鏈最后一項(xiàng)隊(duì)列號(hào)為14的ledger連接成鏈:存在第二目標(biāo)數(shù)據(jù),隊(duì)列號(hào)為22的ledger,則將隊(duì)列號(hào)為22的ledger存入當(dāng)前數(shù)據(jù)鏈,并根據(jù)隊(duì)列號(hào)為22的ledger對(duì)數(shù)據(jù)表m進(jìn)行數(shù)據(jù)同步;
繼續(xù)校驗(yàn)臨時(shí)隊(duì)列中是否存在與當(dāng)前數(shù)據(jù)鏈最后一項(xiàng)隊(duì)列號(hào)為22的ledger連接成鏈的第二目標(biāo)數(shù)據(jù):存在第二目標(biāo)數(shù)據(jù),隊(duì)列號(hào)為90的ledger,則將隊(duì)列號(hào)為90的ledger存入當(dāng)前數(shù)據(jù)鏈,并根據(jù)隊(duì)列號(hào)為90的ledger對(duì)數(shù)據(jù)表m進(jìn)行數(shù)據(jù)同步;
繼續(xù)校驗(yàn)臨時(shí)隊(duì)列中是否存在與當(dāng)前數(shù)據(jù)鏈最后一項(xiàng)隊(duì)列號(hào)為90的ledger連接成鏈的第二目標(biāo)數(shù)據(jù):不存在,則返回等待。
上述實(shí)施例進(jìn)一步通過將無法與當(dāng)前數(shù)據(jù)鏈連接的目標(biāo)數(shù)據(jù)存入臨時(shí)隊(duì)列,保障了數(shù)據(jù)同步的準(zhǔn)確性和高效性。
圖7為圖6所示步驟S16的一種優(yōu)選實(shí)施方式的流程圖。
如圖7所示,在一優(yōu)選實(shí)施例中,步驟S165之前還包括:
S161:判斷當(dāng)前通過校驗(yàn)的賬本數(shù)據(jù)中存在第一目標(biāo)數(shù)據(jù)或當(dāng)前同步段的結(jié)束信息:
若存在結(jié)束信息,則進(jìn)入步驟S162:判斷所述結(jié)束信息是否能與當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)連接成鏈:
是,則進(jìn)入步驟S163:結(jié)束當(dāng)前同步段的數(shù)據(jù)同步,返回步驟S12;
否,則將所述結(jié)束信息存入臨時(shí)隊(duì)列,返回步驟S14。
具體地,通過結(jié)束信息對(duì)同步段進(jìn)行標(biāo)識(shí),可以使同步端及時(shí)獲知當(dāng)前同步段是否同步完成。
上述實(shí)施例進(jìn)一步通過將無法與當(dāng)前數(shù)據(jù)鏈連接的目標(biāo)數(shù)據(jù)存入臨時(shí)隊(duì)列,保障了數(shù)據(jù)同步的準(zhǔn)確性和高效性。
圖8為圖1所示方法的一種優(yōu)選實(shí)施方式的流程圖。
如圖8所示,在一優(yōu)選實(shí)施例中,步驟S16之前還包括以下至少一項(xiàng):
S151:檢驗(yàn)數(shù)據(jù)同步的目標(biāo)數(shù)據(jù)庫中是否還存在該數(shù)據(jù)單元:否,則終止數(shù)據(jù)同步;
S153:根據(jù)當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)的第二隊(duì)列號(hào)檢驗(yàn)第一目標(biāo)數(shù)據(jù)的第二隊(duì)列號(hào)是否正常:否,則返回步驟S14。
具體地,對(duì)于步驟S151,當(dāng)配置在本地節(jié)點(diǎn)或其它位置的數(shù)據(jù)同步目標(biāo)數(shù)據(jù)庫中因某些配置策略將數(shù)據(jù)表m刪除了,則無需再繼續(xù)進(jìn)行對(duì)數(shù)據(jù)表m的數(shù)據(jù)同步;
對(duì)于步驟S153,本專利中目標(biāo)數(shù)據(jù)組成的數(shù)據(jù)鏈為前向鏈表,組成數(shù)據(jù)鏈的各目標(biāo)數(shù)據(jù)所在ledger的隊(duì)列號(hào)依次遞增,若第一目標(biāo)數(shù)據(jù)的第二隊(duì)列號(hào)不大于當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)的第二隊(duì)列號(hào),例如當(dāng)前數(shù)據(jù)鏈中各隊(duì)列號(hào)依次為5、14、22、……、151、234,而第一目標(biāo)數(shù)據(jù)的第二隊(duì)列號(hào)為180,則顯而易見地,第一目標(biāo)數(shù)據(jù)為異常數(shù)據(jù),舍棄第一目標(biāo)數(shù)據(jù),返回等待。
上述實(shí)施例進(jìn)一步通過對(duì)目標(biāo)數(shù)據(jù)進(jìn)行驗(yàn)證,以避免進(jìn)行不必要的同步操作,進(jìn)一步提高了數(shù)據(jù)同步的準(zhǔn)確性和高效性。
圖9為本發(fā)明一實(shí)施例中另一種數(shù)據(jù)同步方法的流程圖。
如圖9所示,在本實(shí)施例中,本發(fā)明還提供另一種適用于查詢端的數(shù)據(jù)同步方法,包括:
S23:接收請(qǐng)求包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù)的請(qǐng)求信息。其中,目標(biāo)數(shù)據(jù)對(duì)應(yīng)于一數(shù)據(jù)單元,包括用于通過校驗(yàn)將各目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈的數(shù)據(jù)鏈校驗(yàn)信息。
S25:根據(jù)請(qǐng)求信息在本地區(qū)塊鏈中查找所述包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù),返回查找到的賬本數(shù)據(jù)以供根據(jù)目標(biāo)數(shù)據(jù)對(duì)對(duì)應(yīng)的數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步。
圖10為圖9所示方法的一種優(yōu)選實(shí)施方式的流程圖。
如圖10所示,在一優(yōu)選實(shí)施例中,當(dāng)前網(wǎng)絡(luò)中的區(qū)塊鏈劃分為若干同步段,請(qǐng)求信息包括用于校驗(yàn)當(dāng)前同步段中第一項(xiàng)賬本數(shù)據(jù)的賬本數(shù)據(jù)校驗(yàn)信息,以及,當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)的校驗(yàn)信息。步驟S25之前還包括:
S24:根據(jù)賬本數(shù)據(jù)校驗(yàn)信息校驗(yàn)本地區(qū)塊鏈中是否存在當(dāng)前同步段中第一項(xiàng)賬本數(shù)據(jù):否,則結(jié)束查找。
具體地,利用請(qǐng)求信息中的賬本數(shù)據(jù)校驗(yàn)信息和賬本數(shù)據(jù)中的校驗(yàn)碼進(jìn)行校驗(yàn),一方面可以有效篩除非法請(qǐng)求,無需對(duì)非法請(qǐng)求進(jìn)行查找,避免浪費(fèi)系統(tǒng)資源;另一方面可以有效提高查找效率,例如節(jié)點(diǎn)A向節(jié)點(diǎn)B發(fā)送請(qǐng)求信息,節(jié)點(diǎn)B發(fā)現(xiàn)本地區(qū)塊鏈中也未存有該同步段,則直接結(jié)束查找,使節(jié)點(diǎn)A可盡快向節(jié)點(diǎn)C重新發(fā)送請(qǐng)求信息。
圖11為圖9所示步驟S25的一種優(yōu)選實(shí)施方式的流程圖。
如圖11所示,在一優(yōu)選實(shí)施例中,步驟S25包括:
S251:判斷本地區(qū)塊鏈?zhǔn)欠癜ㄍ暾漠?dāng)前同步段:
否,則進(jìn)入步驟S252:根據(jù)請(qǐng)求信息在本地區(qū)塊鏈中查找包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù),返回查找到的賬本數(shù)據(jù);
是,則進(jìn)入步驟S253:判斷當(dāng)前同步段中最后一項(xiàng)賬本數(shù)據(jù)的隊(duì)列號(hào)是否不小于請(qǐng)求信息中當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)的第二隊(duì)列號(hào):
否,則進(jìn)入步驟S254:生成能與請(qǐng)求信息所包括的數(shù)據(jù)鏈校驗(yàn)信息連接的結(jié)束信息并返回。
是,則進(jìn)入步驟S252。
具體地,由于本專利中目標(biāo)數(shù)據(jù)組成的數(shù)據(jù)鏈為前向鏈表,例如當(dāng)數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)所在ledger的隊(duì)列號(hào)為893時(shí),則下一目標(biāo)數(shù)據(jù)所在ledger的隊(duì)列號(hào)必然大于893,若當(dāng)前同步段為513-768,則對(duì)比得知768<893,無需在當(dāng)前同步段進(jìn)行遍歷查找,直接返回結(jié)束信息。
上述實(shí)施例進(jìn)一步通過在查詢當(dāng)前同步段之前利用區(qū)塊鏈的特性校驗(yàn)當(dāng)前同步段的最后一項(xiàng)賬本數(shù)據(jù)(結(jié)束點(diǎn)),從而無需對(duì)部分同步段進(jìn)行遍歷查詢,大幅提升了數(shù)據(jù)同步的效率。
圖12為圖11所示步驟S25的一種優(yōu)選實(shí)施方式的流程圖。
如圖12所示,在一優(yōu)選實(shí)施例中,步驟S25還包括:
S255:在本地區(qū)塊鏈中結(jié)束查找時(shí),判斷是否查找到賬本數(shù)據(jù):
是,則進(jìn)入步驟S256:生成能與所返回的最后一項(xiàng)賬本數(shù)據(jù)中的目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈的結(jié)束信息并返回;
否,則進(jìn)入步驟S254。
圖13為本發(fā)明一實(shí)施例中數(shù)據(jù)同步系統(tǒng)的結(jié)構(gòu)示意圖。圖13所示的數(shù)據(jù)同步系統(tǒng)配置于分布式網(wǎng)絡(luò)的任一節(jié)點(diǎn)上,可作為數(shù)據(jù)同步端對(duì)應(yīng)執(zhí)行圖1-8所示的任一數(shù)據(jù)同步方法,也可作為數(shù)據(jù)查詢端對(duì)應(yīng)執(zhí)行圖9-12所示的任一數(shù)據(jù)同步方法。
如圖13所示,在本實(shí)施例中,本發(fā)明提供的數(shù)據(jù)同步系統(tǒng)10包括數(shù)據(jù)獲取單元11、數(shù)據(jù)校驗(yàn)單元13、數(shù)據(jù)同步單元15,以及數(shù)據(jù)查詢單元17。
數(shù)據(jù)獲取單元11配置用于向目標(biāo)節(jié)點(diǎn)請(qǐng)求包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù)。其中,目標(biāo)數(shù)據(jù)對(duì)應(yīng)于一數(shù)據(jù)單元,包括用于通過校驗(yàn)將各目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈的數(shù)據(jù)鏈校驗(yàn)信息。
數(shù)據(jù)校驗(yàn)單元13配置用于接收所請(qǐng)求的賬本數(shù)據(jù)并進(jìn)行校驗(yàn)。
數(shù)據(jù)同步單元15配置用于根據(jù)數(shù)據(jù)鏈校驗(yàn)信息將各通過校驗(yàn)的賬本數(shù)據(jù)中的目標(biāo)數(shù)據(jù)按序連接成數(shù)據(jù)鏈,并依次根據(jù)數(shù)據(jù)鏈中的各目標(biāo)數(shù)據(jù)對(duì)數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步。
數(shù)據(jù)查詢單元17配置用于接收請(qǐng)求包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù)的請(qǐng)求信息,根據(jù)請(qǐng)求信息在本地區(qū)塊鏈中查找包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù),返回查找到的賬本數(shù)據(jù)以供根據(jù)目標(biāo)數(shù)據(jù)對(duì)對(duì)應(yīng)的數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步。
在本實(shí)施例中,上述各單元配置為本地節(jié)點(diǎn)中的軟件程序,從而對(duì)配置在本地節(jié)點(diǎn)或其它位置的數(shù)據(jù)同步目標(biāo)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)同步,或,根據(jù)接收的請(qǐng)求信息對(duì)本地節(jié)點(diǎn)存儲(chǔ)的區(qū)塊鏈進(jìn)行查詢,并返回查找到的賬本數(shù)據(jù)以供請(qǐng)求節(jié)點(diǎn)進(jìn)行數(shù)據(jù)同步。在更多實(shí)施例中,上述各單元還可根據(jù)實(shí)際需求配置為專用于數(shù)據(jù)同步或數(shù)據(jù)查詢的硬件裝置,或本領(lǐng)域技術(shù)人員可以理解的軟硬件組合,可實(shí)現(xiàn)相同的技術(shù)效果。
在一優(yōu)選實(shí)施例中,數(shù)據(jù)獲取單元11進(jìn)一步配置用于:將當(dāng)前網(wǎng)絡(luò)中的區(qū)塊鏈劃分為若干同步段;依次向目標(biāo)節(jié)點(diǎn)發(fā)送請(qǐng)求信息以分別獲取各同步段內(nèi)包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù)。
其中,請(qǐng)求信息包括用于校驗(yàn)當(dāng)前同步段中第一項(xiàng)賬本數(shù)據(jù)的賬本數(shù)據(jù)校驗(yàn)信息,以及,當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)的校驗(yàn)信息。
數(shù)據(jù)查詢單元17進(jìn)一步配置用于根據(jù)接收的請(qǐng)求信息中的賬本數(shù)據(jù)校驗(yàn)信息校驗(yàn)本地區(qū)塊鏈中是否存在當(dāng)前同步段中第一項(xiàng)賬本數(shù)據(jù):否,則結(jié)束查找。
在一優(yōu)選實(shí)施例中,數(shù)據(jù)獲取單元11進(jìn)一步配置用于在向目標(biāo)節(jié)點(diǎn)發(fā)送請(qǐng)求信息之前,通過數(shù)據(jù)查詢單元17判斷本地區(qū)塊鏈?zhǔn)欠翊嬗挟?dāng)前同步段:若存有,則直接從本地獲取當(dāng)前同步段內(nèi)包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù)。
在一優(yōu)選實(shí)施例中,數(shù)據(jù)獲取單元11進(jìn)一步配置用于獲取數(shù)據(jù)單元的名稱,并查詢當(dāng)前網(wǎng)絡(luò)的區(qū)塊鏈中是否存在該數(shù)據(jù)單元:若不存在,則結(jié)束同步。
在一優(yōu)選實(shí)施例中,數(shù)據(jù)校驗(yàn)單元13進(jìn)一步配置用于:接收所請(qǐng)求的賬本數(shù)據(jù);從本地或當(dāng)前網(wǎng)絡(luò)的區(qū)塊鏈獲取所接收的賬本數(shù)據(jù)的校驗(yàn)碼;根據(jù)所獲取的校驗(yàn)碼和所接收的賬本數(shù)據(jù)中的第二校驗(yàn)碼進(jìn)行校驗(yàn)。
在一優(yōu)選實(shí)施例中,數(shù)據(jù)獲取單元11進(jìn)一步配置用于在接收超時(shí)時(shí),重新生成請(qǐng)求信息,向目標(biāo)節(jié)點(diǎn)發(fā)送,或,更換目標(biāo)節(jié)點(diǎn)發(fā)送。
在一優(yōu)選實(shí)施例中,數(shù)據(jù)同步單元15進(jìn)一步配置用于根據(jù)數(shù)據(jù)鏈校驗(yàn)信息判斷當(dāng)前通過校驗(yàn)的賬本數(shù)據(jù)中的第一目標(biāo)數(shù)據(jù)是否能與當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)連接成鏈:否,則將第一目標(biāo)數(shù)據(jù)存入臨時(shí)隊(duì)列;是,則將第一目標(biāo)數(shù)據(jù)存入當(dāng)前數(shù)據(jù)鏈,并根據(jù)第一目標(biāo)數(shù)據(jù)對(duì)該數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步;以及,將臨時(shí)隊(duì)列中能與當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)連接成鏈的第二目標(biāo)數(shù)據(jù)存入當(dāng)前數(shù)據(jù)鏈,并根據(jù)第二目標(biāo)數(shù)據(jù)對(duì)所述數(shù)據(jù)單元進(jìn)行數(shù)據(jù)同步。
在一優(yōu)選實(shí)施例中,數(shù)據(jù)同步單元15進(jìn)一步配置用于判斷當(dāng)前通過校驗(yàn)的賬本數(shù)據(jù)中存在第一目標(biāo)數(shù)據(jù)或當(dāng)前同步段的結(jié)束信息:
若存在結(jié)束信息,則判斷結(jié)束信息是否能與當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)連接成鏈:是,則結(jié)束當(dāng)前同步段的數(shù)據(jù)同步;否,則將結(jié)束信息存入臨時(shí)隊(duì)列。
在一優(yōu)選實(shí)施例中,數(shù)據(jù)同步單元15進(jìn)一步配置用于對(duì)通過校驗(yàn)的賬本數(shù)據(jù)中的第一目標(biāo)數(shù)據(jù)進(jìn)行以下至少一項(xiàng)檢驗(yàn):
檢驗(yàn)數(shù)據(jù)同步的目標(biāo)數(shù)據(jù)庫中是否還存在該數(shù)據(jù)單元:否,則終止數(shù)據(jù)同步;
根據(jù)當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)的第二隊(duì)列號(hào)檢驗(yàn)第一目標(biāo)數(shù)據(jù)的第二隊(duì)列號(hào)是否正常。
在一優(yōu)選實(shí)施例中,數(shù)據(jù)查詢單元17進(jìn)一步配置用于判斷本地區(qū)塊鏈?zhǔn)欠癜ń邮盏恼?qǐng)求信息所請(qǐng)求查詢的完整的當(dāng)前同步段:否,則根據(jù)請(qǐng)求信息在本地區(qū)塊鏈中查找包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù),返回查找到的賬本數(shù)據(jù);是,則判斷當(dāng)前同步段中最后一項(xiàng)賬本數(shù)據(jù)的隊(duì)列號(hào)是否不小于請(qǐng)求信息中當(dāng)前數(shù)據(jù)鏈中最后一項(xiàng)目標(biāo)數(shù)據(jù)的第二隊(duì)列號(hào):
否,則生成能與請(qǐng)求信息所包括的數(shù)據(jù)鏈校驗(yàn)信息連接的結(jié)束信息并返回;
是,則根據(jù)請(qǐng)求信息在本地區(qū)塊鏈中查找包括目標(biāo)數(shù)據(jù)的賬本數(shù)據(jù),返回查找到的賬本數(shù)據(jù)。
在一優(yōu)選實(shí)施例中,數(shù)據(jù)查詢單元17進(jìn)一步配置用于在本地區(qū)塊鏈中結(jié)束查找時(shí),判斷是否查找到賬本數(shù)據(jù):是,則生成能與所返回的最后一項(xiàng)賬本數(shù)據(jù)中的目標(biāo)數(shù)據(jù)連接成數(shù)據(jù)鏈的結(jié)束信息并返回;否,則生成能與請(qǐng)求信息所包括的數(shù)據(jù)鏈校驗(yàn)信息連接的結(jié)束信息并返回。
圖14為本發(fā)明一實(shí)施例中分布式數(shù)據(jù)同步網(wǎng)絡(luò)的結(jié)構(gòu)示意圖。
如圖14所示,在本實(shí)施例中,本發(fā)明還提供一種分布式數(shù)據(jù)同步網(wǎng)絡(luò),包括若干節(jié)點(diǎn),各節(jié)點(diǎn)上分別配置有上述任一實(shí)施例所提供的數(shù)據(jù)同步系統(tǒng)10。
附圖中的流程圖和框圖,圖示了按照本發(fā)明各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段、或代碼的一部分,該模塊、程序段、或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這根據(jù)所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以通過執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以通過專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。
圖15為本發(fā)明一實(shí)施例中一種設(shè)備的結(jié)構(gòu)示意圖。
如圖15所示,計(jì)算機(jī)系統(tǒng)1500包括一個(gè)或多個(gè)中央處理單元(CPU)1501,其可以根據(jù)存儲(chǔ)在只讀存儲(chǔ)器(ROM)1502中的程序或者從存儲(chǔ)部分508加載到隨機(jī)訪問存儲(chǔ)器(RAM)1503中的程序而執(zhí)行各種適當(dāng)?shù)膭?dòng)作和處理。在RAM 1503中,還存儲(chǔ)有系統(tǒng)1500操作所需的各種程序和數(shù)據(jù)。CPU 1501、ROM 1502以及RAM 1503通過總線1504彼此相連。輸入/輸出(I/O)接口1505也連接至總線1504。其中存儲(chǔ)器(ROM)1502包含可由該一個(gè)或多個(gè)中央處理單元(CPU)1501執(zhí)行的一個(gè)或多個(gè)程序以使得該一個(gè)或多個(gè)中央處理單元(CPU)1501執(zhí)行根據(jù)本申請(qǐng)的數(shù)據(jù)同步方法。
以下部件連接至I/O接口1505:包括鍵盤、鼠標(biāo)等的輸入部分1506;包括諸如陰極射線管(CRT)、液晶顯示器(LCD)等以及揚(yáng)聲器等的輸出部分1507;包括硬盤等的存儲(chǔ)部分1508;以及包括諸如LAN卡、調(diào)制解調(diào)器等的網(wǎng)絡(luò)接口卡的通信部分1509。通信部分1509經(jīng)由諸如因特網(wǎng)的網(wǎng)絡(luò)執(zhí)行通信處理。驅(qū)動(dòng)器1510也根據(jù)需要連接至I/O接口1505。可拆卸介質(zhì)1511,諸如磁盤、光盤、磁光盤、半導(dǎo)體存儲(chǔ)器等等,根據(jù)需要安裝在驅(qū)動(dòng)器1510上,以便于從其上讀出的計(jì)算機(jī)程序根據(jù)需要被安裝入存儲(chǔ)部分1508。
特別地,根據(jù)本公開的實(shí)施例,上文參考圖X描述的過程可以被實(shí)現(xiàn)為計(jì)算機(jī)軟件程序。例如,本公開的實(shí)施例包括一種計(jì)算機(jī)程序產(chǎn)品,其包括有形地包含在機(jī)器可讀介質(zhì)上的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序包含用于執(zhí)行上述任一數(shù)據(jù)同步方法的程序代碼。在這樣的實(shí)施例中,該計(jì)算機(jī)程序可以通過通信部分1509從網(wǎng)絡(luò)上被下載和安裝,和/或從可拆卸介質(zhì)1511被安裝。
附圖中的流程圖和框圖,圖示了按照本發(fā)明各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段、或代碼的一部分,所述模塊、程序段、或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。
描述于本申請(qǐng)實(shí)施例中所涉及到的單元或模塊可以通過軟件的方式實(shí)現(xiàn),也可以通過硬件的方式來實(shí)現(xiàn)。所描述的單元或模塊也可以設(shè)置在處理器中,例如,數(shù)據(jù)查詢單元可以是設(shè)置在計(jì)算機(jī)或移動(dòng)智能設(shè)備中的軟件程序,也可以是單獨(dú)進(jìn)行數(shù)據(jù)查詢的硬件裝置。其中,這些單元或模塊的名稱在某種情況下并不構(gòu)成對(duì)該單元或模塊本身的限定。
作為又一方面,本申請(qǐng)還提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),該計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是上述實(shí)施例的裝置中所包含的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì);也可以是單獨(dú)存在,未裝配入設(shè)備中的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有一個(gè)或者一個(gè)以上程序,該程序被一個(gè)或者一個(gè)以上的處理器用來執(zhí)行描述于本申請(qǐng)的數(shù)據(jù)同步方法。
以上描述僅為本申請(qǐng)的較佳實(shí)施例以及對(duì)所運(yùn)用技術(shù)原理的說明。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,本申請(qǐng)中所涉及的發(fā)明范圍,并不限于上述技術(shù)特征的特定組合而成的技術(shù)方案,同時(shí)也應(yīng)涵蓋在不脫離本申請(qǐng)構(gòu)思的情況下,由上述技術(shù)特征或其等同特征進(jìn)行任意組合而形成的其它技術(shù)方案。例如上述特征與本申請(qǐng)中公開的(但不限于)具有類似功能的技術(shù)特征進(jìn)行互相替換而形成的技術(shù)方案。