宇宙链 宇宙链
Ctrl+D收藏宇宙链

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

作者:

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

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

进一步优化数据库结构

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

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

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

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

按桶(bucket)来细分数据库

三体宇宙控股股东将发生变更,与游族网络“脱钩:金色财经消息,2月6日,记者获悉,《三体》内容开发及商业衍生的独家版权方三体宇宙文化发展有限公司将有重大股权变更,已成立新公司计划收购三体宇宙股权,目标是吸引更多优质投资人共建三体IP。

一位接近三体宇宙人士透露,2022年已成立成都司元企业管理公司,将收购现有三体宇宙公司股权并成为公司大股东,预计持股比例将达到70%。三体宇宙内部管理层和公司架构不会随之发生变化。据记者了解,在成都司元对三体宇宙的收购完成后,三体宇宙股东中将不再有游族关联公司。(澎湃)[2023/2/7 11:51:28]

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

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

某Smartmoney钱包地址1小时前将约313万枚DYDX转入币安:金色财经报道,据Lookonchain监测,1小时前,某DYDX Smartmoney钱包地址将3,132,004枚DYDX转移至币安,价值约430万美元。[2022/12/21 21:57:42]

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

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

GameStop钱包增加对Immutable X的原生支持:8月9日消息,GameStop钱包发布新版本,增加对Immutable X的原生支持。7月份,GameStop钱包开始支持Immutable X的市场可以通过GameStop钱包进行交易,但此前无法直接在钱包内进行交互。[2022/8/9 12:12:37]

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

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

SBI投资Digital Asset的 \"智能日元 \"合资项目:金色财经报道,SBI已经投资了Digital Asset,目的是在日本创建一个可编程货币的合资公司。该合资公司预计将于2022年正式启动,并在日本和东亚市场内以平等的所有权进行运作。新创建的 \"智能日元 \"计划将利用数字资产的跨区块链智能合约,并将其应用于可编程货币--一种数字货币,当预定的条件得到满足时,它已被编码为在各方之间移动。该技术是作为现有支付基础设施的覆盖层实施的,能够自动执行基于条件的支付或奖励方案。(finextra)[2022/5/31 3:51:44]

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

标签:GETETHGETHTURbitGet怎么提现TetherBlacktogetherbnb更新了吗Sleep Future

莱特币价格热门资讯
专访央行数研所所长穆长春:首个金融区块链标准是怎么来的?

2月底,中国人民银行发布《金融分布式账本技术安全规范》(下称《安全规范》),从2月5日起正式实施,这是中国首个金融区块链标准规范.

1900/1/1 0:00:00
比特币秘史:澳本聪CSW为什么会被群嘲?

2015年12月,《Wired》和《Gizmodo》两家杂志不约而同地发文表示已经锁定中本聪的真实身份,他就是澳洲企业家Craig Steven Wright.

1900/1/1 0:00:00
金色前哨 | 神预言家辛普森:加密货币是未来的现金

金色财经讯,近日美国动画片《辛普森一家(The Simpsons)》最新一集(13)中播放了介绍加密货币的内容.

1900/1/1 0:00:00
新西兰国税局计划取消对加密货币的商品服务税

新西兰国税局(IRD)正在考虑取消对加密货币征收的商品服务税(GST)。 据Coindesk报道,当前比特币和其他数字货币被视为财产,加密货币在交易时需要承担15%的商品服务税,这可能会引发“重复征税”的问题.

1900/1/1 0:00:00
对区块链生态的互融与革新

区块链技术发展到今天,在打通传统行业数据壁垒的同时,也在无形之中形成了自己的护城河,这对于一直标榜去中心化的区块链行业来说,不见得是个好事,不得不说,截至目前,区块链生态已经形成了诸如以下所说的各类壁垒.

1900/1/1 0:00:00
金色趋势丨以史鉴今 BTC后市还有很大空间

时事新闻 The Block 调研数据显示,截至 2 月 13 日,比特币期货在累计未平仓合约(OI)突破 50 亿美元.

1900/1/1 0:00:00