以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads
首頁 > MEXC > Info

ETH:引介:Turbo-Geth 客戶端:數據庫改進

Author:

Time:1900/1/1 0:00:00

幾個月以前,我加入了 Turbo-Geth 團隊,開始主動給 Trubo-Geth 客戶端貢獻代碼。Turbo-Geth 客戶端是 Geth 客戶端的一個另類版本(當前仍在開發),其目標是做得比原有的客戶端運行速度更快、更高效。那么 Turbo-Geth 實現這個目標的辦法包括下面幾項:

進一步優化數據庫結構

在需要與狀態數據交互的場合,減少對數據庫的讀、寫操作

優化狀態樹操作的效率(有可能需要改變現有狀態樹的數據結構)

在本文中,我會著重指出 Turbo-Geth 和 Geth 在數據庫上的不同之處。主要的區別在于:

不同的數據庫(使用 Bolt,而非 LevelDB)

按桶(bucket)來細分數據庫

Argo Blockchain7月開采了129枚比特幣:金色財經報道,比特幣礦企Argo Blockchain發布7月運營更新,7月開采129枚BTC或比特幣等價物,平均每天開采4.2枚BTC,較上個月每天開采4.6枚BTC減少11%,減少原因為Helios因天氣相關的停電和現場施工而導致停機時間增加。此外,Helios的業務參與了經濟縮減,減少了比特幣的產量,但產生了額外的現金收益。7月,Argo挖礦收入為387萬美元,與上個月類似。截止7月31日,Argo持有46枚BTC。

7月,Argo在魁北克工廠安裝了1242臺Block Miner礦機,總算力達到約2.6EH/s,預計未來幾個月內接收并安裝剩余1628臺礦機。[2023/8/4 16:18:17]

那么,本文的主要內容也就跟這兩點相關。

Bolt 和 LevelDB 其實非常相似,兩者都是 “鍵-值對”(key-value)存儲,設計目標都是為不需要完整數據庫服務器的項目提供簡單、快捷且可靠的數據庫。Geth 選用的數據庫是 LevelDB,而 Turbo-Geth 選用的是 Bolt。

賈斯汀·比伯的NFT賬面凈虧損達到124萬美元:金色財經報道,賈斯汀·比伯(Justin Bieber)去年斥資130萬美元購買了Bored Ape NFT,目前價值僅約59,000美元。當時該行業正掀起名人代言熱潮。這位全球流行歌星向BAYC投資了500ETH,相當于130萬美元。18個月后,他的賬面凈虧損達到124萬美元。[2023/7/5 22:18:05]

但兩者也有一個關鍵區別:組織數據的方式。LevelDB 是一個 LSM (Log-Structured Merged-Tree)數據庫,而 Bolt 使用 bucket,而且每一個 bucket 都包含著一個 B+- Tree 結構。我們可以把一個 bucket 當作 “大數據庫里的一個小數據庫”。

那么,兩者之間的主要區別在于:LSM 數據庫是為重度添加操作(appending)和范圍掃描操作(range scanning)優化的,而不是為隨機讀取的性能優化的;為了提供一致性,它不允許同時對數據庫執行讀、寫操作。也是出于性能考慮,這種數據庫是沒有實現原子性的。Bolt 則反之,插入操作(inserting)速度較慢,但是隨機讀取速度較快,實現了原子性,而且可以同時對數據庫讀寫。

香港Web3.0協會創始成員包括中國移動、招商輪船等:金色財經報道,在香港 Web3.0 協會成立典禮上,出席嘉賓包括香港特別行政區行政長官李家超、香港立法會主席梁君彥、香港保安局長鄧炳強等。創始成員包括中國移動、招商輪船、華為、香港科技大學。[2023/4/11 13:56:43]

我們再稍微解釋一下原子性:

原子性:“原子” 意味著不可分割。假設現在我們要給一個數據庫存儲多個哈希值,而其中一個在插入數據庫時失敗了,如果此時所有哈希值的操作都會同時撤銷,這就叫做原子性。Turbo-Geth 就有這樣的特性,只有所有哈希值的插入操作都成功時,這個操作才能成功。而沒有實現原子性的數據庫(比如 LevelDB)則意味著,必須使用一個 workaround 以安全地將數據插入數據庫。換句話來說,在這個點上,我們覺得 Bolt 更好,因為他在給數據庫添加數據時更安全。

Shiba Inu:巨鯨在一筆交易中購買了3.37萬億SHIB:金色財經報道,一個新的巨鯨在一筆交易中購買了3.37萬億枚SHIB,價值約4276萬美元。根據Etherscan.io上的數據,該巨鯨大約在一天前出現,就買入了數萬億的SHIB。目前關于相關錢包所有者的信息知之甚少。[2022/9/8 13:16:59]

