本發(fā)明涉及數(shù)據(jù)存儲與檢索領(lǐng)域,尤其涉及一種元數(shù)據(jù)的存儲系統(tǒng)、存儲與檢索方法。
背景技術(shù):
區(qū)塊鏈?zhǔn)且粋€(gè)去中心化去信任的集體維護(hù)的可靠數(shù)據(jù)庫,分布式網(wǎng)絡(luò)是區(qū)塊鏈的基礎(chǔ)設(shè)施,每個(gè)節(jié)點(diǎn)上產(chǎn)生的數(shù)據(jù)通過分布式網(wǎng)絡(luò)廣播到其他節(jié)點(diǎn),其他節(jié)點(diǎn)通過工作量證明來驗(yàn)證數(shù)據(jù)的真實(shí)性。分布式網(wǎng)絡(luò)是保證區(qū)塊鏈去中心化、不可篡改、可回溯特性的前提,在比特幣網(wǎng)絡(luò)中,正是由于有分布于全球的驗(yàn)證節(jié)點(diǎn),才使得比特幣的工作量證明機(jī)制得到認(rèn)可,也才讓人們認(rèn)識到了區(qū)塊鏈的價(jià)值。
分布式網(wǎng)絡(luò)是區(qū)塊鏈的基礎(chǔ),而連接于分布式網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都存儲有相同的數(shù)據(jù)交易記錄,也就是每個(gè)節(jié)點(diǎn)記錄相同的“一本賬”則是區(qū)塊鏈的最主要特征,要保證全網(wǎng)“一本賬”,就必須將數(shù)據(jù)隨時(shí)同步到各個(gè)節(jié)點(diǎn),并能夠保證數(shù)據(jù)的一致性。但在實(shí)際的應(yīng)用系統(tǒng)中,業(yè)務(wù)數(shù)據(jù)可能非常龐大,尤其包括視頻、音頻的數(shù)據(jù),動輒幾十兆,有的甚至上百兆,如此龐大的數(shù)據(jù)在網(wǎng)絡(luò)中傳輸,對帶寬要求非常高,而且全網(wǎng)中如此大的數(shù)據(jù)匯聚成“一本賬”,則這個(gè)賬本會非常龐大,單個(gè)節(jié)點(diǎn)很難保證有足夠的存儲容量來存儲。即使現(xiàn)在的比特幣網(wǎng)絡(luò),賬本的容量在優(yōu)化后仍然達(dá)到4G以上,而且隨著挖礦的進(jìn)行,賬本的容量在繼續(xù)擴(kuò)大,一臺普通PC若要下載完成整個(gè)賬本需要長達(dá)幾十個(gè)小時(shí),嚴(yán)重影響了用戶體驗(yàn),這不僅對區(qū)塊鏈的普及推廣構(gòu)成很大的挑戰(zhàn),而且使得區(qū)塊鏈在商業(yè)系統(tǒng)上的應(yīng)用情況也變得更加嚴(yán)峻。
與數(shù)據(jù)存儲相對應(yīng)的是數(shù)據(jù)檢索,在龐大“一本賬”數(shù)據(jù)中如何快速檢索,在區(qū)塊鏈分布式網(wǎng)絡(luò)中也面臨著嚴(yán)峻的挑戰(zhàn)。
因此,提供一種能夠保證區(qū)塊鏈上大容量元數(shù)據(jù)的存儲及檢索的方法及系統(tǒng)成為業(yè)內(nèi)急需解決的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種區(qū)塊鏈元數(shù)據(jù)存儲系統(tǒng)及其存儲方法與檢索方法,其不僅能夠引入分布式存儲系統(tǒng)來存儲大數(shù)據(jù),同時(shí)還可以將數(shù)據(jù)降維后再存入?yún)^(qū)塊鏈,便于需求方采集所需的信息。
本發(fā)明的第一個(gè)目的在于提供一種區(qū)塊鏈元數(shù)據(jù)存儲系統(tǒng),包括各自連接互聯(lián)網(wǎng)的至少一個(gè)主節(jié)點(diǎn)及若干個(gè)副節(jié)點(diǎn),至少一個(gè)主節(jié)點(diǎn)及若干個(gè)副節(jié)點(diǎn)通過區(qū)塊鏈構(gòu)造成分布式共享網(wǎng)絡(luò),其中,至少一個(gè)主節(jié)點(diǎn)包括:數(shù)據(jù)接收模塊,其用于接收來自外部的源數(shù)據(jù);分布式存儲模塊,其與數(shù)據(jù)接收模塊相連接,用于將數(shù)據(jù)接收模塊傳輸?shù)脑磾?shù)據(jù)進(jìn)行分布式存儲;降維保全模塊,其與分布式存儲模塊相連接,用于將分布式存儲模塊傳輸?shù)脑磾?shù)據(jù)進(jìn)行降維操作以形成元數(shù)據(jù)后,再對元數(shù)據(jù)進(jìn)行保全操作以形成數(shù)據(jù)指紋;數(shù)據(jù)存儲模塊,其與降維保全模塊相連接,用于將數(shù)據(jù)指紋寫入?yún)^(qū)塊鏈中;以及第一數(shù)據(jù)共識模塊,其用于將數(shù)據(jù)指紋進(jìn)行全網(wǎng)發(fā)布以實(shí)現(xiàn)區(qū)塊鏈的共識過程;若干個(gè)副節(jié)點(diǎn)包括:數(shù)據(jù)共識模塊,其用于接收及存儲區(qū)塊鏈發(fā)布的數(shù)據(jù)指紋以完成區(qū)塊鏈的共識過程。
其中,源數(shù)據(jù)是指需要保存的數(shù)據(jù),諸如文檔、語音、視頻、或記錄信息等。
此外,分布式存儲模塊采用可擴(kuò)展的系統(tǒng)結(jié)構(gòu),利用多臺存儲服務(wù)器分擔(dān)存儲負(fù)荷,利用位置服務(wù)器定位存儲信息。分布式存儲在眾多的服務(wù)器搭建一個(gè)分布式文件系統(tǒng),再在這個(gè)分布式文件系統(tǒng)上實(shí)現(xiàn)相關(guān)的數(shù)據(jù)存儲業(yè)務(wù)。分布式文件系統(tǒng)是指文件系統(tǒng)管理的物理存儲資源不一定直接連接在本地節(jié)點(diǎn)上,而是通過計(jì)算機(jī)網(wǎng)絡(luò)與節(jié)點(diǎn)相連。分布式文件系統(tǒng)可以包括:Lustre、Hadoop、MogileFS、FreeNAS、FastDFS、MooseFS、pNFS等,優(yōu)選地,分布式存儲模塊設(shè)定為采用FastDFS分布式文件系統(tǒng)。
可選擇地,主節(jié)點(diǎn)還包括:與分布式存儲模塊相連接的用于進(jìn)行負(fù)載均衡的Nginx組件以及連接于Nginx組件與數(shù)據(jù)存儲模塊之間的ATS組件。
優(yōu)選地,數(shù)據(jù)的降維保全操作是指對數(shù)據(jù)應(yīng)用HASH算法,其中,HASH算法是將任意長度的二進(jìn)制值映射為較短的固定長度的二進(jìn)制值,這個(gè)小的二進(jìn)制值稱為哈希值。哈希值是一段數(shù)據(jù)唯一且極其緊湊的數(shù)值表示形式。如果散列一段明文而且哪怕只更改該段落的一個(gè)字母,隨后的哈希都將產(chǎn)生不同的值。要找到散列為同一個(gè)值的兩個(gè)不同的輸入,在計(jì)算上是不可能的,所以數(shù)據(jù)的哈希值相似于“指紋”,經(jīng)HASH算法處理后得到的HASH值被稱為“指紋”值,從而可以檢驗(yàn)數(shù)據(jù)的完整性。HASH算法包括:MD2、MD4、MD5和SHA-1。更優(yōu)選地,本發(fā)明的降維及保全操作設(shè)定為對源數(shù)據(jù)應(yīng)用SHA-1算法。
優(yōu)選地,數(shù)據(jù)指紋設(shè)定為包括:本次源數(shù)據(jù)應(yīng)用SHA-1算法得到的作為元數(shù)據(jù)的HASH值、本次源數(shù)據(jù)應(yīng)用SHA-1算法的時(shí)間戳、本次源數(shù)據(jù)應(yīng)用SHA-1算法的數(shù)字簽名、以及上次元數(shù)據(jù)的數(shù)據(jù)指紋。
優(yōu)選地,主節(jié)點(diǎn)還包括:指紋檢索模塊,其與數(shù)據(jù)存儲模塊相連接,用于檢索存儲于區(qū)塊鏈中的數(shù)據(jù)指紋以得到檢索數(shù)據(jù)指紋。
優(yōu)選地,主節(jié)點(diǎn)及副節(jié)點(diǎn)均包括有驗(yàn)證模塊,其用于驗(yàn)證檢索數(shù)據(jù)指紋是否發(fā)生篡改。
本發(fā)明的第二個(gè)目的在于提供一種上述區(qū)塊鏈元數(shù)據(jù)存儲系統(tǒng)的存儲方法,其包括:主節(jié)點(diǎn)接收來自外部的源數(shù)據(jù),并將源數(shù)據(jù)進(jìn)行分布式存儲;主節(jié)點(diǎn)將進(jìn)行分布式存儲的源數(shù)據(jù)進(jìn)行降維操作以形成元數(shù)據(jù)后,再對元數(shù)據(jù)進(jìn)行保全操作以形成數(shù)據(jù)指紋;主節(jié)點(diǎn)將數(shù)據(jù)指紋寫入?yún)^(qū)塊鏈中,利用區(qū)塊鏈的共識過程進(jìn)行全網(wǎng)發(fā)布;以及副節(jié)點(diǎn)接收及存儲所述區(qū)塊鏈發(fā)布的所述數(shù)據(jù)指紋。
優(yōu)選地,降維操作設(shè)定為對元數(shù)據(jù)應(yīng)用SHA-1算法。
優(yōu)選地,數(shù)據(jù)指紋設(shè)定為包括:本次源數(shù)據(jù)應(yīng)用SHA-1算法得到的元數(shù)據(jù)、本次源數(shù)據(jù)應(yīng)用SHA-1算法的時(shí)間戳、本次源數(shù)據(jù)應(yīng)用SHA-1算法的數(shù)字簽名、以及上次元數(shù)據(jù)的數(shù)據(jù)指紋。
本發(fā)明的第三個(gè)目的在于提供一種上述區(qū)塊鏈元數(shù)據(jù)存儲系統(tǒng)的指紋檢索方法,其包括:于主節(jié)點(diǎn)上對目標(biāo)數(shù)據(jù)指紋進(jìn)行檢索以獲取檢索數(shù)據(jù)指紋;于主節(jié)點(diǎn)及連接于區(qū)塊鏈中的若干個(gè)副節(jié)點(diǎn)上對檢索數(shù)據(jù)指紋進(jìn)行驗(yàn)證;以及待主節(jié)點(diǎn)及若干個(gè)副節(jié)點(diǎn)對檢索數(shù)據(jù)指紋驗(yàn)證一致性比例超過80%后,判定檢索數(shù)據(jù)指紋未發(fā)生篡改,完成指紋檢索過程。
本發(fā)明的有益效果是:(1)、主節(jié)點(diǎn)引入分布式存儲系統(tǒng)來存儲諸如音頻、視頻類的大數(shù)據(jù)量的源數(shù)據(jù),然后再將源數(shù)據(jù)進(jìn)行降維保全形成的數(shù)據(jù)指紋存入?yún)^(qū)塊鏈中,并通過區(qū)塊鏈的共識過程將數(shù)據(jù)指紋分布式存儲到各個(gè)副節(jié)點(diǎn)中,大大減小了存儲于區(qū)塊鏈中的數(shù)據(jù)量,減輕了區(qū)塊鏈的數(shù)據(jù)負(fù)擔(dān);(2)、源數(shù)據(jù)通過降維算法降維保全后就變?yōu)閰^(qū)塊鏈可以接受的數(shù)據(jù)大小,而且在數(shù)據(jù)同步的過程中,大大降低了對帶寬的要求,對分布式節(jié)點(diǎn)上的存儲要求也大大降低;(3)、采用中心化的檢索方式,在保證數(shù)據(jù)一致性的前提下,只需要在主節(jié)點(diǎn)上檢索數(shù)據(jù)指紋即可,不需要進(jìn)行全網(wǎng)檢索,從而避免了不必要的帶寬開銷,保證數(shù)據(jù)檢索的速度;(4)、每一次完成數(shù)據(jù)指紋檢索后,都需要首先在全網(wǎng)進(jìn)行驗(yàn)證,確保檢索得到的數(shù)據(jù)指紋沒有被篡改掉,才可以使用,有效保證了數(shù)據(jù)的安全性。
附圖說明
圖1是本發(fā)明的區(qū)塊鏈元數(shù)據(jù)存儲系統(tǒng)的構(gòu)造示意圖。
圖2是本發(fā)明的數(shù)據(jù)指紋的組成示意圖。
圖3是本發(fā)明的區(qū)塊鏈元數(shù)據(jù)存儲系統(tǒng)的存儲方法的流程示意圖。
圖4是本發(fā)明的區(qū)塊鏈元數(shù)據(jù)存儲系統(tǒng)的檢索方法的流程示意圖。
具體實(shí)施方式
下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施例是示例性的,旨在用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。
首先,請參考圖1,作為一種非限制性示例,本發(fā)明的區(qū)塊鏈元數(shù)據(jù)存儲系統(tǒng)包括各自連接互聯(lián)網(wǎng)的一個(gè)主節(jié)點(diǎn)P及n個(gè)副節(jié)點(diǎn)S1、S2、S3……Sn,主節(jié)點(diǎn)P與副節(jié)點(diǎn)S1、S2、S3……Sn通過區(qū)塊鏈C構(gòu)造成分布式共享網(wǎng)絡(luò)。在本發(fā)明中,主節(jié)點(diǎn)與副節(jié)點(diǎn)是邏輯上的區(qū)別,主節(jié)點(diǎn)可以發(fā)送“心跳”,副節(jié)點(diǎn)不需要發(fā)送“心跳”,同時(shí),主節(jié)點(diǎn)可以接受外部的業(yè)務(wù)數(shù)據(jù),而副節(jié)點(diǎn)不接收外部的業(yè)務(wù)數(shù)據(jù)。其中,“心跳”是主節(jié)點(diǎn)與若干個(gè)副節(jié)點(diǎn)之間進(jìn)行網(wǎng)絡(luò)探測的一種方式,其用來探測主節(jié)點(diǎn)與副節(jié)點(diǎn)之間的連通性。
在該非限制性示例中,主節(jié)點(diǎn)P包括:數(shù)據(jù)接收模塊100、分布式存儲模塊200、降維保全模塊300、數(shù)據(jù)存儲模塊400以及第一數(shù)據(jù)共識模塊700。其中,數(shù)據(jù)接收模塊100接收來自外部的作為源數(shù)據(jù)的業(yè)務(wù)數(shù)據(jù),分布式存儲模塊200則將數(shù)據(jù)接收模塊100傳輸來的源數(shù)據(jù)進(jìn)行分布式存儲。在本發(fā)明中,對于音頻、視頻等大文件的源數(shù)據(jù)的存儲采用FastDFS分布式文件系統(tǒng)存儲,從而適用于音頻及視頻等大文件。在完成分布式存儲后,利用降維保全模塊300將分布式存儲模塊200傳輸?shù)脑磾?shù)據(jù)先進(jìn)行降維形成元數(shù)據(jù),然后再對元數(shù)據(jù)進(jìn)行保全操作,從而形成數(shù)據(jù)指紋。而數(shù)據(jù)存儲模塊400則將降維保全后形成的數(shù)據(jù)指紋寫入?yún)^(qū)塊鏈中,然后再利用第一數(shù)據(jù)共識模塊700將這些數(shù)據(jù)指紋進(jìn)行全網(wǎng)發(fā)布,從而實(shí)現(xiàn)區(qū)塊鏈的共識過程,同時(shí)副節(jié)點(diǎn)S1、S2、S3……Sn利用第二數(shù)據(jù)共識模塊800來接收及存儲區(qū)塊鏈發(fā)布的這些數(shù)據(jù)指紋,從而大大降低了區(qū)塊鏈中的存儲數(shù)據(jù)量。
在該非限制性示例中,降維保全模塊300對源數(shù)據(jù)應(yīng)用SHA-1算法,降維保全的過程類似于對源數(shù)據(jù)進(jìn)行“壓縮”,其需要基于數(shù)據(jù)內(nèi)容、文件特征、時(shí)間戳等特定信息進(jìn)行壓縮。其中,如圖2所示,本發(fā)明的數(shù)據(jù)指紋包括本次源數(shù)據(jù)應(yīng)用SHA-1算法得到的作為元數(shù)據(jù)的HASH值、本次源數(shù)據(jù)應(yīng)用SHA-1算法的時(shí)間戳、本次源數(shù)據(jù)應(yīng)用SHA-1算法的數(shù)字簽名、以及上次元數(shù)據(jù)的數(shù)據(jù)指紋。從而將本次的源數(shù)據(jù)進(jìn)行了“固化”,再定期地發(fā)布在區(qū)塊鏈中,接受連接于區(qū)塊鏈中的各個(gè)節(jié)點(diǎn)的監(jiān)督,保證了區(qū)塊鏈中存儲數(shù)據(jù)的安全性及可靠性。
作為一種可替代的實(shí)施方式,主節(jié)點(diǎn)P還包括指紋檢索模塊500及驗(yàn)證模塊600,與此對應(yīng)地,副節(jié)點(diǎn)S1、S2、S3……Sn上安裝有驗(yàn)證模塊600。由此,在保證數(shù)據(jù)一致性的前提下,當(dāng)需要對源數(shù)據(jù)的數(shù)據(jù)指紋進(jìn)行檢索時(shí),只需要在主節(jié)點(diǎn)P上利用指紋檢索模塊500便可以檢索存儲于主節(jié)點(diǎn)P的區(qū)塊鏈中的數(shù)據(jù)指紋,從而得到檢索數(shù)據(jù)指紋,不需要進(jìn)行全網(wǎng)檢索,避免了不必要的寬帶開銷。但是為了確保數(shù)據(jù)的安全性,檢索后得到的檢索數(shù)據(jù)指紋需要在全網(wǎng)進(jìn)行驗(yàn)證,利用主節(jié)點(diǎn)P及n個(gè)副節(jié)點(diǎn)S1、S2、S3……Sn上安裝的驗(yàn)證模塊600,便可以驗(yàn)證檢索數(shù)據(jù)指紋是否發(fā)生篡改,在保證檢索數(shù)據(jù)指紋未發(fā)生改變的情況下,才可以對該元數(shù)據(jù)進(jìn)行使用。
基于同樣的思想,本發(fā)明還提供了區(qū)塊鏈元數(shù)據(jù)存儲系統(tǒng)的存儲方法,如圖3所示,在步驟S1中,主節(jié)點(diǎn)接收來自外部的源數(shù)據(jù),并將源數(shù)據(jù)進(jìn)行分布式存儲。接著,在步驟S2中,主節(jié)點(diǎn)將進(jìn)行分布式存儲的源數(shù)據(jù)進(jìn)行降維操作形成元數(shù)據(jù)后,再對元數(shù)據(jù)進(jìn)行保全操作,從而形成數(shù)據(jù)指紋。在步驟S3中,繼續(xù)利用主節(jié)點(diǎn)將數(shù)據(jù)指紋寫入?yún)^(qū)塊鏈中,利用區(qū)塊鏈的共識過程進(jìn)行全網(wǎng)發(fā)布。最后,在步驟S4中,將數(shù)據(jù)指紋分布式存儲于連接于區(qū)塊鏈中的n個(gè)副節(jié)點(diǎn)中。
與存儲方法相對應(yīng)的是區(qū)塊鏈元數(shù)據(jù)存儲系統(tǒng)的檢索方法,為了在龐大的區(qū)塊鏈中實(shí)現(xiàn)元數(shù)據(jù)的快速檢索,如圖4所示,首先,在步驟S10中,于主節(jié)點(diǎn)上對目標(biāo)數(shù)據(jù)指紋進(jìn)行檢索,從而獲取檢索數(shù)據(jù)指紋。接著,在步驟S20中,于主節(jié)點(diǎn)及若干個(gè)副節(jié)點(diǎn)上對檢索數(shù)據(jù)指紋進(jìn)行驗(yàn)證。最后,在步驟S30中,待主節(jié)點(diǎn)及若干個(gè)副節(jié)點(diǎn)對檢索數(shù)據(jù)指紋驗(yàn)證一致性比例超過80%后,則判定檢索數(shù)據(jù)指紋未發(fā)生篡改,完成指紋檢索的過程。
在本說明書的描述中,參考術(shù)語“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不必須針對的是相同的實(shí)施例或示例。此外,在不相互矛盾的情況下,本領(lǐng)域的技術(shù)人員可以將本說明書中描述的不同實(shí)施例或示例以及不同實(shí)施例或示例的特征進(jìn)行結(jié)合和組合。
盡管上面已經(jīng)示出和描述了本發(fā)明的實(shí)施例,可以理解的是,上述實(shí)施例是示例性的,不能理解為對本發(fā)明的限制,本領(lǐng)域的普通技術(shù)人員在本發(fā)明的范圍內(nèi)可以對上述實(shí)施例進(jìn)行變化、修改、替換和變型。