火星链 火星链
Ctrl+D收藏火星链
首页 > 加密货币 > 正文

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

作者:

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

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

进一步优化数据库结构

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

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

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

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

按桶(bucket)来细分数据库

L2协议Milkomeda将允许用户直接从任何Cardano钱包使用EVM合约:金色财经报道,为非EVM兼容链提供EVM功能的L2网络协议Milkomeda首席执行官Sebastien Guillemot表示,将很快推出一项功能,允许Cardano用户直接从任何Cardano钱包使用EVM合约。Milkomeda很快就会为所有EVM用户提供质押奖励,包括智能合约开发人员,基于Milkomeda构建的Cardano产品的质押奖励将每5天自动支付一次。

2022年10月份,Milkomeda完成310万美元融资,Archetype领投。[2023/3/31 13:37:23]

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

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

中宣部出版局副局长杨芳:推动元宇宙、数字孪生、云游戏等新业态拓展应用:金色财经报道,中宣部出版局副局长杨芳在中国游戏产业年会上的致辞称,今年中宣部将实施“网络出版技术创新发展计划”,重点推动虚拟现实、感知交互、游戏引擎、动作捕捉等网络游戏底层技术创新突破,推动元宇宙、数字孪生、云游戏等新业态拓展应用。[2023/2/14 12:05:55]

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

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

以太坊Layer 2总锁仓量跌至48.3亿美元,7日跌幅2.99%:9月25日消息,据L2BEAT数据显示,当前以太坊Layer2总锁仓量跌至48.3亿美元,7日跌幅2.99%。其中,锁仓量前五分别为:Arbitrum(25.2亿美元,7日跌幅2.48%);Optimism(14.0亿美元,7日跌幅1.50%);dYdX(4.12亿美元,7日跌幅11.02%);Loopring(1.42亿美元,7日跌幅8.22%);MetisAndromeda(1.18亿美元,7日跌幅0.72%)。[2022/9/25 7:20:07]

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

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

全国首张数字人民币社保卡亮相:金色财经报道,在人民银行数字货币研究所、北京人力资源和社会保障局的共同指导下,中国邮政储蓄银行北京分行联合多家单位,共同启动北京民生一卡通叠加数字人民币硬件钱包研发,首张样卡已制作完成,这将是全国首批叠加数字人民币硬件钱包的第三代社保卡。(北京日报)[2022/8/22 12:40:34]

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

标签:GETETHGETHTURtogetherbnb可以和谁嘿嘿eth官网查询地址2getherTURBO币未来价值

加密货币热门资讯
YSEC:塞浦路斯证券交易委员会拥抱区块链 但加密货币监管仍不明确

塞浦路斯证券交易委员会(CySEC)最近发布了一份报告,讨论了其创新中心正在进行的活动。该创新中心是一个合作实体,于2018年10月启动,作为CySEC与金融科技和监管科技部门实体之间的交流平台.

1900/1/1 0:00:00
ETH:2.25早间行情:BTC大盘急速杀跌 反弹量能偏弱需谨慎

嘉楠科技今年股价涨幅达318.04% 亿邦国际涨幅达82.21%:据统计,截至2月19日,比特币矿机公司嘉楠科技今年股价涨幅为318.04%,亿邦国际今年股价涨幅也达到82.21%.

1900/1/1 0:00:00
MAKE:我们常说的市值究竟是什么?

我们在很多区块链大V以及项目方的白皮书里都看到过市值这两个字眼,那究竟什么是市值,它的意义是什么呢?我们今天一起来看看!市值它的原意,指的是公司资产的市场价值.

1900/1/1 0:00:00
DEFI:金色观察 | 一招“攻击”15秒内获利超36万美元 多个DeFi明星项目卷入

也许这个世界终归是属于聪明人的。近日DeFi世界就遭到了聪明人的“攻击”(exploit)。 2月16日,DeFi项目bZx被某个人或者团队利用规则上的漏洞,在DeFi项目间腾挪套利,

1900/1/1 0:00:00
ETH:2.26早间行情:行情暂时止跌未企稳 勿盲目进场抄底

AAVE跌破500美元关口 日内跌幅为2.23%:火币全球站数据显示,AAVE短线下跌,跌破500美元关口,现报499.9666美元,日内跌幅达到2.23%,行情波动较大,请做好风险控制.

1900/1/1 0:00:00
BGA:震荡行情下耐心成为最大的考验 勿被市场情绪带着走

今日上午有鲸鱼账户称自己的加密货币账户被黑客攻击,被盗价值1500万美元的BTC和3000万美元的BCH,且该消息被币印创始人签名验证过属实.

1900/1/1 0:00:00