本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種基于區(qū)塊鏈存儲的數(shù)據(jù)處理方法及系統(tǒng)。
背景技術(shù):
區(qū)塊鏈(blockchain)是一項全新的技術(shù),脫胎于2008年出現(xiàn)的比特幣技術(shù),它提供了一種去中心化的、無需信任積累的信用建立范式。在這種范式中,任何互不了解的人可以通過加入一個公開透明的數(shù)據(jù)庫,通過點對點的記賬、數(shù)據(jù)傳輸、認證或是合約,而不需要借助任何一個中間方來達成信用共識。這個公開透明的數(shù)據(jù)庫包括了過去所有的交易記錄、歷史數(shù)據(jù)及其他相關(guān)信息,所有信息都分布式存儲并透明可查,并以密碼學(xué)協(xié)議的方式保證其不能非法篡改。
信息技術(shù)系統(tǒng)大部分會依賴數(shù)據(jù)庫作為數(shù)據(jù)存儲,一些重要信息在存入數(shù)據(jù)庫后,從業(yè)務(wù)邏輯上而言是不再允許改動的,但是數(shù)據(jù)庫本身并沒有任何妨篡改措施。目前,信息技術(shù)系統(tǒng)對于數(shù)據(jù)的防篡改大多采用數(shù)據(jù)加密,數(shù)據(jù)庫登錄密碼等方式加強數(shù)據(jù)安全,但是最終這些措施都參雜人的因素,密碼或者加密算法都可能被泄漏,人為因素本身就是不可控的,仍然存在數(shù)據(jù)被篡改,而且被篡改的數(shù)據(jù)發(fā)現(xiàn)不了等情況,嚴重影響數(shù)據(jù)存儲的真實性和準確性。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種基于區(qū)塊鏈存儲的數(shù)據(jù)處理方法及系統(tǒng),將目標數(shù)據(jù)采用區(qū)塊鏈算法生成區(qū)塊鏈數(shù)據(jù),并且按照區(qū)塊鏈形式存儲;再通過區(qū)塊鏈數(shù)據(jù)對目標數(shù)據(jù)進行校驗,確保目標數(shù)據(jù)真實性和準確性。
本發(fā)明提供一種基于區(qū)塊鏈存儲的數(shù)據(jù)處理方法,包括以下步驟:
配置目標數(shù)據(jù)表的元數(shù)據(jù)到元數(shù)據(jù)表中,生成與所述元數(shù)據(jù)相對應(yīng)的記錄數(shù)據(jù),所述記錄數(shù)據(jù)至少包括目標數(shù)據(jù)表地址、目標數(shù)據(jù)表名稱以及目標數(shù)據(jù)表列名;
掃描并提取所述記錄數(shù)據(jù),根據(jù)每個所述記錄數(shù)據(jù)生成相對應(yīng)的第一區(qū)塊鏈任務(wù)記錄,并將生成的所述第一區(qū)塊鏈任務(wù)記錄插入到任務(wù)表中,所述第一區(qū)塊鏈任務(wù)記錄包括時間段信息和任務(wù)狀態(tài)信息;
按照所述時間段信息和所述任務(wù)狀態(tài)信息篩選所述任務(wù)表,得到第二區(qū)塊鏈任務(wù)記錄,并按照升序的時間順序排列;逐條執(zhí)行所述第二區(qū)塊鏈任務(wù)記錄,讀取所述目標數(shù)據(jù)表的目標數(shù)據(jù),根據(jù)所述目標數(shù)據(jù)生成區(qū)塊鏈數(shù)據(jù),將所述區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫中;
從所述區(qū)塊鏈數(shù)據(jù)庫中提取所述區(qū)塊鏈數(shù)據(jù),根據(jù)所述區(qū)塊鏈數(shù)據(jù)對所述目標數(shù)據(jù)表中的目標數(shù)據(jù)進行校驗。
作為一種可實施方式,根據(jù)所述目標數(shù)據(jù)生成區(qū)塊鏈數(shù)據(jù)是通過哈希算法生成,具體生成過程包括以下步驟:
將目標數(shù)據(jù)表的目標數(shù)據(jù)通過哈希算法得到的哈希值,并將所述目標數(shù)據(jù)表的pk主鍵寫入所述區(qū)塊鏈數(shù)據(jù)的body部數(shù)據(jù);
將所述body部數(shù)據(jù)與上個區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù)通過哈希算法得到當前區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù);
將所述body部數(shù)據(jù)和所述header部數(shù)據(jù)合成當前所述區(qū)塊鏈數(shù)據(jù)。
作為一種可實施方式,所述將所述body部數(shù)據(jù)與上個區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù)通過哈希算法得到當前區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù);還包括以下步驟:
將所述header部數(shù)據(jù)采用內(nèi)部緩存儲存。
作為一種可實施方式,所述根據(jù)所述目標數(shù)據(jù)生成區(qū)塊鏈數(shù)據(jù),將所述區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫中,具體包括以下步驟:
根據(jù)若干個所述目標數(shù)據(jù)同時生成數(shù)量相同的區(qū)塊鏈數(shù)據(jù);
將若干所述區(qū)塊鏈數(shù)據(jù)同時插入到所述區(qū)塊鏈數(shù)據(jù)庫中。
作為一種可實施方式,所述第一區(qū)塊鏈任務(wù)記錄還包括當前的行字段;
在將所述區(qū)塊鏈數(shù)據(jù)插入所述區(qū)塊鏈數(shù)據(jù)庫時,根據(jù)插入的執(zhí)行任務(wù),更新所述行字段的數(shù)值;
在將所述區(qū)塊鏈數(shù)據(jù)插入所述區(qū)塊鏈數(shù)據(jù)庫出現(xiàn)異常時,中止更新所述行字段的數(shù)值。
相應(yīng)地,本發(fā)明還提供了一種基于區(qū)塊鏈存儲的數(shù)據(jù)處理系統(tǒng),包括數(shù)據(jù)配置模塊、區(qū)塊鏈任務(wù)生成模塊、區(qū)塊鏈數(shù)據(jù)處理模塊以及校驗?zāi)K;
所述數(shù)據(jù)配置模塊,用于配置目標數(shù)據(jù)表的元數(shù)據(jù)到元數(shù)據(jù)表中,生成與所述元數(shù)據(jù)相對應(yīng)的記錄數(shù)據(jù),所述記錄數(shù)據(jù)至少包括目標數(shù)據(jù)表地址、目標數(shù)據(jù)表名稱以及目標數(shù)據(jù)表列名;
所述區(qū)塊鏈任務(wù)生成模塊,用于掃描并提取所述記錄數(shù)據(jù),根據(jù)每個所述記錄數(shù)據(jù)生成相對應(yīng)的第一區(qū)塊鏈任務(wù)記錄,并將生成的所述第一區(qū)塊鏈任務(wù)記錄插入到任務(wù)表中,所述第一區(qū)塊鏈任務(wù)記錄包括時間段信息和任務(wù)狀態(tài)信息;
所述區(qū)塊鏈數(shù)據(jù)處理模塊,用于按照所述時間段信息和所述任務(wù)狀態(tài)信息篩選所述任務(wù)表,得到第二區(qū)塊鏈任務(wù)記錄,并按照升序的時間順序排列;逐條執(zhí)行所述第二區(qū)塊鏈任務(wù)記錄,讀取所述目標數(shù)據(jù)表的目標數(shù)據(jù),根據(jù)所述目標數(shù)據(jù)生成區(qū)塊鏈數(shù)據(jù),將所述區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫中;
所述校驗?zāi)K,從所述區(qū)塊鏈數(shù)據(jù)庫中提取所述區(qū)塊鏈數(shù)據(jù),根據(jù)所述區(qū)塊鏈數(shù)據(jù)對所述目標數(shù)據(jù)表中的目標數(shù)據(jù)進行校驗。
作為一種可實施方式,所述區(qū)塊鏈數(shù)據(jù)處理模塊還包括body數(shù)據(jù)處理單元、header數(shù)據(jù)處理單元以及合成單元;
所述body數(shù)據(jù)處理單元,用于將目標數(shù)據(jù)表的目標數(shù)據(jù)通過哈希算法得到的哈希值,并將所述目標數(shù)據(jù)表的pk主鍵寫入所述區(qū)塊鏈數(shù)據(jù)的body部數(shù)據(jù);
所述header數(shù)據(jù)處理單元,用于將所述body部數(shù)據(jù)與上個區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù)通過哈希算法得到當前區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù);
所述合成單元,用于將所述body部數(shù)據(jù)和所述header部數(shù)據(jù)合成當前所述區(qū)塊鏈數(shù)據(jù)。
作為一種可實施方式,所述header數(shù)據(jù)處理單元還包括存儲子單元;所述存儲子單元,用于將所述header部數(shù)據(jù)采用內(nèi)部緩存儲存。
作為一種可實施方式,所述區(qū)塊鏈數(shù)據(jù)處理模塊還包括批量處理單元;
所述批量處理單元,用于根據(jù)若干個所述目標數(shù)據(jù)同時生成數(shù)量相同的區(qū)塊鏈數(shù)據(jù);將若干所述區(qū)塊鏈數(shù)據(jù)同時插入到所述區(qū)塊鏈數(shù)據(jù)庫中。
作為一種可實施方式,所述區(qū)塊鏈任務(wù)生成模塊還包括當前行的行字段生成單元;
所述行字段生成單元,用于在將所述區(qū)塊鏈數(shù)據(jù)插入所述區(qū)塊鏈數(shù)據(jù)庫時,根據(jù)插入的執(zhí)行任務(wù),更新所述行字段生成單元生成的行字段的數(shù)值;
在將所述區(qū)塊鏈數(shù)據(jù)插入所述區(qū)塊鏈數(shù)據(jù)庫出現(xiàn)異常時,中止更新所述行字段生成單元生成的行字段的數(shù)值。
與現(xiàn)有技術(shù)相比,本技術(shù)方案具有以下優(yōu)點:
本發(fā)明提供的基于區(qū)塊鏈存儲的數(shù)據(jù)處理方法及系統(tǒng),將數(shù)據(jù)庫中的目標數(shù)據(jù)采用區(qū)塊鏈算法生成區(qū)塊鏈數(shù)據(jù),并且按照區(qū)塊鏈形式存儲;利用區(qū)塊鏈數(shù)據(jù)本身不能非法篡改的特性,再通過區(qū)塊鏈數(shù)據(jù)對目標數(shù)據(jù)進行校驗,目標數(shù)據(jù)一旦被篡改就會被發(fā)現(xiàn),確保目標數(shù)據(jù)真實性和準確性。
附圖說明
圖1為本發(fā)明實施例一提供的基于區(qū)塊鏈存儲的數(shù)據(jù)處理方法的流程示意圖;
圖2是本發(fā)明實施例二提供的基于區(qū)塊鏈存儲的數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)示意圖;
圖中:100、數(shù)據(jù)配置模塊;200、區(qū)塊鏈任務(wù)生成模塊;210、行字段生成單元;300、區(qū)塊鏈數(shù)據(jù)處理模塊;310、body數(shù)據(jù)處理單元;320、header數(shù)據(jù)處理單元;330、合成單元;340、批量處理單元;400、校驗?zāi)K。
具體實施方式
以下結(jié)合附圖,對本發(fā)明上述的和另外的技術(shù)特征和優(yōu)點進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明的部分實施例,而不是全部實施例。
請參閱圖1,本發(fā)明實施例一提供的基于區(qū)塊鏈存儲的數(shù)據(jù)處理方法,包括以下步驟:
s100、配置目標數(shù)據(jù)表的元數(shù)據(jù)到元數(shù)據(jù)表中,生成與元數(shù)據(jù)相對應(yīng)的記錄數(shù)據(jù),記錄數(shù)據(jù)至少包括目標數(shù)據(jù)表地址、目標數(shù)據(jù)表名稱以及目標數(shù)據(jù)表列名;
上述配置目標數(shù)據(jù)表的元數(shù)據(jù)到元數(shù)據(jù)表中,目標數(shù)據(jù)表存儲于目標數(shù)據(jù)庫中,可以將目標數(shù)據(jù)表中的數(shù)據(jù)分為兩類:一種為存儲有重要數(shù)據(jù),另一種為存儲有非重要數(shù)據(jù);在配置目標數(shù)據(jù)表的元數(shù)據(jù)可以只配置重要數(shù)據(jù)的目標數(shù)據(jù)表的元數(shù)據(jù),利用記錄數(shù)據(jù)中記錄的目標數(shù)據(jù)表列名可以準確找到需要配置的重要數(shù)據(jù),從而減輕系統(tǒng)運行負擔。一條記錄數(shù)據(jù)就包含一張目標數(shù)據(jù)表的所有元信息。
s200、掃描并提取記錄數(shù)據(jù),根據(jù)每個記錄數(shù)據(jù)生成相對應(yīng)的第一區(qū)塊鏈任務(wù)記錄,并將生成的第一區(qū)塊鏈任務(wù)記錄插入到任務(wù)表中,第一區(qū)塊鏈任務(wù)記錄包括時間段信息和任務(wù)狀態(tài)信息;
每隔一段時間掃描元數(shù)據(jù)表,將元數(shù)據(jù)表中的記錄數(shù)據(jù)全部選取出來,每張目標數(shù)據(jù)表(既一條記錄數(shù)據(jù))生成一個第一區(qū)塊鏈任務(wù)記錄插入任務(wù)表,每條第一區(qū)塊鏈任務(wù)記錄包含一張目標數(shù)據(jù)表需要生成區(qū)塊鏈數(shù)據(jù)的時間區(qū)間段(開始時間t0和結(jié)束時間t1),任務(wù)狀態(tài)init(初始);
s300、按照時間段信息和任務(wù)狀態(tài)信息篩選任務(wù)表,得到第二區(qū)塊鏈任務(wù)記錄,并按照升序的時間順序排列;逐條執(zhí)行第二區(qū)塊鏈任務(wù)記錄,讀取目標數(shù)據(jù)表的目標數(shù)據(jù),根據(jù)目標數(shù)據(jù)生成區(qū)塊鏈數(shù)據(jù),將區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫中;
從任務(wù)表中將狀態(tài)為init的第一區(qū)塊鏈任務(wù)按時間選取出來(按時間升序),得到第二區(qū)塊鏈任務(wù)記錄,并且按順序逐條執(zhí)行,從第二區(qū)塊鏈任務(wù)記錄中讀取目標數(shù)據(jù)表的元數(shù)據(jù),建立數(shù)據(jù)庫連接,而后讀取目標數(shù)據(jù)表的目標數(shù)據(jù),再用區(qū)塊鏈算法生成目標數(shù)據(jù)表的區(qū)塊鏈數(shù)據(jù),最后將區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫,本次任務(wù)生成的區(qū)塊鏈時間跨度為t0-t1,全部生成完畢后將任務(wù)記錄置成success;這里所說的區(qū)塊鏈算法有多種算法方式,包括哈希算法、數(shù)字簽名以及rsa。
s400、從區(qū)塊鏈數(shù)據(jù)庫中提取區(qū)塊鏈數(shù)據(jù),根據(jù)區(qū)塊鏈數(shù)據(jù)對目標數(shù)據(jù)表中的目標數(shù)據(jù)進行校驗。
將最近n分鐘的區(qū)塊鏈數(shù)據(jù)取出來,然后從目標數(shù)據(jù)表中取出對應(yīng)的目標數(shù)據(jù),通過簽名驗簽方式判斷原始數(shù)據(jù)是否被篡改過。如果校驗結(jié)果不一致,則發(fā)送報警信息。
數(shù)據(jù)校驗有兩種策略,全量校驗和部分校驗。全量校驗就是將儲存的目標數(shù)據(jù)與區(qū)塊鏈數(shù)據(jù)全部進行校驗,而部分校驗則是抽取部分數(shù)據(jù)進行校驗。
本發(fā)明通過將數(shù)據(jù)庫中的目標數(shù)據(jù)采用區(qū)塊鏈的形式存儲成區(qū)塊鏈數(shù)據(jù),利用區(qū)塊鏈數(shù)據(jù)本身不能非法篡改的特性,再利用區(qū)塊鏈數(shù)據(jù)對目標數(shù)據(jù)進行準實時校驗,目標數(shù)據(jù)一旦被篡改就會被發(fā)現(xiàn),確保目標數(shù)據(jù)真實性和準確性。
這里需要說明的是原有的區(qū)塊鏈技術(shù)中,區(qū)塊鏈數(shù)據(jù)的最小存儲單元分為兩部分,分別為body部和header部,body部里存放數(shù)據(jù),header部存放上一個區(qū)塊鏈數(shù)據(jù)的哈希值或數(shù)字簽名;那么每個區(qū)塊鏈數(shù)據(jù)都會和上一個區(qū)塊鏈數(shù)據(jù)通過header部構(gòu)成強關(guān)聯(lián),就如同鏈條一樣環(huán)環(huán)相扣,想改變鏈中的某一個區(qū)塊鏈數(shù)據(jù)的值而不被發(fā)現(xiàn),那么就要將這個區(qū)塊鏈數(shù)據(jù)之后的所有鏈上的區(qū)塊鏈數(shù)據(jù)都作修改,才能變成合法的數(shù)據(jù),因為你只改當前區(qū)塊鏈數(shù)據(jù)的數(shù)據(jù)的話,通過后一個區(qū)塊鏈數(shù)據(jù)的header就能被校驗出來,而且鏈在不停的動態(tài)增長,篡改者無法停止鏈的動態(tài)增長,就不能修改鏈上的數(shù)據(jù)而不被發(fā)現(xiàn)。本發(fā)明利用區(qū)塊鏈的特性,對目標數(shù)據(jù)表中的目標數(shù)據(jù)進行哈希算法生成區(qū)塊鏈數(shù)據(jù)。
進一步的,根據(jù)目標數(shù)據(jù)生成區(qū)塊鏈數(shù)據(jù)是通過哈希算法生成,具體生成過程包括以下步驟:
s310、將目標數(shù)據(jù)表的目標數(shù)據(jù)通過哈希算法得到的哈希值,并將目標數(shù)據(jù)表的pk主鍵寫入?yún)^(qū)塊鏈數(shù)據(jù)的body部數(shù)據(jù);
s320、將body部數(shù)據(jù)與上個區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù)通過哈希算法得到當前區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù);
s330、將body部數(shù)據(jù)和header部數(shù)據(jù)合成當前區(qū)塊鏈數(shù)據(jù)。
根據(jù)上述步驟得到一個完整的區(qū)塊,而整個區(qū)塊鏈數(shù)據(jù)由源源不斷的相互鏈接的區(qū)塊組成;而將目標數(shù)據(jù)表的目標數(shù)據(jù)通過哈希算法得到的哈希值和目標數(shù)據(jù)表的pk主鍵寫入?yún)^(qū)塊鏈數(shù)據(jù)的body部數(shù)據(jù);這樣的body部數(shù)據(jù)對比直接存儲原數(shù)據(jù)來說,不僅能大大的節(jié)省區(qū)塊鏈數(shù)據(jù)的存儲空間,也能加快提取區(qū)塊鏈數(shù)據(jù)進行校驗的速度。通過header數(shù)據(jù)連接兩個相鄰區(qū)塊鏈,使相鄰的區(qū)塊鏈數(shù)據(jù)之間像鏈條一樣環(huán)環(huán)相扣,并且動態(tài)增長,達到防篡改的效果。
在s300這個步驟中:按照時間段信息和任務(wù)狀態(tài)信息篩選任務(wù)表,得到第二區(qū)塊鏈任務(wù)記錄,并按照升序的時間順序排列;逐條執(zhí)行第二區(qū)塊鏈任務(wù)記錄,讀取目標數(shù)據(jù)表的目標數(shù)據(jù),根據(jù)目標數(shù)據(jù)生成區(qū)塊鏈數(shù)據(jù),將區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫中;
由于每一個區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫時,需要嚴格按時間順序,所以生成區(qū)塊鏈數(shù)據(jù)的任務(wù)只能是單線程運行,以保證插入是有序的。但是考慮到需要及時地將大量的目標數(shù)據(jù)表轉(zhuǎn)化并插入鏈,所以對于生成區(qū)塊鏈數(shù)據(jù)和區(qū)塊鏈數(shù)據(jù)庫的算法有很高的性能要求,即單線程下單位時間內(nèi)的吞吐量要盡量大,為了達成這個目的,可以采用以下策略:
1、將body部數(shù)據(jù)與上個區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù)通過哈希算法得到當前區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù);還包括以下步驟:將header部數(shù)據(jù)采用內(nèi)部緩存儲存。使得一個批次的任務(wù)只需查詢一次數(shù)據(jù)庫,不需要每個任務(wù)都查一次,減少數(shù)據(jù)庫查詢;
2、根據(jù)目標數(shù)據(jù)生成區(qū)塊鏈數(shù)據(jù),將區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫中,具體包括以下步驟:根據(jù)若干個目標數(shù)據(jù)同時生成數(shù)量相同的區(qū)塊鏈數(shù)據(jù);將若干區(qū)塊鏈數(shù)據(jù)同時插入到區(qū)塊鏈數(shù)據(jù)庫中。這里可以是以時間段信息批量處理的形式進行,提高吞吐量。
3、第一區(qū)塊鏈任務(wù)記錄還包括當前的行字段;在將區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫時,根據(jù)插入的執(zhí)行任務(wù),更新行字段的數(shù)值;在將區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫出現(xiàn)異常時,中止更新行字段的數(shù)值。比如服務(wù)器斷電,服務(wù)器被強制重啟等情況時,只要下次任務(wù)再執(zhí)行就能從中斷的地方繼續(xù),不必從頭開始。
下面我們舉例具體說明:
首先將當前的任務(wù)狀態(tài)信息設(shè)置為process,然后根據(jù)查詢區(qū)塊鏈得到區(qū)塊鏈中最新的區(qū)塊,并取得這個區(qū)塊的header值,在批量跑任務(wù)時,為節(jié)省數(shù)據(jù)庫的查詢次數(shù),采用本地緩存,使得一個批次的任務(wù)只需查詢一次數(shù)據(jù)庫,不需要每個任務(wù)都查一次。
得到區(qū)塊的header值后,利用任務(wù)記錄中的記錄數(shù)據(jù)(即元數(shù)據(jù)),動態(tài)拼接出sql語句,連接目標數(shù)據(jù)庫后,將時間段信息為t0-t1的目標數(shù)據(jù)以批的形式查詢出,以批的形式生成區(qū)塊,每個區(qū)塊的body部由目標數(shù)據(jù)哈希算法后得到,本區(qū)塊的header部由上個區(qū)塊的header部以及本次body部的數(shù)據(jù)混合后,哈希算法得到,然后以批的形式插入?yún)^(qū)塊鏈數(shù)據(jù)庫,形成新的區(qū)塊鏈。當所有t0-t1生成的區(qū)塊鏈數(shù)據(jù)都插入?yún)^(qū)塊鏈數(shù)據(jù)庫后,設(shè)置任務(wù)狀態(tài)為success。批次的大小視硬件情況調(diào)整,以提高吞吐量。
基于同一發(fā)明構(gòu)思,本發(fā)明實施例還提供一種基于區(qū)塊鏈存儲的數(shù)據(jù)處理系統(tǒng),該系統(tǒng)的實施可參照上述方法的過程實現(xiàn),重復(fù)之處不再冗述。
如圖2所示,本發(fā)明實施例二提供的基于區(qū)塊鏈存儲的數(shù)據(jù)處理系統(tǒng),包括數(shù)據(jù)配置模塊100、區(qū)塊鏈任務(wù)生成模塊200、區(qū)塊鏈數(shù)據(jù)處理模塊300以及校驗?zāi)K400;
數(shù)據(jù)配置模塊100用于配置目標數(shù)據(jù)表的元數(shù)據(jù)到元數(shù)據(jù)表中,生成與元數(shù)據(jù)相對應(yīng)的記錄數(shù)據(jù),記錄數(shù)據(jù)至少包括目標數(shù)據(jù)表地址、目標數(shù)據(jù)表名稱以及目標數(shù)據(jù)表列名;
區(qū)塊鏈任務(wù)生成模塊200用于掃描并提取記錄數(shù)據(jù),根據(jù)每個記錄數(shù)據(jù)生成相對應(yīng)的第一區(qū)塊鏈任務(wù)記錄,并將生成的第一區(qū)塊鏈任務(wù)記錄插入到任務(wù)表中,第一區(qū)塊鏈任務(wù)記錄包括時間段信息和任務(wù)狀態(tài)信息;
區(qū)塊鏈數(shù)據(jù)處理模塊300用于按照時間段信息和任務(wù)狀態(tài)信息篩選任務(wù)表,得到第二區(qū)塊鏈任務(wù)記錄,并按照升序的時間順序排列;逐條執(zhí)行第二區(qū)塊鏈任務(wù)記錄,讀取目標數(shù)據(jù)表的目標數(shù)據(jù),根據(jù)目標數(shù)據(jù)生成區(qū)塊鏈數(shù)據(jù),將區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫中;
校驗?zāi)K400從區(qū)塊鏈數(shù)據(jù)庫中提取區(qū)塊鏈數(shù)據(jù),根據(jù)區(qū)塊鏈數(shù)據(jù)對目標數(shù)據(jù)表中的目標數(shù)據(jù)進行校驗。
繼續(xù)參見圖2,區(qū)塊鏈數(shù)據(jù)處理模塊300還包括body數(shù)據(jù)處理單元310、header數(shù)據(jù)處理單元320以及合成單元330;
body數(shù)據(jù)處理單元310,用于將目標數(shù)據(jù)表的目標數(shù)據(jù)通過哈希算法得到的哈希值,并將目標數(shù)據(jù)表的pk主鍵寫入?yún)^(qū)塊鏈數(shù)據(jù)的body部數(shù)據(jù);
header數(shù)據(jù)處理單元320,用于將body部數(shù)據(jù)與上個區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù)通過哈希算法得到當前區(qū)塊鏈數(shù)據(jù)的header部數(shù)據(jù);
合成單元330,用于將body部數(shù)據(jù)和header部數(shù)據(jù)合成當前區(qū)塊鏈數(shù)據(jù)。
通過區(qū)塊鏈數(shù)據(jù)處理模塊300得到一個完整的區(qū)塊,而整個區(qū)塊鏈數(shù)據(jù)由源源不斷的相互鏈接的區(qū)塊組成;而將目標數(shù)據(jù)表的目標數(shù)據(jù)通過哈希算法得到的哈希值和目標數(shù)據(jù)表的pk主鍵寫入?yún)^(qū)塊鏈數(shù)據(jù)的body部數(shù)據(jù);這樣的body部數(shù)據(jù)對比直接存儲原數(shù)據(jù)來說,不僅能大大的節(jié)省區(qū)塊鏈數(shù)據(jù)的存儲空間,也能加快提取區(qū)塊鏈數(shù)據(jù)進行校驗的速度。通過header數(shù)據(jù)連接兩個相鄰區(qū)塊鏈,使相鄰的區(qū)塊鏈數(shù)據(jù)之間像鏈條一樣環(huán)環(huán)相扣,并且動態(tài)增長,達到防篡改的效果。
具體的,header數(shù)據(jù)處理單元320還包括存儲子單元;存儲子單元,用于將header部數(shù)據(jù)采用內(nèi)部緩存儲存。
具體的,區(qū)塊鏈數(shù)據(jù)處理模塊300還包括批量處理單元340;批量處理單元340,用于根據(jù)若干個目標數(shù)據(jù)同時生成數(shù)量相同的區(qū)塊鏈數(shù)據(jù);將若干區(qū)塊鏈數(shù)據(jù)同時插入到區(qū)塊鏈數(shù)據(jù)庫中。
具體的,區(qū)塊鏈任務(wù)生成模塊200還包括當前行的行字段生成單元210;行字段生成單元210,用于在將區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫時,根據(jù)插入的執(zhí)行任務(wù),更新行字段生成單元210生成的行字段的數(shù)值;在將區(qū)塊鏈數(shù)據(jù)插入?yún)^(qū)塊鏈數(shù)據(jù)庫出現(xiàn)異常時,中止更新行字段生成單元210生成的行字段的數(shù)值。
本發(fā)明提供的基于區(qū)塊鏈存儲的數(shù)據(jù)處理方法及系統(tǒng),將數(shù)據(jù)庫中的目標數(shù)據(jù)采用區(qū)塊鏈算法生成區(qū)塊鏈數(shù)據(jù),并且按照區(qū)塊鏈形式存儲;利用區(qū)塊鏈數(shù)據(jù)本身不能非法篡改的特性,再通過區(qū)塊鏈數(shù)據(jù)對目標數(shù)據(jù)進行校驗,目標數(shù)據(jù)一旦被篡改就會被發(fā)現(xiàn),確保目標數(shù)據(jù)真實性和準確性。
本發(fā)明雖然已以較佳實施例公開如上,但其并不是用來限定本發(fā)明,任何本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和范圍內(nèi),都可以利用上述揭示的方法和技術(shù)內(nèi)容對本發(fā)明技術(shù)方案做出可能的變動和修改,因此,凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所作的任何簡單修改、等同變化及修飾,均屬于本發(fā)明技術(shù)方案的保護范圍。