4月22日,在掘金技術社區主辦的沙龍上, 王濤以《區塊鏈技術VS數據庫技術:顛覆仍是融合》爲題作了分享。如下是JTalk演講實錄:編者按:本文系區塊鏈專家王濤講師,在掘金技術社區主辦的《給開發者的區塊鏈技術指南 | JTalk 掘金線下活動第五期》 活動上的分享整理。掘金 JTalk 目前已舉辦5期,每期 JTalk 會邀請垂直行業的優秀工程師來分享優秀的實踐經驗,技巧方法。旨在爲開發者提供線下技術交流互動機會,幫助開發者成長。前端
如今區塊鏈所說的「3.0階段」,實際上更多的是偏向於業務,從數據庫角度來看,如今區塊鏈底層技術有不少能夠提高的餘地。剛開始你們只是作一個數字貨幣,隨着合規的加入,你們能夠在上面跑一些業務。 但區塊鏈底層鏈,包括性能、處理能力、通用功能,離商業化還有很大的距離。若是把區塊鏈技術將來暢想成一個10分的東西,咱們認爲如今區塊鏈功能只是在1分到2分的級別,還有很是長的路要走。 從技術角度理解,其實區塊鏈技術就是一個特殊的分佈式多活數據庫。算法
方向1:從專業化向通用化演進。 如今玩以太坊和比特幣,都是爲了專門目的設計的一套軟件,比特幣是專門爲轉帳設計的,以太坊是轉帳+智能合約,通用方面,可使用JAVA、C+ +程序,寫任何邏輯。如今區塊鏈基本是爲專有系統定製的一套軟件,而不是一個通用的軟件。數據庫
方向2:各自爲政向標準化演進。 搞區塊鏈最重要的是協議,而不是軟件,你們只要知道比特幣之間交互協議,可使用專爲比特幣設計的礦機,也能夠本身寫一套東西,只要有協議就行。如今不少人作公鏈,每一個公鏈都是獨立的通訊協議,這就會形成鏈與鏈中間通訊受到影響,能夠用跨鏈機制、側鏈機制打破這些壁壘。相信將來在整個協議層可能會有更多通用化、標準化東西。後端
方向3:產品化與模塊化不斷增強。 如今基本上大部分數據庫模塊化作的很是好,好比但願用一種特殊的加密算法,就把這個加密的庫替換原來庫就能夠,這是將來區塊鏈須要提高的地方,就是框架可以作到更好的模塊化。安全
方向4,性能與可擴展性。 針對分片、內存計算、磁盤結構等進行優化,從單點磁盤結構到多分片對等多活架構,從而使得性能發揮到極致。這一塊須要技術上繼續突破才能實現性能的提高。服務器
特性:共識機制、存儲機制、智能合約、分片、應用開發接口、安全。這些實際上都是區塊鏈底層老生常談的一些模塊,對應到數據庫,有沒有一些對應的點? 共識機制。在過去數據庫架構裏,所謂一致性控制都是有一個主節點,全部寫操做會被複制到另一個存節點作高可用配置。區塊鏈上,能夠把這個體系擴展,假設主節點並非固定的,而是每10分鐘換一次,在主節點MySQL,10分鐘換一次主節點,某種程度上是相通的。無論是POW、POS所謂共識機制,真正本質是到底在一段時間以內以誰的信息爲準,這個數據庫裏是以主節點爲主,當它掛了之後,怎麼選出一個新的節點,這些都不重要,只是實現問題。網絡
存儲機制。在區塊鏈裏,存儲說的都是鏈自己這個事,你們有興趣看一下比特幣、以太坊,除了鏈自己,還有相似於狀態存儲,好比鏈很長,可能有100GB,涉及到某個帳戶屢次修改,鏈自己其實是交易日誌,記錄每一條記錄修改方式,展示形式要歸到一個數據庫裏,都是要內嵌一個小型數據庫,把最終結果放到裏面。這一套體系對應到數據庫裏,無外乎就是數據庫的存儲+事務日誌。架構
智能合約。是用戶自定義的託管程序,在數據庫裏託管程序叫存儲過程,在區塊鏈裏,本質是同樣的,最大不一樣點在於安全性方面。在數據庫裏調存儲過程,記錄最終結果,可是在區塊鏈裏,由於不可信任,記錄調用。 分片。大部分區塊鏈項目裏作得還不太成熟、不穩定,數據庫分片是很是成熟的東西,區塊鏈行業,因爲分片之間交易很難保障,大部分區塊鏈公鏈項目很難作好的分片。框架
應用開發接口。在MySQL或Oracle用SQL,無外乎寫一段應用程序,扔到系統裏,別人調用。而區塊鏈技術也須要一個統一的訪問方式,才能更好實現通用化應用。異步
安全機制。在數據庫裏,一個表單,到底誰能讀、誰能寫,有一套定義,但在區塊鏈裏,安全是行級的安全,好比在比特幣裏,至關於全局可讀,只有輸入可寫的安全配置。 從這幾塊來看,區塊鏈和數據庫的世界有不少相通之處。
數據庫共識方式。全部讀寫操做都是主節點,主節點會把信息傳給兩個從節點。在區塊鏈裏,它的主節點是隨時會變化的,好比比特幣每10分鐘作一次出塊,這是POW自我驗證,誰先算出那個數,你們廣播一把,我算出數,你們跟我看齊。這是你們競爭主節點的過程。在區塊鏈的世界,主節點是隨時跳躍的,當每個節點本身認爲本身變成主節點之後,會把一段時間以內接收到新的信息,經過區塊方式傳送給其餘節點,這個傳輸過程和咱們以前從主節點發送到從節點的方式基本也是很相似的,涉及到P2P的東西,核心本質都是同樣的。事務日誌。數據庫裏事務日誌和區塊鏈的鏈自己就是一個事情,在區塊鏈裏,每個區塊對應到數據庫,能夠認爲對應的就是一個日誌文件。最本質的區別是在於區塊鏈同步標準以區塊爲單位,每一次主節點要把交易信息打包成區塊,這個區塊做爲交易日誌。當有任何信息之後,馬上就能夠把數據同步給其餘節點。
POW本質是一種自我證實的方法,就是每個節點你們都想讓別人跟本身同步,本身想成爲主節點,怎麼成爲主節點?POW方式是給你們很難的題本身去算,算完了之後,告訴你們算出來了,讓你們來驗證,若是驗證是對的,跟我看齊。好處是你們會把大部分時間花在計算過程中,而對於網絡沒什麼太大壓力。
POS正好相反,POS沒有過多自我計算的過程,至關於一大屋子人都想成爲主節點,你們經過某種方式進行投票,這種機制不須要本身去搞,但對網絡壓力很大,由於每一次投票都要設計上萬個節點競選,網絡壓力很大,因此爲何POS也不可以徹底真正解決高性能問題,由於當節點數太多,POS效率很是低。 DPOS,就是一屋子人選幾個表明,你們跟幾個表明看齊,從某種程度上是減小了網絡壓力。但怎麼信這個表明,這個表明是否是表明廣大人民的利益,是否是靠譜,這又是一個問題。
DAG,這跟咱們一直說了POW、POS是本質的區別,無論是POS仍是POW,作得都是跟我看齊的事,本質是當某一我的在一段時間以內成爲一個基準,你們跟基準點看齊。但DAG的思路是一幫菜市場大媽去傳播謠言,沒有一個基準點,當在DAG網絡裏,全部傳輸都是異步的,好處是不須要任何人成爲這個基準出塊的節點,壞處是沒有辦法作時序控制,由於每一個人討論東西順序不同。DAG惟一能作的事情就是轉帳,後面涉及到操做無外乎是加和減,若是菜市場大媽互相傳播方式,作一些高階操做,A和B兩我的先作加法再作乘法,C和D兩我的先作乘法再作加法,兩個結果不同。DAG算法裏暫時很難突破排序的問題。傳統區塊鏈鏈式結構沒有這個問題,這個節點先作加作作乘,不要緊,只要說好了,他說先加就是先加,他說先乘就是先乘,這塊是DAG網絡和傳統區塊鏈方式最大的區別。
從安全級別來說,區塊鏈有不少機制確保安全性。對於數據庫你們的想法是這個東西是跑在數據中內心的,區塊鏈基本上有一個筆記本就能夠了,因此除了確保本地安全之外,更重要的是協議層面確保其餘對等節點、相鄰節點有沒有做惡的壞人。在三個層面上確保安全,對於記錄級安全,屬於交易數字簽名、智能合約數字簽名,就是當作一筆交易時,必定要經過數字簽名來驗證賬號是否有權利修改這套記錄,經過加密,從記錄級確保修改這條記錄的人必定是本人。區塊級的安全機制,當收到塊之後怎麼確保這個塊是正確的,這個塊包括默克爾樹、挖礦校驗,這是對於區塊安全的保障。對於鏈級安全機制,怎麼確保這個鏈是靠譜的,利用前一個區塊生成校驗碼、分叉解決方案。
分片機制。傳統數據庫分片很容易,都在一個數據中心以內,若是作兩個分片之間的操做,先問全部參與交易的人是否是都準備好了,能夠提交了,確保你們都在同一個狀態下。但有一個問題,沒有辦法在多個分片之間作控制。在區塊鏈裏除非有某種機制確保不會分叉,不可能確保其中某個操做在在另外一個鏈裏將來會不會被退掉,沒有技術確保,由於鏈不具有這個功能。不是技術上操做不了,是理論上行不通。若是這麼作也會有一些方法,找到第三方中介作這個事,他來背鍋是有可能的,或者用側鏈機制、跨鏈機制。而在底層技術上,我認爲經過二者的技術融合,可能會出現「去中心化數據庫」這麼一種產品形態。 對於去中心化數據庫,其主要的技術點有一下幾個:
以上是《給開發者的區塊鏈技術指南 | JTalk 掘金線下活動第五期》 講師王濤的分享,若是你對掘金的 JTalk 線下活動感興趣,能夠關注掘金活動頁面的 JTalk 活動報名。掘金 JTalk 目前已舉辦5期,每個月一期的 JTalk 會邀請垂直行業的優秀工程師來分享優秀的實踐經驗,技巧方法。旨在爲開發者提供線下技術交流互動機會,幫助開發者成長。
JTalk 第六期即將在杭州舉辦。