几个月以前,我加入了 Turbo-Geth 团队,开始主动给 Trubo-Geth 客户端贡献代码。Turbo-Geth 客户端是 Geth 客户端的一个另类版本(当前仍在开发),其目标是做得比原有的客户端运行速度更快、更高效。那么 Turbo-Geth 实现这个目标的办法包括下面几项:
进一步优化数据库结构
在需要与状态数据交互的场合,减少对数据库的读、写操作
优化状态树操作的效率(有可能需要改变现有状态树的数据结构)
在本文中,我会着重指出 Turbo-Geth 和 Geth 在数据库上的不同之处。主要的区别在于:
不同的数据库(使用 Bolt,而非 LevelDB)
按桶(bucket)来细分数据库
Sinohope Staking今日宣布其首个ATOM节点已完成:金色财经报道,新火科技(1611.HK)旗下去中心化Staking技术支持服务——Sinohope Staking今日宣布其首个ATOM节点已完成,并已经成为验证节点成功出块。预计将陆续开通ETH等多个公链的Staking业务,其团队成员和商务BD也在招募当中。[2023/2/1 11:41:22]
那么,本文的主要内容也就跟这两点相关。
Bolt 和 LevelDB 其实非常相似,两者都是 “键-值对”(key-value)存储,设计目标都是为不需要完整数据库服务器的项目提供简单、快捷且可靠的数据库。Geth 选用的数据库是 LevelDB,而 Turbo-Geth 选用的是 Bolt。
但两者也有一个关键区别:组织数据的方式。LevelDB 是一个 LSM (Log-Structured Merged-Tree)数据库,而 Bolt 使用 bucket,而且每一个 bucket 都包含着一个 B+- Tree 结构。我们可以把一个 bucket 当作 “大数据库里的一个小数据库”。
数字资产数据提供商 Amberdata 已支持 Avalanche:7月28日消息,数字资产数据提供商 Amberdata 已支持 Avalanche,使得机构投资者可以查看 Avalanche 上在钱包、资产和协议的事实数据,确定协议中的资产和流动性池的表现以及管理他们自己的资产。[2022/7/28 2:42:50]
那么,两者之间的主要区别在于:LSM 数据库是为重度添加操作(appending)和范围扫描操作(range scanning)优化的,而不是为随机读取的性能优化的;为了提供一致性,它不允许同时对数据库执行读、写操作。也是出于性能考虑,这种数据库是没有实现原子性的。Bolt 则反之,插入操作(inserting)速度较慢,但是随机读取速度较快,实现了原子性,而且可以同时对数据库读写。
我们再稍微解释一下原子性:
Otherside已开启首次负载测试,超过2000用户在线:7月7日消息,YugaLabs元宇宙项目Otherside已于美国东部时间7月6日12:00开启首次负载测试,目前超过2000用户在线。
据悉,用户需要连接一个至少持有1枚Otherdeed的钱包。同时测试容量不设总数,最开始将从3000名玩家开始,每2-3分钟增加1000名玩家。[2022/7/7 1:56:24]
原子性:“原子” 意味着不可分割。假设现在我们要给一个数据库存储多个哈希值,而其中一个在插入数据库时失败了,如果此时所有哈希值的操作都会同时撤销,这就叫做原子性。Turbo-Geth 就有这样的特性,只有所有哈希值的插入操作都成功时,这个操作才能成功。而没有实现原子性的数据库(比如 LevelDB)则意味着,必须使用一个 workaround 以安全地将数据插入数据库。换句话来说,在这个点上,我们觉得 Bolt 更好,因为他在给数据库添加数据时更安全。
顶级豪车品牌宾利宣布进军NFT市场,将于9月发布限量版NFT:6月23日消息,顶级豪华汽车品牌宾利在社交媒体上发文宣布进军 NFT 市场,计划于今年 9 月发布其基于Polygon网络的限量版(208 份)NFT作品。[2022/6/23 1:25:21]
如前所述,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。
标签:ETHGETHGETTUReth本科申请条件togetherbnb手游下载最新版togetherbnb更新到哪里了AAG Ventures
显然,在过去的三年中,加密货币支付正变得越来越流行,尤其用于发展中国家的点对点支付。然而,同样明显的是,无论大商家还是小商家,都不想处理接受加密货币作为支付方式面临的两个主要障碍:波动性和安全性.
1900/1/1 0:00:00过去十年表现最好的资产显然属于比特币。比特币在N多次被宣告死亡之后,逐步被越来越多人接受,慢慢进入主流人群。然而,却有很多人无视比特币的诸多优点,长久以来一直持续批判比特币.
1900/1/1 0:00:00对比特币减半行情的预期点燃了加密货币市场的行情。在2020年,部分隐私币同样迎来了减半。零币Zcoin作为其中重要的一支,不可忽视.
1900/1/1 0:00:00据AMBCrypto 2月16日报道,以太坊的交易量达到了自2019年7月以来的最高水平。自今年年初以来,以太坊的价格已经翻了一番,截至发稿时达到了272美元.
1900/1/1 0:00:00中央经济工作会议提出,着力推动高质量发展,“要大力发展数字经济”。数字经济具有技术创新、产业融合、绿色发展、信息共享等显著特征,发展壮大数字经济与我国经济社会现阶段的发展规律相适应,亦是推动高质.
1900/1/1 0:00:00这是一篇对如何实现去中心化的深度思考和解决方案,本文的讨论对象是 dapp 产品,但它所提出的四大核心思想同样适用于 DAO.
1900/1/1 0:00:00