如前所述,Turbo-Geth 是切分成多個 bucket 的。每個 bucket 都是大數據庫中的一個小數據,各自包含了一個 B+-Tree 結構。

下面便是 Turbo-Geth 數據庫在區塊高度 9,346,492 處的切分:

- Turbo-Geth 的 Archive 節點的數據區分(區塊高度為 9,346,492)-

Geth 客戶端的 Archive 大小(區塊高度 9346492): 3.7 TBParity 客戶端的 Archive 大小(區塊高度 9346492): 3.6 TBTurbo-Geth 客戶端的 Archive 大小(區塊高度 9346492): 652.62 GB每一個部分都存儲在一個 bucket 里面。其中主要部分的簡要解釋如下:

原象(preimage):哈希值與地址之間的管理,以及存儲位置哈希值與存儲位置之間的關聯

收據(receipt):交易收據

合約存儲內容的歷史(History of Storage):合約存儲內容的變更歷史

賬戶歷史(History of Accounts):賬戶的變更歷史

區塊頭:每個區塊的區塊頭

區塊體:每個區塊的區塊體

合約存儲內容(Contract Storage):就是合約存儲內容

ChangeSet:數據庫變更歷史

賬戶:賬戶

使用這么多 bucket ,是為了讓構成大數據庫的各 B+-Tree 樹高不至于太高,這樣跟數據庫的交互就會比較容易。換句話說,這是在使用多個 bucket 來提高讀取數據庫的性能。

在切換到 Bolt 之后,Turbo-Geth 在處理隨機鍵(比如交易哈希值)時遇到了一些問題,因為 Bolt 會在提交數據之前對這些鍵進行排序(sort),又因為這些哈希值都是隨機的,而且數量很多,所以產生了大量的排序需求,然后導致大量的寫入放大現象(write amplification,實際寫入的物理數據量是寫入數據量的多倍)。而 BadgerDB 使用 log-structured-merge(LSM)模式,似乎是一個更好的選擇。這個問題仍在研究當中,不過,我們已經實現了一個 workaround 來解決這個問題。

這里有一個圖表,顯示了 BadgerDB 和 BoltDB 在整體性能上的對比(感謝 Alexey Akhunov 制圖):

Turbo-Geth 客戶端通過下列(數據庫)手段來優化以太坊的性能:

使用多個 bucket,以更迅速地檢索某些數據片

使用 B+-Tree 而非 LSM

如果你想給我們捐贈,可以通過 Gitcoin。

Tags:ETHGETGETHTURethical和ethnic區別Chicken Nugget Cointogetherbnb手游下載Metaverse Future

MEXC
CRYPTO:比特幣價格牛市可能會持續1000天

比特幣在2020年的價值要超過其存在的任何一年。歷史數據表明,其價格還將繼續攀升19個月。基金合作伙伴James Todaro在2月21日上傳到Twitter的數據顯示,就交易量加權平均價格而言.

1900/1/1 0:00:00
BTC:金色硬核 | 一文讀懂DeFi上的閃電貸(附如何利用閃電貸套利)

金色財經近期推出金色硬核(Hardcore)欄目,為讀者提供熱門項目介紹或者深度解讀。2月16日,bZx被爆遭到“攻擊”,“攻擊者”操縱多個DeFi項目上的代幣價格,從而實現15秒內套利36萬美.

1900/1/1 0:00:00
ITG:多頭再次被打住 ETH多頭趨勢更強

中幣(ZB)市場研究報告:YFI多頭需突破阻力反彈才能持續上漲:據中幣(ZB)市場研究報告指出,本月17日.

1900/1/1 0:00:00
以太坊:Vitalik Buterin:以太坊PoS網絡今年上線 第0階段僅有少量驗證者

以太坊聯合創始人Vitalik Buterin在2月19日的斯坦福區塊鏈會議上接受采訪時,討論了以太坊2.0的計劃.

1900/1/1 0:00:00
MAC:金色趨勢丨BTC持續消磨 或將醞釀新一輪行情?

時事新聞 金色財經報道,中金公司(CICC)發布2020年初至今全球大類資產表現統計圖表。據圖表顯示,今年收益率前三的資產分別是:比特幣、FAAMNG和黃金;收益率倒數前三的資產分別是:天然氣、.

1900/1/1 0:00:00
EFI:金色薦讀丨閃貸:為什么閃貸攻擊會是新常態?

(奧維的教堂,梵高) 前言:bZx事件發生之后,加密社區開始重視閃貸攻擊。本文作者Haseeb認為閃貸用于套利不是其最大的用例,它最大的用例在于釋放了閃貸攻擊。閃貸攻擊無法消失,且很難阻止.

1900/1/1 0:00:00
ads