91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行LightDB項目的探索和開發

發布時間:2021-12-27 15:02:51 來源:億速云 閱讀:150 作者:柒染 欄目:互聯網科技

這篇文章給大家介紹如何進行LightDB項目的探索和開發,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

前言

        NEO節點是一個功能非常復雜的項目,它包含了P2P網絡,RPC接口,數據庫讀寫,執行智能合約等功能。不同的功能相互協作,才能確保節點及時同步數據,并且提供準確的數據給使用者。節點通過P2P網絡,請求和獲得塊數據,并將之驗證分析存入leveldb數據庫。當此節點正確同步到鏈上最新高度時,就意味著節點保存了一份鏈上數據可以供用戶使用。

       作為開發者,對于節點的使用需求第一個是通過節點發送交易上鏈,第二個是通過RPC服務獲取節點中的數據或者模擬執行合約。在實際使用場景中,獲取數據或模擬執行合約的需求會更大一點,單個節點有時會扛不住請求的壓力。因為RPC服務和數據庫存在一個進程中,所以不存在開啟多個數據庫負載均衡提供數據給接口服務器的情況,也不存在啟動多個接口服務器從同一個數據庫中獲取數據的情況。

        我們在開發一些dapp時,會遇到節點RPC請求的瓶頸。部署多個節點負載均衡時,由于每個節點拿到最新的塊數據并存入leveldb的時間不一樣,很容易造成在某一個時間點,訪問不同的節點拿最新的交易數據有不同的返回。基于此,我們做了一個設想,將數據庫功能從節點中獨立出來,將數據庫做成網絡數據庫(如果需要部署多個數據庫則從同一個源頭同步,保證數據庫內數據的統一)。并將RPC服務和執行智能合約的虛擬機構造成一個輕型節點提供接口服務。簡單的來說就是將Neo節點的存儲部分改為網絡存儲,并且可以通過輕型節點直接找網絡數據庫執行InvokeScript。

項目介紹

       由于數據處理有事務化的要求,因此需要的數據庫必須要有快照的功能。Neo節點使用的LevelDB因為采用LSM存儲方式,提供讀取的快照非常容易,代價也很小。而關系型數據庫支持事物化的程度就差了一些,我們本來想使用的mongodb也因為讀快照功能的限制被舍棄。最終,我們選擇了以rocksdb(rocksdb是facebook基于leveldb改進的一個版本,讀寫性能都有明顯的提升)為基礎開發本地數據庫,并加上網絡層實現一個網絡數據庫。

        節點在獲取數據存入leveldb的時候,是有一個分類的。存儲塊數聚,utxo數據,合約數據等不同的數據時會追加不同的修正前綴,以示區分。這個是使用leveldb的一個自然需求,kv數據庫是一個字典,我們存進去的東西,從邏輯上是分為諾干個字典的。現在我們將這個需求直接在數據庫層面提供,增加了一個表的概念。用戶在讀寫時,就可以更精準的讀取某張表內某個key的值。此外,數據庫的存儲還模仿了區塊鏈的結構,在每次寫操作的時候都會加入一個高度,模擬塊的概念,方便和區塊鏈中的塊高度對應。這樣接口服務器就可以較容易的用塊高度來做索引,獲取對應的快照執行數據。

        我們將節點分析存儲每個塊數據進入leveldb的操作都視為一個集合,可以確認的是不同的leveldb執行這個集合都必然能存儲進相同的數據。基于此,我們將網絡數據庫的讀寫分離。將主節點每個塊存儲進leveldb的操作都記錄下來,網絡數據庫只要獲取這些塊的操作集,自己執行一遍就同步到了數據。有了這些網絡數據庫之后,我們的輕型節點就可以從這些數據庫中獲取數據并返回給調用者。

        目前這個項目還是屬于一個探索研發階段,這里附上這個項目的github地址:https://github.com/NewEconoLab/NEL.LightDB

        下圖是項目中包含的所有的工程,NEL.Peer.*是網絡層;SDK是為了方便客戶端接入而包裝的方法;SimpleDB是沒有附加網絡層的本地數據庫;API是實現了簡單RPC接口的輕型節點;Server是網絡數據庫。

         如何進行LightDB項目的探索和開發

流程演示       

        我們首先編譯Server項目,打開config.json進行配置。

        如何進行LightDB項目的探索和開發

        port是訪問數據庫的端口;     bindAddress是允許訪問的地址;    server_storage_path是數據庫數據存放于本地的路徑;    Conn_Track,DataBase_Track,Coll_Track 這三個是mongodb的鏈接和庫名,我們暫時將每個塊應該怎么操作數據庫的集合存放在了我們NEL的mongodb中進行管理,目前開放性不是很高。暫時這個樣子,后續可能會將這些操作集用另一種方式提供出來,方便使用。

        配置完成后,啟動

        如何進行LightDB項目的探索和開發

        網絡數據庫正在快速的恢復數據。

        此時再編譯API工程,配置config.json

         如何進行LightDB項目的探索和開發

        port是訪問api端口,bindAddress是Api允許訪問的ip;dbServerPort是數據庫訪問的端口,dbServerAddress是數據庫所在的ip;dbServerPath是數據庫開啟的actor的路徑。(確保鏈接的數據庫已經同步到最近的數據高度)

        啟動api服務

        如何進行LightDB項目的探索和開發

        此時我們借助PostMan工具來通過api工程獲取數據(分別附上獲取塊數據,和模擬執行合約的例子)

        如何進行LightDB項目的探索和開發

        如何進行LightDB項目的探索和開發

關于如何進行LightDB項目的探索和開發就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

惠东县| 淮南市| 玛多县| 涟水县| 中牟县| 民勤县| 万州区| 陆河县| 鄄城县| 新野县| 蛟河市| 巴彦淖尔市| 彩票| 丘北县| 怀远县| 道真| 沾化县| 马边| 衢州市| 灌阳县| 康平县| 北碚区| 湾仔区| 淮安市| 宝应县| 长寿区| 佛山市| 双桥区| 湘潭县| 荣昌县| 枝江市| 如东县| 进贤县| 专栏| 泾源县| 石渠县| 湘乡市| 图片| 云梦县| 龙岩市| 乌兰县|