• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 自媒體 查看內容
    • 5850
    • 0
    • 分享到

    區塊鏈數據是存在鏈上還是數據庫里?

    2019-8-22 23:03

    來源: FISCOBCOS


    在回答這個問題之前,首先要理清“區塊鏈數據”和“鏈上數據”的概念。


    區塊鏈數據


    “區塊鏈數據”廣義上包括區塊鏈的區塊數據和區塊鏈的狀態數據:


    • 區塊數據記錄了區塊鏈上發生的每一筆交易,譬如小明給小王轉賬了50元、小王充值了20元等類似這樣的交易數據;


    • 狀態數據記錄了區塊鏈上每個賬戶或智能合約的當前狀態,比如小明當前的余額是50元、小王當前的余額是100元。

     

    無論區塊數據還是狀態數據,它們都是由區塊鏈節點使用和存儲的。區塊鏈節點是一個程序,運行在我們的個人電腦、虛擬機或服務器上。多個分布在不同電腦或服務器上的區塊鏈節點,通過網絡互相連接,組成了完整的區塊鏈網絡。

     

    區塊鏈節點通常會把區塊鏈數據存儲在個人電腦、虛擬機或服務器上,存儲區塊鏈數據最常見的介質,就是磁盤。

     

    區塊鏈節點不會直接訪問磁盤,它們會通過特定的數據庫,如LevelDB、RocksDB或MySQL等單機或分布式數據庫來操作數據。相比于直接操作磁盤,數據庫抽象了特定的數據訪問模型,對區塊鏈節點更為友好。


    因此,當我們說:“區塊鏈數據保存在數據庫”時,可以認為區塊鏈節點將區塊鏈數據保存在MySQL(或其它數據庫),MySQL將區塊鏈數據保存在磁盤。




    數據庫有獨立式嵌入式之分:


    • 獨立式數據庫,如MySQL、Oracle是通常理解的數據庫,獨立式數據庫作為獨立的進程運行,需要單獨部署和啟停。獨立式數據庫可以與區塊鏈節點部署在同一臺服務器,或者部署在不同的服務器,還支持分布式、集群化的部署。無論何種部署方式,獨立式數據庫都是區塊鏈節點的存儲組件,隸屬于區塊鏈節點,與區塊鏈網絡無關。


    • 嵌入式數據庫如LevelDB、RocksDB,它們以動態依賴庫或靜態依賴庫的方式,與區塊鏈節點整合在同一個進程中,同時啟停,用戶不會明顯感受到它們的存在。



    鏈上數據

    區塊鏈數據的區塊數據和狀態數據并不是憑空產生的。區塊數據中的交易,是由區塊鏈的用戶生成,用戶把交易發送到區塊鏈節點,區塊鏈節點將多個交易打包進區塊,區塊會在區塊鏈網絡上廣播和共識,區塊鏈網絡對區塊達成共識后,認同區塊中的交易,將交易的執行結果保存到狀態數據中。

     

    假設區塊鏈原本的狀態數據是:小明當前的余額是50元、小王當前的余額是100元,那么執行了“小明給小王轉賬了50元”的交易后,狀態數據會發生變化,小明當前的余額會變為0元,小王當前的余額變為150元。


    區塊需要進行區塊鏈共識,狀態數據是通過執行區塊中的交易生成的,這兩類數據都直接或間接跟區塊鏈共識有關系,可以將其稱為“鏈上數據”。


    那么,“鏈上數據”的明確定義,就是:鏈上數據是直接或間接由區塊鏈共識產生的數據。

     


    回到最初的問題


    很顯然,“鏈上數據”和“數據庫”不是同一個層面的概念,“區塊鏈數據是存在鏈上還是存在數據庫?”這個問題不成立,區塊鏈數據無論是存儲在LevelDB、RocksDB、MySQL數據庫或直接存儲在磁盤,只要是直接或間接由區塊鏈共識產生,都可以視為鏈上數據。



    FISCO BCOS的鏈上數據


    FISCO BCOS的區塊鏈數據,默認是通過RocksDB保存在磁盤中。如果希望把數據保存到MySQL數據庫,可以先自行部署一個MySQL數據庫,然后修改區塊鏈節點下的群組配置文件,群組配置文件通常位于區塊鏈節點的配置目錄下:conf/group.1.ini








    [storage]           type=mysql           db_ip=127.0.0.1           db_port=3306           db_username=root           db_name=db_Group1_A           db_passwd=******

     

    其中:

    • type為區塊鏈節點的存儲類型,配置為mysql,表示使用MySQL來存儲區塊鏈數據;

    • db_ip為MySQL數據庫的IP地址,如果部署在本機,就是127.0.0.1;

    • db_port為MySQL數據庫的端口,默認為3306;

    • db_username是MySQL數據庫的登陸用戶名;

    • db_name是MySQL數據庫中用于存儲區塊鏈數據的數據庫名,無需先行創建;

    • db_passwd是MySQL數據庫的登陸密碼。


    其它未提及的配置項,可保留默認值不修改,完成這些信息的填寫以后,確保數據庫運行正常,然后重啟區塊鏈節點,區塊鏈節點就會將區塊鏈數據保存到MySQL數據庫中。


    FISCO BCOS的區塊鏈,無論是保存在RocksDB還是MySQL中,都可視為鏈上數據。

     

    使用MySQL,可以方便地查看鏈上數據的大小、結構等信息,如區塊的大小、賬戶的大小等等。



    總 結


    FISCO BCOS提供了靈活的數據存儲機制,對于追求便利與性能的場景,可以使用默認的RocksDB;對于偏重審計和治理的場景,可以使用MySQL,滿足不同的需求。

     

    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频