區塊鏈或許命中註定承擔儲存那些需要長期、安全、穩定、數量龐大的資料。
區塊鏈資料庫,這個名字聽起來太拗口,很難理解。遇到這個名詞,我腦子裡一直無法想象出一個對應的“視覺化圖景”。說資料庫,我們能想象出一張表;說區塊鏈,我們能想象出一個一個區塊首尾相連。但區塊鏈資料庫是個什麼玩意?
在2018年初,我去南方科技大學拜訪,幾個朋友正在討論一個區塊鏈專案,叫“VEE——Blockchain Database Cloud”。這個專案就是現在的vsys。
當時我就被裡面講到的區塊鏈資料庫的概念吸引了。為了搞明白這個概念,我追著這個專案研究了很久。
我們熟悉的資料庫都是為特定要求定製開發的。比如你自己做一張Excel表,用來記錄你的炒幣交易紀錄,這就是一個資料庫。一般的定義是,資料庫是一定資料格式儲存的,和應用獨立的資料集合。使用者可以對資料庫進行增、刪、改、查等操作。
而區塊鏈是一種不可刪除的分散式賬本,對區塊鏈資料的“增”只能以“交易”這種方式來執行。就這兩特性就和我們熟悉的資料庫相差太遠了。
我們需要把理解下沉一層,把區塊鏈當成是“資料庫的資料庫”。或者可以這樣理解,“區塊鏈”是沒有精煉的原油,而“資料庫”是石油精煉後的汽油。
對區塊鏈的操作,只有一條指令——交易。而對資料庫的操作,有四條指令——增、刪、改、查。要把區塊鏈當成資料庫來使用,需要將對資料庫的操作指令都封裝成交易,一個交易對應一個資料庫操作。區塊鏈網路會以交易的形式記錄下所有對資料庫的操作,而且會記錄交易的時間順序。
在區塊鏈上沉澱了的交易後,再設計一個“應用”,或者叫“演算法”,“應用”會從區塊鏈網路的初始塊開始讀取相關的交易,來獲取資料庫需要的所有相關交易,並且對交易再執行資料庫的增刪改查操作,最後形成一張表,或者說形成一個特定的資料庫。而且“應用”會實時掃描區塊鏈,以檢查是否有新的資料庫操作。
使用者以發交易的方式對區塊鏈發起操作,區塊鏈會記錄所有的交易,“應用”在區塊鏈上讀取提煉相關交易,形成特定功能的資料庫。
使用區塊鏈這種方式來設計資料庫有什麼好處呢?
區塊鏈網路會記錄對資料庫的所有歷史操作,歷史操作不可更改。完美滿足證券登記結算管理辦法規定的資料需要保證20年。
傳統的資料庫管理員,或者駭客對資料歷史記錄的修改是一個經常爆發的問題。在2014年,幣圈有一個交易所被駭客入侵。駭客壞的很,幣沒偷著,但把交易所後臺資料庫給刪了。導致交易所賬戶系統沒了,都不知道自己有哪些使用者了,更不知道幣該歸誰了。朋友L在裡面存了幣,最後依靠所有的郵件歷史記錄,和客服溝通,取回了當時充值的金額,至於中間是否透過交易虧損還是掙了,就不給他算了。
區塊鏈會記錄交易的時序,所以資料可以在任意時間恢復到任意位置。
幣圈交易所有時候會搞“回滾”,被駭客攻擊了,可能就會“回滾”。你去google搜一下,主流交易所都幹過這事。這就需要資料庫記錄下所有的歷史操作和時序。
區塊鏈資料庫可以做到公開透明,也可以透過資料加密的方式做到保密。完美。
區塊鏈資料庫可以做到無需授權即接入。使用傳統的資料庫技術,一定會有嚴重的許可權等級,誰是管理員,誰是一般使用者。但區塊鏈資料庫,可以不需要許可權等級,讓任何使用者都無障礙進接入進來,不需要授權,不需要註冊。因為這玩意是去中心化的。
當然區塊鏈資料庫也有很多缺點了。
能承接的資料量嚴重有限。傳統資料庫,你想搞多大就搞多大。現在BTC網路,10分鐘也就處理1M的資料,執行了10年,積累了280G的資料。
使用區塊鏈很貴,成本很高。使用者寫一筆交易都要花一筆礦工費。現在往BTC寫資料要超過50塊錢1KB。當然也有便宜的,BCH平均是2分錢1KB。什麼資料都往鏈上整的想法,就要受到成本的約束。傳統的資料庫,相對來說價格可以忽略不計。
利用區塊鏈來設計資料庫,需要找到獨特的場景,金融領域是一個不錯的選擇。