本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)庫(kù)狀態(tài)確定方法及裝置,以及一種數(shù)據(jù)庫(kù)一致性驗(yàn)證方法及裝置。
背景技術(shù):
計(jì)算機(jī)在對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)時(shí),有時(shí)會(huì)將同一份數(shù)據(jù)存儲(chǔ)到多個(gè)不同數(shù)據(jù)庫(kù)之中,基于業(yè)務(wù)需要,往往還會(huì)要求這些不同數(shù)據(jù)庫(kù)中保持?jǐn)?shù)據(jù)存儲(chǔ)的同步性,即各數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)往往會(huì)被要求保持一致。以區(qū)塊鏈技術(shù)為例,在經(jīng)過(guò)驗(yàn)證后,多個(gè)交易記錄將被寫入各個(gè)保存區(qū)塊鏈數(shù)據(jù)的節(jié)點(diǎn)(對(duì)應(yīng)的數(shù)據(jù)庫(kù))中,為確保產(chǎn)生各節(jié)點(diǎn)接受的新的區(qū)塊,各節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)應(yīng)當(dāng)保持一致。還比如分布式存儲(chǔ)中的主從數(shù)據(jù)庫(kù)的情形,為便于在主數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)錯(cuò)誤時(shí),能通過(guò)從數(shù)據(jù)庫(kù)(備份數(shù)據(jù)庫(kù))恢復(fù)數(shù)據(jù),往往也要求主數(shù)據(jù)庫(kù)與其從數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)保持一致。
為保證多個(gè)數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)的一致性,可以對(duì)多個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行一致性檢驗(yàn),然后在發(fā)現(xiàn)數(shù)據(jù)不一致時(shí),及時(shí)地采取補(bǔ)救措施。由于數(shù)據(jù)庫(kù)中的數(shù)據(jù)往往很多,在檢驗(yàn)數(shù)據(jù)庫(kù)的一致性時(shí),往往不會(huì)逐一比對(duì)多個(gè)數(shù)據(jù)庫(kù)中的各數(shù)據(jù),而是通過(guò)比對(duì)用于表征數(shù)據(jù)庫(kù)中數(shù)據(jù)狀態(tài)的狀態(tài)值來(lái)檢驗(yàn)。為便于描述,可將數(shù)據(jù)庫(kù)中數(shù)據(jù)狀態(tài)簡(jiǎn)稱為數(shù)據(jù)庫(kù)狀態(tài)。
在現(xiàn)有技術(shù)中,在每次數(shù)據(jù)庫(kù)中的數(shù)據(jù)發(fā)生變化后,都需要重新確定數(shù)據(jù)庫(kù)的狀態(tài)值,在確定狀態(tài)值時(shí),往往會(huì)通過(guò)對(duì)數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)進(jìn)行計(jì)算來(lái)得到該狀態(tài)值。比如,該狀態(tài)值可以是數(shù)據(jù)庫(kù)中數(shù)據(jù)的哈希值,那么在確定哈希值時(shí),需要對(duì)數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)進(jìn)行拼接得到一個(gè)字符串,然后將該字符串作為哈希函數(shù)的輸入,通過(guò)哈希函數(shù)進(jìn)行計(jì)算得到哈希值。那么,當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)較多時(shí),確定數(shù)據(jù)庫(kù)的狀態(tài)值便會(huì)消耗較多的計(jì)算資源。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供一種數(shù)據(jù)庫(kù)狀態(tài)確定方法,用以解決現(xiàn)有技術(shù)中確定數(shù)據(jù)庫(kù)狀態(tài)值時(shí)會(huì)消耗較多計(jì)算資源的問(wèn)題。
本申請(qǐng)實(shí)施例采用下述技術(shù)方案:
一種數(shù)據(jù)庫(kù)狀態(tài)確定方法,包括:
確定對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行的狀態(tài)遷移操作;
根據(jù)執(zhí)行所述狀態(tài)遷移操作前所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,以及確定的所述狀態(tài)遷移操作,確定執(zhí)行所述狀態(tài)遷移操作后所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,所述狀態(tài)值用于表征所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)。
本申請(qǐng)實(shí)施例還提供一種數(shù)據(jù)庫(kù)狀態(tài)確定裝置,用以解決現(xiàn)有技術(shù)中確定數(shù)據(jù)庫(kù)狀態(tài)值時(shí)會(huì)消耗較多計(jì)算資源的問(wèn)題。
一種數(shù)據(jù)庫(kù)狀態(tài)確定裝置,包括:
第一確定單元,確定對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行的狀態(tài)遷移操作;
第二確定單元,根據(jù)執(zhí)行所述狀態(tài)遷移操作前所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,以及確定的所述狀態(tài)遷移操作,確定執(zhí)行所述狀態(tài)遷移操作后所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,所述狀態(tài)值用于表征所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)。
一種數(shù)據(jù)庫(kù)一致性驗(yàn)證方法,包括:
判斷待校驗(yàn)的第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)的狀態(tài)值是否相同,所述第一數(shù)據(jù)庫(kù)和所述第二數(shù)據(jù)庫(kù)的狀態(tài)值是通過(guò)本申請(qǐng)?zhí)峁┑臄?shù)據(jù)庫(kù)狀態(tài)確定方法確定的;
若所述第一數(shù)據(jù)庫(kù)和所述第二數(shù)據(jù)庫(kù)的狀態(tài)值相同,則確定所述第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)的狀態(tài)一致。
一種數(shù)據(jù)庫(kù)一致性驗(yàn)證裝置,包括:
狀態(tài)確定單元,判斷待校驗(yàn)的第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)的狀態(tài)值是否相同,所述第一數(shù)據(jù)庫(kù)和所述第二數(shù)據(jù)庫(kù)的狀態(tài)值是通過(guò)本申請(qǐng)?zhí)峁┑臄?shù)據(jù)庫(kù)狀態(tài)確定裝置確定的;
一致性確定單元,在確定所述第一數(shù)據(jù)庫(kù)和所述第二數(shù)據(jù)庫(kù)的狀態(tài)值相同時(shí),則確定所述第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)的狀態(tài)一致。
本申請(qǐng)實(shí)施例采用的上述至少一個(gè)技術(shù)方案能夠達(dá)到以下有益效果:
在確定由狀態(tài)遷移操作導(dǎo)致數(shù)據(jù)發(fā)生變化的數(shù)據(jù)庫(kù)的狀態(tài)值時(shí),通過(guò)確定對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行的該狀態(tài)遷移操作,然后根據(jù)確定的狀態(tài)遷移操作,以及執(zhí)行該狀態(tài)遷移操作前數(shù)據(jù)庫(kù)的狀態(tài)值,確定執(zhí)行該狀態(tài)遷移操作后數(shù)據(jù)庫(kù)的狀態(tài)值,相對(duì)于現(xiàn)有技術(shù)來(lái)說(shuō),無(wú)需對(duì)整個(gè)數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)進(jìn)行運(yùn)算,避免消耗過(guò)多的計(jì)算資源。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
圖1為本申請(qǐng)?zhí)峁┑囊环N哈希樹(shù)的數(shù)據(jù)結(jié)構(gòu)示意圖;
圖2為本申請(qǐng)?zhí)峁┑囊环N數(shù)據(jù)庫(kù)狀態(tài)確定方法的實(shí)現(xiàn)流程示意圖;
圖3為本申請(qǐng)?zhí)峁┑囊环N數(shù)據(jù)庫(kù)一致性驗(yàn)證方法的實(shí)現(xiàn)流程示意圖;
圖4為本申請(qǐng)?zhí)峁┑囊环N數(shù)據(jù)庫(kù)狀態(tài)確定方法的實(shí)現(xiàn)流程示意圖;
圖5為本申請(qǐng)?zhí)峁┑囊环N數(shù)據(jù)庫(kù)狀態(tài)確定裝置的具體結(jié)構(gòu)示意圖;
圖6為本申請(qǐng)?zhí)峁┑囊环N數(shù)據(jù)庫(kù)一致性驗(yàn)證裝置的具體結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本申請(qǐng)的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本申請(qǐng)具體實(shí)施例及相應(yīng)的附圖對(duì)本申請(qǐng)技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
以下結(jié)合附圖,詳細(xì)說(shuō)明本申請(qǐng)各實(shí)施例提供的技術(shù)方案。
隨著計(jì)算機(jī)技術(shù)的發(fā)展,需要驗(yàn)證各數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否一致的場(chǎng)景已經(jīng)越來(lái)越多,以區(qū)塊鏈為例,區(qū)塊鏈的本質(zhì)是分布式數(shù)據(jù)庫(kù),區(qū)塊鏈中每筆數(shù)據(jù)的變化,都會(huì)廣播至全網(wǎng)的各區(qū)塊鏈節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都需要有全量的、一致的數(shù)據(jù)。在各節(jié)點(diǎn)中,數(shù)據(jù)往往會(huì)保存在多個(gè)數(shù)據(jù)單元中,一個(gè)數(shù)據(jù)單元可以是區(qū)塊鏈中的一個(gè)區(qū)塊,也可以是由多個(gè)區(qū)塊共同構(gòu)成的數(shù)據(jù)單元。在確定節(jié)點(diǎn)的狀態(tài)值時(shí),會(huì)以各個(gè)數(shù)據(jù)單元中數(shù)據(jù)的哈希值為葉子節(jié)點(diǎn)構(gòu)建哈希樹(shù),例如默克爾樹(shù)(merkletree),然后將哈希樹(shù)根節(jié)點(diǎn)的哈希值作為數(shù)據(jù)庫(kù)的狀態(tài)值,進(jìn)而通過(guò)該狀態(tài)值來(lái)唯一表征數(shù)據(jù)庫(kù)的狀態(tài)。
如圖1所示為針對(duì)某一數(shù)據(jù)庫(kù)構(gòu)建的一種哈希樹(shù)的數(shù)據(jù)結(jié)構(gòu)示意圖,在計(jì)算哈希樹(shù)根節(jié)點(diǎn)的過(guò)程中,首先會(huì)計(jì)算各個(gè)數(shù)據(jù)單元中數(shù)據(jù)的哈希值,然后將得到的哈希值作為哈希樹(shù)的葉子節(jié)點(diǎn)的值,再計(jì)算各葉子節(jié)點(diǎn)的父節(jié)點(diǎn)的哈希值,最終得到哈希樹(shù)根節(jié)點(diǎn)的哈希值。當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)變化后,需要重新確定數(shù)據(jù)庫(kù)的狀態(tài)值,這就需要重復(fù)上述計(jì)算哈希樹(shù)根節(jié)點(diǎn)的過(guò)程,而如果數(shù)據(jù)庫(kù)中的數(shù)據(jù)較多,便需要對(duì)大量的數(shù)據(jù)進(jìn)行哈希運(yùn)算,這會(huì)消耗較多的計(jì)算資源。
在一些類似的場(chǎng)景下,在確定數(shù)據(jù)庫(kù)的狀態(tài)值時(shí),也會(huì)存在消耗較多的計(jì)算資源的問(wèn)題,此處不再逐一贅述。為了解決該問(wèn)題,本申請(qǐng)?zhí)峁┮环N數(shù)據(jù)庫(kù)狀態(tài)確定方法,通過(guò)根據(jù)對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行的狀態(tài)遷移操作來(lái)確定目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)。
下面將詳細(xì)描述本申請(qǐng)?zhí)峁┑臄?shù)據(jù)狀態(tài)確定方法,該方法的執(zhí)行主體可以是計(jì)算設(shè)備,例如分布式數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)節(jié)點(diǎn),或者區(qū)塊鏈中的節(jié)點(diǎn)。此外,該方法的執(zhí)行主體還可以是實(shí)現(xiàn)本申請(qǐng)?zhí)峁┑臄?shù)據(jù)庫(kù)狀態(tài)確定方法的應(yīng)用程序。為便于描述,下文以該方法的執(zhí)行主體為計(jì)算設(shè)備為例,對(duì)該方法的實(shí)施方式進(jìn)行介紹??梢岳斫?,該方法的執(zhí)行主體為計(jì)算設(shè)備只是一種示例性的說(shuō)明,并不應(yīng)理解為對(duì)該方法的限定。
本申請(qǐng)?zhí)峁┑臄?shù)據(jù)庫(kù)狀態(tài)確定方法的實(shí)現(xiàn)流程示意圖如圖2所示,包括下述步驟:
步驟s101:確定對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行的狀態(tài)遷移操作;
其中,這里的狀態(tài)遷移操作可以是導(dǎo)致數(shù)據(jù)庫(kù)的狀態(tài)發(fā)送改變的數(shù)據(jù)庫(kù)操作,具體可以是數(shù)據(jù)寫入操作、數(shù)據(jù)更新操作或者數(shù)據(jù)刪除操作等操作,狀態(tài)遷移操作中可以包含被處理的數(shù)據(jù)本身以及對(duì)數(shù)據(jù)的處理方式,比如數(shù)據(jù)寫入操作會(huì)包含待寫入的數(shù)據(jù)、以及數(shù)據(jù)要寫入數(shù)據(jù)庫(kù)中的具體位置。這里的目標(biāo)數(shù)據(jù)庫(kù)可以是狀態(tài)遷移操作所針對(duì)的數(shù)據(jù)庫(kù),該目標(biāo)數(shù)據(jù)庫(kù)可以是待確定狀態(tài)值的任意數(shù)據(jù)庫(kù)。
在實(shí)際應(yīng)用中,具體確定狀態(tài)遷移操作的方式可以有很多種,比如,在面向?qū)ο蟮膽?yīng)用程序中,狀態(tài)遷移操作是由對(duì)象來(lái)實(shí)現(xiàn)的,那么可以通過(guò)確定狀態(tài)遷移操作對(duì)應(yīng)的數(shù)據(jù)操作對(duì)象來(lái)確定;或者,還可以是根據(jù)狀態(tài)遷移操作對(duì)應(yīng)的數(shù)據(jù)庫(kù)操作語(yǔ)句來(lái)確定。這里的數(shù)據(jù)操作對(duì)象為面向?qū)ο蟮膽?yīng)用程序中用于執(zhí)行數(shù)據(jù)庫(kù)操作的數(shù)據(jù)的對(duì)象,面向?qū)ο蟮膽?yīng)用程序中,“對(duì)象”一般是指類在內(nèi)存中裝載的實(shí)例,具有相關(guān)的成員變量和成員函數(shù)。
由于數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變是通過(guò)狀態(tài)遷移操作來(lái)實(shí)現(xiàn)的,那么在確定了狀態(tài)遷移操作后,便可以確定執(zhí)行該狀態(tài)遷移操作后的數(shù)據(jù)庫(kù)的狀態(tài)。
步驟s102:根據(jù)執(zhí)行所述狀態(tài)遷移操作前所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,以及確定的所述狀態(tài)遷移操作,確定執(zhí)行所述狀態(tài)遷移操作后所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值。
這里的狀態(tài)值用于表征目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài),由于狀態(tài)值可以用來(lái)對(duì)目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行一致性檢驗(yàn),因此,該狀態(tài)值可以用于唯一地表征目標(biāo)數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)的特征,該狀態(tài)值比如可以是哈希值,也可以是全局唯一標(biāo)識(shí)符。其中,哈希值是通過(guò)哈希函數(shù)對(duì)輸入?yún)?shù)進(jìn)行哈希計(jì)算得到的,全局唯一標(biāo)識(shí)符可以是系統(tǒng)分配的用于在系統(tǒng)中唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)狀態(tài)的標(biāo)識(shí)符
需要說(shuō)明的是,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)知曉,所謂唯一地表征并不應(yīng)當(dāng)理解為絕對(duì)意義上的唯一,而是在誤差允許范圍內(nèi)的唯一,目前應(yīng)用最廣泛的哈希算法,在理論上也會(huì)存在輸入的數(shù)據(jù)不同但輸出的哈希值相同的情況,即所謂的哈希碰撞。
由于數(shù)據(jù)庫(kù)中數(shù)據(jù)變化后的狀態(tài)跟數(shù)據(jù)變化前的狀態(tài)以及狀態(tài)遷移操作有關(guān),那么在確定針對(duì)目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)遷移操作后,便可以根據(jù)執(zhí)行該操作前目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,以及確定的該狀態(tài)遷移操作,確定執(zhí)行該狀態(tài)遷移操作后目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值。
在實(shí)際應(yīng)用中,如步驟s101中所描述的,在面向?qū)ο蟮膽?yīng)用程序中,可以通過(guò)確定狀態(tài)遷移操作對(duì)應(yīng)的數(shù)據(jù)操作對(duì)象的方式來(lái)確定狀態(tài)遷移操作,那么后續(xù)可以根據(jù)確定的該數(shù)據(jù)操作對(duì)象,以及執(zhí)行該狀態(tài)遷移操作前目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,來(lái)確定執(zhí)行該狀態(tài)遷移操作后目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值。
為了方便通過(guò)簡(jiǎn)短的標(biāo)識(shí)對(duì)不同的狀態(tài)遷移操作進(jìn)行區(qū)分,也可以通過(guò)某一特征值來(lái)唯一地表征狀態(tài)遷移操作,狀態(tài)遷移操作的特征值可以是哈希值,或者也可以是用于唯一標(biāo)識(shí)狀態(tài)遷移操作的全局唯一標(biāo)識(shí)符等,此處不再贅述。為了方便對(duì)狀態(tài)遷移操作的特征值和目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值進(jìn)行計(jì)算,以得到執(zhí)行狀態(tài)遷移操作后的目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,該特征值的數(shù)據(jù)格式可以與目標(biāo)數(shù)據(jù)庫(kù)狀態(tài)值的數(shù)據(jù)格式相同或相近。
在實(shí)際應(yīng)用中,對(duì)于面向?qū)ο蟮膽?yīng)用程序而言,可以確定數(shù)據(jù)操作對(duì)象的哈希值,然后根據(jù)確定的該數(shù)據(jù)操作對(duì)象的哈希值,以及執(zhí)行狀態(tài)遷移操作前目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,確定執(zhí)行狀態(tài)遷移操作后目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值。
下面具體介紹本申請(qǐng)實(shí)施例中確定數(shù)據(jù)操作對(duì)象的哈希值的過(guò)程:
在確定數(shù)據(jù)操作對(duì)象的哈希值時(shí),為了能夠?qū)?shù)據(jù)操作對(duì)象的數(shù)據(jù)格式轉(zhuǎn)換為哈希算法的輸入所支持的格式,可以對(duì)數(shù)據(jù)操作對(duì)象執(zhí)行序列化操作,序列化操作可以將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)母袷健T趯?duì)數(shù)據(jù)操作對(duì)象執(zhí)行序列化操作后,便可以得到數(shù)據(jù)操作對(duì)象對(duì)應(yīng)的序列化數(shù)據(jù),該序列化數(shù)據(jù)的數(shù)據(jù)格式比如可以是二進(jìn)制格式,二進(jìn)制格式的數(shù)據(jù)可以作為哈希算法的輸入。
在得到數(shù)據(jù)操作對(duì)象對(duì)應(yīng)的序列化數(shù)據(jù)后,可以通過(guò)對(duì)該序列化數(shù)據(jù)進(jìn)行哈希運(yùn)算,得到該序列化數(shù)據(jù)的哈希值,即可將該序列化數(shù)據(jù)的哈希值作為該數(shù)據(jù)操作對(duì)象的哈希值。
需要說(shuō)明的是,由于單次狀態(tài)遷移操作往往會(huì)對(duì)應(yīng)不止一個(gè)數(shù)據(jù)操作對(duì)象,比如區(qū)塊鏈中節(jié)點(diǎn)每次狀態(tài)遷移操作往往會(huì)對(duì)應(yīng)多個(gè)數(shù)據(jù)操作對(duì)象,那么,在對(duì)狀態(tài)遷移操作對(duì)應(yīng)的數(shù)據(jù)操作對(duì)象進(jìn)行序列化時(shí),可以分別對(duì)各數(shù)據(jù)操作對(duì)象進(jìn)行序列化,然后按順序?qū)⒌玫降母餍蛄谢瘮?shù)據(jù)進(jìn)行拼接,最終將得到的拼接后的序列化數(shù)據(jù),作為狀態(tài)遷移操作對(duì)應(yīng)的序列化數(shù)據(jù)。
在按順序?qū)⒌玫降母餍蛄谢瘮?shù)據(jù)進(jìn)行拼接時(shí),若各數(shù)據(jù)操作對(duì)象執(zhí)行狀態(tài)遷移操作的順序是固定的,則按照?qǐng)?zhí)行狀態(tài)遷移操作的順序,對(duì)各數(shù)據(jù)操作對(duì)象對(duì)應(yīng)的序列化數(shù)據(jù)進(jìn)行拼接,得到拼接后的序列化數(shù)據(jù);若各數(shù)據(jù)操作對(duì)象執(zhí)行狀態(tài)遷移操作的順序是不固定的,則按照第一預(yù)定順序,對(duì)各數(shù)據(jù)操作對(duì)象對(duì)應(yīng)的序列化數(shù)據(jù)進(jìn)行拼接,得到拼接后的序列化數(shù)據(jù)。然后可以通過(guò)哈希函數(shù)計(jì)算拼接后的序列化數(shù)據(jù)的哈希值,將該拼接后的序列化數(shù)據(jù)的哈希值,作為該狀態(tài)遷移操作對(duì)應(yīng)的數(shù)據(jù)操作對(duì)象的哈希值。
第一預(yù)定順序可以是預(yù)先設(shè)定的拼接順序,比如,如果各數(shù)據(jù)操作對(duì)象中數(shù)據(jù)的格式為key-value格式,那么可以按照key值從大到小的順序,對(duì)各數(shù)據(jù)操作對(duì)象對(duì)應(yīng)的序列化數(shù)據(jù)進(jìn)行拼接。
在確定了狀態(tài)遷移操作對(duì)應(yīng)的數(shù)據(jù)操作對(duì)象的哈希值后,即可根據(jù)確定的數(shù)據(jù)操作對(duì)象的哈希值,以及執(zhí)行該狀態(tài)遷移操作前目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,確定執(zhí)行該狀態(tài)遷移操作后目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值。具體來(lái)說(shuō),可以按照第二預(yù)定順序,對(duì)數(shù)據(jù)操作對(duì)象的哈希值和執(zhí)行該狀態(tài)遷移操作前目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值進(jìn)行拼接,得到拼接數(shù)據(jù),確定該拼接數(shù)據(jù)的哈希值,將該拼接數(shù)據(jù)的哈希值作為執(zhí)行該狀態(tài)遷移操作后該目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值。
這里的第一預(yù)定順序和第二預(yù)定順序可以是預(yù)先設(shè)定的拼接順序,在計(jì)算各數(shù)據(jù)庫(kù)的狀態(tài)值時(shí),對(duì)數(shù)據(jù)進(jìn)行拼接時(shí)應(yīng)遵循相同的拼接順序,否則即使各數(shù)據(jù)庫(kù)之間的數(shù)據(jù)一致,也會(huì)導(dǎo)致計(jì)算出的狀態(tài)值不同,進(jìn)而無(wú)法準(zhǔn)確檢驗(yàn)各數(shù)據(jù)庫(kù)的一致性。
需要說(shuō)明的是,在某些情況下,兩組不同的數(shù)據(jù)在拼接后可能會(huì)變成相同的拼接數(shù)據(jù),比如對(duì)數(shù)據(jù)“hello”和“world”進(jìn)行拼接可以得到拼接數(shù)據(jù)“helloworld”,而對(duì)數(shù)據(jù)“he”和“l(fā)loworld”進(jìn)行拼接同樣會(huì)得到“helloworld”,顯然這兩組數(shù)據(jù)在拼接前是不同的數(shù)據(jù)。那么,為了避免不同的數(shù)據(jù)在拼接后相同,在執(zhí)行拼接操作時(shí),可以使用分割字符來(lái)保證拼接后數(shù)據(jù)的唯一性,具體可以將預(yù)設(shè)分割字符放置于數(shù)據(jù)的拼接位置處,其中,預(yù)設(shè)分割字符可以由開(kāi)發(fā)人員預(yù)先定義。例如,分割字符串為123,那么對(duì)于數(shù)據(jù)“hello”和“world”,在拼接后可以得到“hello123world”,對(duì)于數(shù)據(jù)“he”和“l(fā)loworld”,在拼接后可以得到“he123lloworld”。這樣即可保證拼接后的兩個(gè)數(shù)據(jù)是不同的數(shù)據(jù)。
基于上述使用分割字符對(duì)數(shù)據(jù)進(jìn)行拼接的方式,在對(duì)各數(shù)據(jù)操作對(duì)象對(duì)應(yīng)的序列化數(shù)據(jù)進(jìn)行拼接時(shí),可以將預(yù)設(shè)分割字符設(shè)置于進(jìn)行拼接的至少兩個(gè)序列化數(shù)據(jù)之間,再對(duì)設(shè)置預(yù)設(shè)分割字符后的各序列化數(shù)據(jù)進(jìn)行拼接,得到拼接后的序列化數(shù)據(jù)。當(dāng)然,在使用分割字符對(duì)數(shù)據(jù)進(jìn)行拼接前,可以先判斷不同組的數(shù)據(jù)在拼接后是否相同,當(dāng)判斷結(jié)果為拼接后相同時(shí),再使用分割字符分別對(duì)各組數(shù)據(jù)進(jìn)行拼接,得到拼接后的序列化數(shù)據(jù)。
通過(guò)本申請(qǐng)實(shí)施例提供的數(shù)據(jù)庫(kù)狀態(tài)確定方法,在確定數(shù)據(jù)發(fā)生變化后數(shù)據(jù)庫(kù)的狀態(tài)值時(shí),通過(guò)確定對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行的狀態(tài)遷移操作,然后根據(jù)確定的狀態(tài)遷移操作,以及執(zhí)行該狀態(tài)遷移操作前數(shù)據(jù)庫(kù)的狀態(tài)值,即可確定執(zhí)行該狀態(tài)遷移操作后數(shù)據(jù)庫(kù)的狀態(tài)值,相對(duì)于現(xiàn)有技術(shù)來(lái)說(shuō),無(wú)需對(duì)整個(gè)數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)進(jìn)行運(yùn)算,避免消耗過(guò)多的計(jì)算資源。同時(shí),相對(duì)于現(xiàn)有的區(qū)塊鏈技術(shù)中通過(guò)哈希樹(shù)等樹(shù)形結(jié)構(gòu)來(lái)計(jì)算節(jié)點(diǎn)的哈希值而言,本申請(qǐng)實(shí)施例中無(wú)需構(gòu)建樹(shù)形結(jié)構(gòu),也就無(wú)需對(duì)樹(shù)形結(jié)構(gòu)中各節(jié)點(diǎn)的哈希值進(jìn)行計(jì)算,避免消耗過(guò)多的計(jì)算資源。
在本申請(qǐng)實(shí)施例提供的一些優(yōu)選方案中,會(huì)對(duì)數(shù)據(jù)操作對(duì)象進(jìn)行序列化操作,以及對(duì)序列化數(shù)據(jù)進(jìn)行哈希運(yùn)算,這會(huì)消耗一定的計(jì)算資源,然而在分布式數(shù)據(jù)庫(kù)中,尤其是在區(qū)塊鏈中,數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)量往往是十分龐大的,對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行哈希運(yùn)算所消耗的計(jì)算資源,會(huì)遠(yuǎn)遠(yuǎn)大于本申請(qǐng)實(shí)施例的上述操作所耗費(fèi)的計(jì)算資源。
按照上述數(shù)據(jù)庫(kù)狀態(tài)確定方法,便可確定數(shù)據(jù)庫(kù)的狀態(tài)值,后續(xù)便可以根據(jù)確定的狀態(tài)值來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行一致性校驗(yàn),下面將詳細(xì)描述本申請(qǐng)?zhí)峁┑囊环N數(shù)據(jù)庫(kù)一致性驗(yàn)證方法。
該方法的實(shí)現(xiàn)流程示意圖如圖3所示,包括下述步驟:
步驟s201:判斷待校驗(yàn)的第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)的狀態(tài)值是否相同;
這里的第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)為待進(jìn)行校驗(yàn)的數(shù)據(jù)庫(kù),那么,可以根據(jù)本申請(qǐng)實(shí)施例提供的數(shù)據(jù)庫(kù)狀態(tài)確定方法分別確定第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)的狀態(tài)值,具體確定過(guò)程請(qǐng)參照本申請(qǐng)中的相關(guān)描述,此處不再贅述。
步驟s202:若所述第一數(shù)據(jù)庫(kù)和所述第二數(shù)據(jù)庫(kù)的狀態(tài)值相同,則確定所述第一數(shù)據(jù)庫(kù)和所述第二數(shù)據(jù)庫(kù)的狀態(tài)一致。
若第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)的狀態(tài)值不相同,則確定第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)的狀態(tài)不一致。
基于本申請(qǐng)的上述發(fā)明構(gòu)思,為了便于更好的理解本申請(qǐng)的技術(shù)特征、手段和效果,下面以目標(biāo)數(shù)據(jù)庫(kù)為區(qū)塊鏈技術(shù)中的某一節(jié)點(diǎn)的數(shù)據(jù)庫(kù)為例,對(duì)本申請(qǐng)的數(shù)據(jù)庫(kù)狀態(tài)確定方法做進(jìn)一步說(shuō)明。
本申請(qǐng)實(shí)施例中,以區(qū)塊鏈應(yīng)用為fabric區(qū)塊鏈應(yīng)用、目標(biāo)數(shù)據(jù)庫(kù)為leveldb數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)狀態(tài)值為哈希值為例來(lái)進(jìn)行描述,leveldb數(shù)據(jù)庫(kù)可以由數(shù)據(jù)操作對(duì)象來(lái)執(zhí)行狀態(tài)遷移操作,數(shù)據(jù)操作對(duì)象可以將key-value格式的數(shù)據(jù)寫入leveldb數(shù)據(jù)庫(kù)中,區(qū)塊鏈中在進(jìn)行狀態(tài)遷移操作時(shí),會(huì)由共識(shí)算法來(lái)保證各節(jié)點(diǎn)間狀態(tài)遷移的操作一致,且狀態(tài)遷移發(fā)生的順序一致。
對(duì)于每個(gè)區(qū)塊鏈節(jié)點(diǎn)來(lái)說(shuō),在數(shù)據(jù)庫(kù)中未寫入任何數(shù)據(jù)時(shí),各數(shù)據(jù)庫(kù)的初始狀態(tài)sinit均為空,此時(shí)可以給定一個(gè)哈希值,這里將數(shù)據(jù)庫(kù)初始狀態(tài)的哈希值記為hinit。
那么,在確定針對(duì)目標(biāo)數(shù)據(jù)庫(kù)的第i次狀態(tài)遷移操作transitioni發(fā)生時(shí),便可以根據(jù)該操作重新計(jì)算目標(biāo)數(shù)據(jù)庫(kù)的哈希值,該過(guò)程的實(shí)現(xiàn)流程示意圖如圖4所示,包括下述步驟:
步驟s301:確定狀態(tài)遷移操作對(duì)應(yīng)的數(shù)據(jù)操作對(duì)象;
單次狀態(tài)遷移操作往往會(huì)對(duì)應(yīng)多個(gè)數(shù)據(jù)操作對(duì)象,針對(duì)節(jié)點(diǎn)的第i次狀態(tài)遷移操作transitioni可以表示為集合{op1,op2...,opn},其中,op為operation的簡(jiǎn)寫,表示單個(gè)數(shù)據(jù)操作對(duì)象,意味著對(duì)于單個(gè)key-value對(duì)的一次寫入操作,每個(gè)op的格式為key:=newval,那么{op1,op2...,opn}即表示第i次狀態(tài)遷移操作對(duì)n個(gè)key-value對(duì)進(jìn)行寫入操作。
步驟s302:將各數(shù)據(jù)操作對(duì)象序列化為二進(jìn)制格式的序列化數(shù)據(jù);
步驟s303:判斷各數(shù)據(jù)操作對(duì)象執(zhí)行狀態(tài)遷移操作的順序是否固定,若是,則執(zhí)行步驟s304;若否,則執(zhí)行步驟s305;
步驟s304:若各數(shù)據(jù)操作對(duì)象的執(zhí)行順序固定,則按照?qǐng)?zhí)行狀態(tài)遷移操作的順序,對(duì)各數(shù)據(jù)操作對(duì)象對(duì)應(yīng)的序列化數(shù)據(jù)進(jìn)行拼接,得到拼接后的序列化數(shù)據(jù),進(jìn)入步驟s306;
步驟s305:若各數(shù)據(jù)操作對(duì)象的執(zhí)行順序不固定,則按照第一預(yù)定順序,對(duì)各數(shù)據(jù)操作對(duì)象對(duì)應(yīng)的序列化數(shù)據(jù)進(jìn)行拼接,得到拼接后的序列化數(shù)據(jù);
這里的第一預(yù)設(shè)順序可以為按照key值從大到小的順序。
步驟s306:確定拼接后的序列化數(shù)據(jù)的哈希值,作為該狀態(tài)遷移操作對(duì)應(yīng)的哈希值;
將拼接后的序列化數(shù)據(jù)作為哈希算法的輸入,進(jìn)行哈希計(jì)算,得到拼接后的序列化數(shù)據(jù)的哈希值,即為狀態(tài)遷移操作transitioni的哈希值hash(transitioni)。
步驟s307:按照第二預(yù)定順序,對(duì)該狀態(tài)遷移操作對(duì)應(yīng)的哈希值和執(zhí)行該狀態(tài)遷移操作前目標(biāo)數(shù)據(jù)庫(kù)的哈希值hi-1進(jìn)行拼接,得到拼接數(shù)據(jù);
步驟s308:確定該拼接數(shù)據(jù)的哈希值,將該拼接數(shù)據(jù)的哈希值作為執(zhí)行狀態(tài)遷移操作transitioni后目標(biāo)數(shù)據(jù)庫(kù)的哈希值hi。
最終得到的執(zhí)行狀態(tài)遷移操作transitioni后目標(biāo)數(shù)據(jù)庫(kù)的哈希值hi可用如下公式表示:
hi:=hash(hi-1||hash(transitioni))
其中,h0=hinit,||表示拼接操作,hash(x)為哈希函數(shù),表示對(duì)輸入的數(shù)據(jù)x執(zhí)行哈希運(yùn)算,哈希函數(shù)比如可以是sha3。
通過(guò)本申請(qǐng)實(shí)施例提供的數(shù)據(jù)庫(kù)狀態(tài)確定方法,在確定數(shù)據(jù)發(fā)生變化后數(shù)據(jù)庫(kù)的哈希值時(shí),通過(guò)確定對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行的狀態(tài)遷移操作transitioni,然后確定與該狀態(tài)遷移操作對(duì)應(yīng)的哈希值hash(transitioni),根據(jù)執(zhí)行該狀態(tài)遷移操作前數(shù)據(jù)庫(kù)的哈希值hi-1,即可確定執(zhí)行該狀態(tài)遷移操作后數(shù)據(jù)庫(kù)的狀態(tài)值hi。相對(duì)于現(xiàn)有技術(shù)來(lái)說(shuō),無(wú)需對(duì)整個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)進(jìn)行運(yùn)算來(lái)計(jì)算哈希值,避免消耗過(guò)多的計(jì)算資源。同時(shí),相對(duì)于現(xiàn)有的區(qū)塊鏈技術(shù)中通過(guò)哈希樹(shù)等樹(shù)形結(jié)構(gòu)來(lái)計(jì)算節(jié)點(diǎn)的哈希值而言,本申請(qǐng)實(shí)施例中無(wú)需構(gòu)建樹(shù)形結(jié)構(gòu),也就無(wú)需對(duì)樹(shù)形結(jié)構(gòu)中各節(jié)點(diǎn)的哈希值進(jìn)行計(jì)算,進(jìn)一步減少了對(duì)計(jì)算資源的消耗。
以上為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)庫(kù)狀態(tài)確定方法,基于同樣的思路,本申請(qǐng)實(shí)施例還提供相應(yīng)的數(shù)據(jù)庫(kù)狀態(tài)確定裝置,如圖5所示,該裝置具體包括:
第一確定單元401,確定對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行的狀態(tài)遷移操作;
第二確定單元402,根據(jù)執(zhí)行所述狀態(tài)遷移操作前所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,以及確定的所述狀態(tài)遷移操作,確定執(zhí)行所述狀態(tài)遷移操作后所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,所述狀態(tài)值用于表征所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)。
本申請(qǐng)實(shí)施例中,數(shù)據(jù)狀態(tài)確定的具體實(shí)施方式還有很多,在一種實(shí)施方式中,第一確定單元401,確定用于對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行所述狀態(tài)遷移操作的數(shù)據(jù)操作對(duì)象;
第二確定單元402,根據(jù)執(zhí)行所述狀態(tài)遷移操作前所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,以及確定的所述數(shù)據(jù)操作對(duì)象,確定執(zhí)行所述狀態(tài)遷移操作后所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值。
在一種實(shí)施方式中,第二確定單元402具體包括第一哈希值確定子單元403和第一狀態(tài)值確定子單元404,其中:
所述第一哈希值確定子單元403,確定所述數(shù)據(jù)操作對(duì)象的哈希值;
所述第一狀態(tài)值確定子單元404,根據(jù)確定的所述數(shù)據(jù)操作對(duì)象的哈希值,以及執(zhí)行所述狀態(tài)遷移操作前所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值,確定執(zhí)行所述狀態(tài)遷移操作后所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值。
在一種實(shí)施方式中,所述第一哈希值確定子單元403,具體包括序列化數(shù)據(jù)確定子單元405和第二哈希值確定子單元406,其中:
所述序列化數(shù)據(jù)確定子單元405,對(duì)所述數(shù)據(jù)操作對(duì)象進(jìn)行序列化,得到序列化數(shù)據(jù);
所述第二哈希值確定子單元406,確定所述序列化數(shù)據(jù)的哈希值,將所述序列化數(shù)據(jù)的哈希值作為所述數(shù)據(jù)操作對(duì)象的哈希值。
在一種實(shí)施方式中,所述序列化數(shù)據(jù)確定子單元405,具體包括第一拼接子單元407和第二拼接子單元408:
在一種實(shí)施方式中,所述第一拼接子單元407,在存在不止一個(gè)用于對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行所述狀態(tài)遷移操作的數(shù)據(jù)操作對(duì)象,且各所述數(shù)據(jù)操作對(duì)象執(zhí)行狀態(tài)遷移操作的順序確定時(shí),按照?qǐng)?zhí)行狀態(tài)遷移操作的順序,對(duì)各所述數(shù)據(jù)操作對(duì)象對(duì)應(yīng)的序列化數(shù)據(jù)進(jìn)行拼接,得到拼接后的序列化數(shù)據(jù);
所述第二拼接子單元408,在存在不止一個(gè)用于對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行所述狀態(tài)遷移操作的數(shù)據(jù)操作對(duì)象,且各所述數(shù)據(jù)操作對(duì)象執(zhí)行狀態(tài)遷移操作的順序不確定時(shí),按照第一預(yù)定順序,對(duì)各所述數(shù)據(jù)操作對(duì)象對(duì)應(yīng)的序列化數(shù)據(jù)進(jìn)行拼接,得到拼接后的序列化數(shù)據(jù)。
為了防止不同組數(shù)據(jù)在拼接后相同,在一種實(shí)施方式中,所述第二拼接子單元408,將預(yù)設(shè)分割字符設(shè)置于至少兩個(gè)序列化數(shù)據(jù)之間,對(duì)設(shè)置預(yù)設(shè)分割字符后的各序列化數(shù)據(jù)進(jìn)行拼接,得到拼接后的序列化數(shù)據(jù)。
在一種實(shí)施方式中,所述第一狀態(tài)值確定子單元404,按照第二預(yù)定順序,對(duì)所述數(shù)據(jù)操作對(duì)象的哈希值和執(zhí)行所述狀態(tài)遷移操作前所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值進(jìn)行拼接,得到拼接數(shù)據(jù);
確定所述拼接數(shù)據(jù)的哈希值,將所述拼接數(shù)據(jù)的哈希值作為執(zhí)行所述狀態(tài)遷移操作后所述目標(biāo)數(shù)據(jù)庫(kù)的狀態(tài)值。
在一種實(shí)施方式中,所述目標(biāo)數(shù)據(jù)庫(kù)為區(qū)塊鏈中任一節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)庫(kù)。
在一種實(shí)施方式中,所述狀態(tài)值用于唯一地表征所述目標(biāo)數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)的特征。
本申請(qǐng)實(shí)施例提供的數(shù)據(jù)庫(kù)狀態(tài)確定裝置,在確定數(shù)據(jù)發(fā)生變化后數(shù)據(jù)庫(kù)的狀態(tài)值時(shí),通過(guò)確定對(duì)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行的狀態(tài)遷移操作,該狀態(tài)遷移操作為導(dǎo)致數(shù)據(jù)發(fā)生該變化的狀態(tài)遷移操作,然后根據(jù)確定的狀態(tài)遷移操作,以及執(zhí)行該狀態(tài)遷移操作前數(shù)據(jù)庫(kù)的狀態(tài)值,確定執(zhí)行該狀態(tài)遷移操作后數(shù)據(jù)庫(kù)的狀態(tài)值,相對(duì)于現(xiàn)有技術(shù)來(lái)說(shuō),無(wú)需對(duì)整個(gè)數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)進(jìn)行運(yùn)算,避免消耗過(guò)多的計(jì)算資源。
本申請(qǐng)實(shí)施例還提供相應(yīng)的數(shù)據(jù)庫(kù)一致性驗(yàn)證裝置,如圖6所示,該裝置具體包括:
判斷單元501,判斷待校驗(yàn)的第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)的狀態(tài)值是否相同,所述第一數(shù)據(jù)庫(kù)和所述第二數(shù)據(jù)庫(kù)的狀態(tài)值是通過(guò)權(quán)利要求10-16任一權(quán)項(xiàng)所述裝置確定的;
一致性確定單元502,在確定所述第一數(shù)據(jù)庫(kù)和所述第二數(shù)據(jù)庫(kù)的狀態(tài)值相同時(shí),則確定所述第一數(shù)據(jù)庫(kù)和所述第二數(shù)據(jù)庫(kù)的狀態(tài)一致。
需要說(shuō)明的是,在20世紀(jì)90年代,對(duì)于一個(gè)技術(shù)的改進(jìn)可以很明顯地區(qū)分是硬件上的改進(jìn)(例如,對(duì)二極管、晶體管、開(kāi)關(guān)等電路結(jié)構(gòu)的改進(jìn))還是軟件上的改進(jìn)(對(duì)于方法流程的改進(jìn))。然而,隨著技術(shù)的發(fā)展,當(dāng)今的很多方法流程的改進(jìn)已經(jīng)可以視為硬件電路結(jié)構(gòu)的直接改進(jìn)。設(shè)計(jì)人員幾乎都通過(guò)將改進(jìn)的方法流程編程到硬件電路中來(lái)得到相應(yīng)的硬件電路結(jié)構(gòu)。因此,不能說(shuō)一個(gè)方法流程的改進(jìn)就不能用硬件實(shí)體模塊來(lái)實(shí)現(xiàn)。例如,可編程邏輯器件(programmablelogicdevice,pld)(例如現(xiàn)場(chǎng)可編程門陣列(fieldprogrammablegatearray,fpga))就是這樣一種集成電路,其邏輯功能由用戶對(duì)器件編程來(lái)確定。由設(shè)計(jì)人員自行編程來(lái)把一個(gè)數(shù)字系統(tǒng)“集成”在一片pld上,而不需要請(qǐng)芯片制造廠商來(lái)設(shè)計(jì)和制作專用的集成電路芯片。而且,如今,取代手工地制作集成電路芯片,這種編程也多半改用“邏輯編譯器(logiccompiler)”軟件來(lái)實(shí)現(xiàn),它與程序開(kāi)發(fā)撰寫時(shí)所用的軟件編譯器相類似,而要編譯之前的原始代碼也得用特定的編程語(yǔ)言來(lái)撰寫,此稱之為硬件描述語(yǔ)言(hardwaredescriptionlanguage,hdl),而hdl也并非僅有一種,而是有許多種,如abel(advancedbooleanexpressionlanguage)、ahdl(alterahardwaredescriptionlanguage)、confluence、cupl(cornelluniversityprogramminglanguage)、hdcal、jhdl(javahardwaredescriptionlanguage)、lava、lola、myhdl、palasm、rhdl(rubyhardwaredescriptionlanguage)等,目前最普遍使用的是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage)與verilog。本領(lǐng)域技術(shù)人員也應(yīng)該清楚,只需要將方法流程用上述幾種硬件描述語(yǔ)言稍作邏輯編程并編程到集成電路中,就可以很容易得到實(shí)現(xiàn)該邏輯方法流程的硬件電路。
控制器可以按任何適當(dāng)?shù)姆绞綄?shí)現(xiàn),例如,控制器可以采取例如微處理器或處理器以及存儲(chǔ)可由該(微)處理器執(zhí)行的計(jì)算機(jī)可讀程序代碼(例如軟件或固件)的計(jì)算機(jī)可讀介質(zhì)、邏輯門、開(kāi)關(guān)、專用集成電路(applicationspecificintegratedcircuit,asic)、可編程邏輯控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:arc625d、atmelat91sam、microchippic18f26k20以及siliconelabsc8051f320,存儲(chǔ)器控制器還可以被實(shí)現(xiàn)為存儲(chǔ)器的控制邏輯的一部分。本領(lǐng)域技術(shù)人員也知道,除了以純計(jì)算機(jī)可讀程序代碼方式實(shí)現(xiàn)控制器以外,完全可以通過(guò)將方法步驟進(jìn)行邏輯編程來(lái)使得控制器以邏輯門、開(kāi)關(guān)、專用集成電路、可編程邏輯控制器和嵌入微控制器等的形式來(lái)實(shí)現(xiàn)相同功能。因此這種控制器可以被認(rèn)為是一種硬件部件,而對(duì)其內(nèi)包括的用于實(shí)現(xiàn)各種功能的裝置也可以視為硬件部件內(nèi)的結(jié)構(gòu)?;蛘呱踔?,可以將用于實(shí)現(xiàn)各種功能的裝置視為既可以是實(shí)現(xiàn)方法的軟件模塊又可以是硬件部件內(nèi)的結(jié)構(gòu)。
上述實(shí)施例闡明的系統(tǒng)、裝置、模塊或單元,具體可以由計(jì)算機(jī)芯片或?qū)嶓w實(shí)現(xiàn),或者由具有某種功能的產(chǎn)品來(lái)實(shí)現(xiàn)。一種典型的實(shí)現(xiàn)設(shè)備為計(jì)算機(jī)。具體的,計(jì)算機(jī)例如可以為個(gè)人計(jì)算機(jī)、膝上型計(jì)算機(jī)、蜂窩電話、相機(jī)電話、智能電話、個(gè)人數(shù)字助理、媒體播放器、導(dǎo)航設(shè)備、電子郵件設(shè)備、游戲控制臺(tái)、平板計(jì)算機(jī)、可穿戴設(shè)備或者這些設(shè)備中的任何設(shè)備的組合。
為了描述的方便,描述以上裝置時(shí)以功能分為各種單元分別描述。當(dāng)然,在實(shí)施本申請(qǐng)時(shí)可以把各單元的功能在同一個(gè)或多個(gè)軟件和/或硬件中實(shí)現(xiàn)。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(rom)或閃存(flashram)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來(lái)實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、其他類型的隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、電可擦除可編程只讀存儲(chǔ)器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問(wèn)的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
還需要說(shuō)明的是,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、商品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、商品或者設(shè)備中還存在另外的相同要素。
本申請(qǐng)可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本申請(qǐng),在這些分布式計(jì)算環(huán)境中,由通過(guò)通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來(lái)執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。
本說(shuō)明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。
以上所述僅為本申請(qǐng)的實(shí)施例而已,并不用于限制本申請(qǐng)。對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō),本申請(qǐng)可以有各種更改和變化。凡在本申請(qǐng)的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)的權(quán)利要求范圍之內(nèi)。