亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

如何進行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

廊坊市| 万源市| 衡阳市| 富锦市| 霍城县| 台安县| 长海县| 舒城县| 滁州市| 汤原县| 景洪市| 九龙县| 克山县| 南丹县| 稷山县| 大足县| 甘孜| 宁波市| 舟曲县| 兴业县| 博客| 霍邱县| 上虞市| 连州市| 普格县| 延庆县| 张家港市| 舒城县| 双辽市| 阳新县| 武功县| 高雄市| 应用必备| 五大连池市| 香格里拉县| 饶阳县| 凤庆县| 招远市| 读书| 景德镇市| 甘南县|