木星链 木星链
Ctrl+D收藏木星链
首页 > FTT > 正文

GET:引介:Turbo-Geth 客户端:数据库改进

作者:

时间:1900/1/1 0:00:00

几个月以前,我加入了 Turbo-Geth 团队,开始主动给 Trubo-Geth 客户端贡献代码。Turbo-Geth 客户端是 Geth 客户端的一个另类版本(当前仍在开发),其目标是做得比原有的客户端运行速度更快、更高效。那么 Turbo-Geth 实现这个目标的办法包括下面几项:

进一步优化数据库结构

在需要与状态数据交互的场合,减少对数据库的读、写操作

优化状态树操作的效率(有可能需要改变现有状态树的数据结构)

在本文中,我会着重指出 Turbo-Geth 和 Geth 在数据库上的不同之处。主要的区别在于:

不同的数据库(使用 Bolt,而非 LevelDB)

按桶(bucket)来细分数据库

Delysium发布AI驱动的Web3操作系统Lucy:3月10日消息,Delysium 发布由 AI 驱动的 Web3 操作系统 Lucy。用户只需和 Lucy 进行简单对话,即可操作各种加密应用,比如完成链上转账、查看加密资产、学习加密知识、总结项目信息、RUG 地址监测等。[2023/3/10 12:54:35]

那么,本文的主要内容也就跟这两点相关。

Bolt 和 LevelDB 其实非常相似,两者都是 “键-值对”(key-value)存储,设计目标都是为不需要完整数据库服务器的项目提供简单、快捷且可靠的数据库。Geth 选用的数据库是 LevelDB,而 Turbo-Geth 选用的是 Bolt。

但两者也有一个关键区别:组织数据的方式。LevelDB 是一个 LSM (Log-Structured Merged-Tree)数据库,而 Bolt 使用 bucket,而且每一个 bucket 都包含着一个 B+- Tree 结构。我们可以把一个 bucket 当作 “大数据库里的一个小数据库”。

PeckShield:Web3项目TRQ疑似被黑客攻击:金色财经报道,PeckShield监测显示, Web3项目TRQ疑似被黑客攻击,导致$TRQ价格大幅下跌。对此,官方放在社交媒体上称,感谢社区的大力支持。请耐心等待,由于一些特殊原因,交易已经暂停。官方正在处理中。请耐心等待官方进一步公告。[2022/12/11 21:36:45]

那么,两者之间的主要区别在于:LSM 数据库是为重度添加操作(appending)和范围扫描操作(range scanning)优化的,而不是为随机读取的性能优化的;为了提供一致性,它不允许同时对数据库执行读、写操作。也是出于性能考虑,这种数据库是没有实现原子性的。Bolt 则反之,插入操作(inserting)速度较慢,但是随机读取速度较快,实现了原子性,而且可以同时对数据库读写。

李家超:推动市场提供更多以人民币计价投资工具:10月19日消息,香港特区行政长官李家超宣读上任后首份施政报告提及,强化最大离岸人民币业务中心优势;李家超提到香港目前处理全球约75%的离岸人民币结算,政府会推动市场提供更多以人民币计价投资工具,以及稳妥高效的汇兑、汇率风险和利率风险管理等财资服务,并优化市场基建。(金十)[2022/10/19 17:32:37]

我们再稍微解释一下原子性:

原子性:“原子” 意味着不可分割。假设现在我们要给一个数据库存储多个哈希值,而其中一个在插入数据库时失败了,如果此时所有哈希值的操作都会同时撤销,这就叫做原子性。Turbo-Geth 就有这样的特性,只有所有哈希值的插入操作都成功时,这个操作才能成功。而没有实现原子性的数据库(比如 LevelDB)则意味着,必须使用一个 workaround 以安全地将数据插入数据库。换句话来说,在这个点上,我们觉得 Bolt 更好,因为他在给数据库添加数据时更安全。

Web3游戏开发商Flowstate Games完成200万美元融资:10月11日消息,Web3游戏开发商Flowstate Games宣布完成200万美元Pre-Seed轮融资,Play Ventures Future Fund领投,Web3基础设施开发公司Equilibrium、Elite Game Developers创始人Joakim Achrén及其天使投资团队参投。

得益于这笔最新融资,该公司将推出首款Web3汽车格斗游戏Smash Stars: Thunderdome,玩家可以用车载大炮击落敌人,每一款都将以NFT形式在游戏中体现,车辆将能在二级市场上进行交易。

此外,Flowstate Games还与Immutable X达成合作,旨在解决NFT交易费用、安全性和碳中和等问题。(Venturebeat)[2022/10/11 10:30:28]

如前所述,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。

标签:GETTURETHGETHGETXTURBOSiEthereumtogetherbnb礼物好感度

FTT热门资讯
以太坊:超43%以太坊地址盈利 研究员看好以太坊成为新避险工具

根据加密货币分析公司IntoTheBlock的数据,随着以太坊现货和衍生品市场出现爆炸性增长,有43%的ETH地址在盈利.

1900/1/1 0:00:00
BTC:金色趋势丨BTC大幅回撤是洗盘还是趋势结束?

BTC 金色财经报道,美国证券交易委员会(SEC)今日再次拒绝了纽约证券交易所Arca提交的拟议规则更改,该规则更改本应允许Wilshire Phoenix的比特币和美国国债ETF上市和交易.

1900/1/1 0:00:00
比特币:历史数据显示VIX上涨可预测比特币底部

过去几周比特币表现不佳,价格自关键的10,500美元受阻以来,一直表现疲软。目前分析师对于比特币的走势观点有一定分歧,但一个非正统指标表明比特币和其余加密货币已经找到或非常接近底部,价格即将回升.

1900/1/1 0:00:00
区块链:为什么社区沟通对区块链项目来说至关重要?

在Facebook 最近公布的2030年战略中,首席执行官马克·扎克伯格(Mark Zuckerberg)对其Libra项目提出了一些怀疑和批评,因为该公司对其潜在的全球影响力遭到了强烈批评.

1900/1/1 0:00:00
数字货币:金色深度丨从“数字美元”官网觇眎美国央行数字货币野心

金色财经  区块链2月26日讯  前美国商品期货交易委员会(CFTC)主席克里斯托弗?吉安卡洛(Christopher  Giancarlo)在其个人推特上正式发布.

1900/1/1 0:00:00
CBD:越发达的经济体 其央行对数字货币态度越谨慎

自从央行数字货币的概念兴起以来,有近80%的中央银行都正在以某种形式开发中央银行数字货币(CBDC).

1900/1/1 0:00:00