真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何進(jìn)行LightDB項(xiàng)目的探索和開發(fā)

這篇文章給大家介紹如何進(jìn)行LightDB項(xiàng)目的探索和開發(fā),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)通渭免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

前言

        NEO節(jié)點(diǎn)是一個(gè)功能非常復(fù)雜的項(xiàng)目,它包含了P2P網(wǎng)絡(luò),RPC接口,數(shù)據(jù)庫讀寫,執(zhí)行智能合約等功能。不同的功能相互協(xié)作,才能確保節(jié)點(diǎn)及時(shí)同步數(shù)據(jù),并且提供準(zhǔn)確的數(shù)據(jù)給使用者。節(jié)點(diǎn)通過P2P網(wǎng)絡(luò),請求和獲得塊數(shù)據(jù),并將之驗(yàn)證分析存入leveldb數(shù)據(jù)庫。當(dāng)此節(jié)點(diǎn)正確同步到鏈上最新高度時(shí),就意味著節(jié)點(diǎn)保存了一份鏈上數(shù)據(jù)可以供用戶使用。

       作為開發(fā)者,對于節(jié)點(diǎn)的使用需求第一個(gè)是通過節(jié)點(diǎn)發(fā)送交易上鏈,第二個(gè)是通過RPC服務(wù)獲取節(jié)點(diǎn)中的數(shù)據(jù)或者模擬執(zhí)行合約。在實(shí)際使用場景中,獲取數(shù)據(jù)或模擬執(zhí)行合約的需求會更大一點(diǎn),單個(gè)節(jié)點(diǎn)有時(shí)會扛不住請求的壓力。因?yàn)镽PC服務(wù)和數(shù)據(jù)庫存在一個(gè)進(jìn)程中,所以不存在開啟多個(gè)數(shù)據(jù)庫負(fù)載均衡提供數(shù)據(jù)給接口服務(wù)器的情況,也不存在啟動多個(gè)接口服務(wù)器從同一個(gè)數(shù)據(jù)庫中獲取數(shù)據(jù)的情況。

        我們在開發(fā)一些dapp時(shí),會遇到節(jié)點(diǎn)RPC請求的瓶頸。部署多個(gè)節(jié)點(diǎn)負(fù)載均衡時(shí),由于每個(gè)節(jié)點(diǎn)拿到最新的塊數(shù)據(jù)并存入leveldb的時(shí)間不一樣,很容易造成在某一個(gè)時(shí)間點(diǎn),訪問不同的節(jié)點(diǎn)拿最新的交易數(shù)據(jù)有不同的返回?;诖耍覀冏隽艘粋€(gè)設(shè)想,將數(shù)據(jù)庫功能從節(jié)點(diǎn)中獨(dú)立出來,將數(shù)據(jù)庫做成網(wǎng)絡(luò)數(shù)據(jù)庫(如果需要部署多個(gè)數(shù)據(jù)庫則從同一個(gè)源頭同步,保證數(shù)據(jù)庫內(nèi)數(shù)據(jù)的統(tǒng)一)。并將RPC服務(wù)和執(zhí)行智能合約的虛擬機(jī)構(gòu)造成一個(gè)輕型節(jié)點(diǎn)提供接口服務(wù)。簡單的來說就是將Neo節(jié)點(diǎn)的存儲部分改為網(wǎng)絡(luò)存儲,并且可以通過輕型節(jié)點(diǎn)直接找網(wǎng)絡(luò)數(shù)據(jù)庫執(zhí)行InvokeScript。

項(xiàng)目介紹

       由于數(shù)據(jù)處理有事務(wù)化的要求,因此需要的數(shù)據(jù)庫必須要有快照的功能。Neo節(jié)點(diǎn)使用的LevelDB因?yàn)椴捎肔SM存儲方式,提供讀取的快照非常容易,代價(jià)也很小。而關(guān)系型數(shù)據(jù)庫支持事物化的程度就差了一些,我們本來想使用的MongoDB也因?yàn)樽x快照功能的限制被舍棄。最終,我們選擇了以rocksdb(rocksdb是facebook基于leveldb改進(jìn)的一個(gè)版本,讀寫性能都有明顯的提升)為基礎(chǔ)開發(fā)本地?cái)?shù)據(jù)庫,并加上網(wǎng)絡(luò)層實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)數(shù)據(jù)庫。

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

        我們將節(jié)點(diǎn)分析存儲每個(gè)塊數(shù)據(jù)進(jìn)入leveldb的操作都視為一個(gè)集合,可以確認(rèn)的是不同的leveldb執(zhí)行這個(gè)集合都必然能存儲進(jìn)相同的數(shù)據(jù)?;诖?,我們將網(wǎng)絡(luò)數(shù)據(jù)庫的讀寫分離。將主節(jié)點(diǎn)每個(gè)塊存儲進(jìn)leveldb的操作都記錄下來,網(wǎng)絡(luò)數(shù)據(jù)庫只要獲取這些塊的操作集,自己執(zhí)行一遍就同步到了數(shù)據(jù)。有了這些網(wǎng)絡(luò)數(shù)據(jù)庫之后,我們的輕型節(jié)點(diǎn)就可以從這些數(shù)據(jù)庫中獲取數(shù)據(jù)并返回給調(diào)用者。

        目前這個(gè)項(xiàng)目還是屬于一個(gè)探索研發(fā)階段,這里附上這個(gè)項(xiàng)目的github地址:https://github.com/NewEconoLab/NEL.LightDB

        下圖是項(xiàng)目中包含的所有的工程,NEL.Peer.*是網(wǎng)絡(luò)層;SDK是為了方便客戶端接入而包裝的方法;SimpleDB是沒有附加網(wǎng)絡(luò)層的本地?cái)?shù)據(jù)庫;API是實(shí)現(xiàn)了簡單RPC接口的輕型節(jié)點(diǎn);Server是網(wǎng)絡(luò)數(shù)據(jù)庫。

         如何進(jìn)行LightDB項(xiàng)目的探索和開發(fā)

流程演示       

        我們首先編譯Server項(xiàng)目,打開config.json進(jìn)行配置。

        如何進(jìn)行LightDB項(xiàng)目的探索和開發(fā)

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

        配置完成后,啟動

        如何進(jìn)行LightDB項(xiàng)目的探索和開發(fā)

        網(wǎng)絡(luò)數(shù)據(jù)庫正在快速的恢復(fù)數(shù)據(jù)。

        此時(shí)再編譯API工程,配置config.json

         如何進(jìn)行LightDB項(xiàng)目的探索和開發(fā)

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

        啟動api服務(wù)

        如何進(jìn)行LightDB項(xiàng)目的探索和開發(fā)

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

        如何進(jìn)行LightDB項(xiàng)目的探索和開發(fā)

        如何進(jìn)行LightDB項(xiàng)目的探索和開發(fā)

關(guān)于如何進(jìn)行LightDB項(xiàng)目的探索和開發(fā)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


文章標(biāo)題:如何進(jìn)行LightDB項(xiàng)目的探索和開發(fā)
轉(zhuǎn)載源于:http://weahome.cn/article/jcpcji.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部