CashDB一个用于BCH网络UTXO集的高性能存储后端

2019-01-11 16:11 栏目:经验之谈 来源: 查看()
1月7日,开发人员和研究员Joannes Vermorel宣布发布一个名为CashDB的新项目,这是比特币现金网络UTXO集的高性能存储后端。CashDB是一个技术性的软件,旨在作为Bitcoin ABC或ElectrumX等完整比特币实施的支持组件。从设计角度来看,CashDB是实现比特币现金软件部分分离的一小步。

CashDB一个用于BCH网络UTXO集的高性能存储后端

提到CashDB,就不得不提Terab项目。Terab项目旨在将比特币现金的区块大小扩展到TB级(100万MB)大小,使得扩容后的BCH可达到每秒处理700万笔交易的水平。而CashDB则是Terab项目的一个分支,作为一项开源工作,旨在支持比特币现金的链上扩容。

11月15日原始的BCH分裂成为BCH和BSV之后,Joannes Vermorel选择继续支持BCH,CashDB则成为Terab项目的一个延续。此外,Vermorel 还将其推出的Bok OP_Returns 的Lokad 4字节前缀指南移至Bitcoincash的BCH社区存储库。

Vermorel声称CashDB每秒可以处理近20000笔交易

作为UTXO集的存储后端,Vermorel声称CashDB每秒可以处理近20000笔交易。他在其博客中写道:“使用一张英特尔Optane 900P卡(写这篇文章的时候大约是400美元),CashDB可以每秒处理将近20000笔交易,这意味着1GB的比特币现金区块可以在大约3分钟30秒内处理完毕。因此,当前形式的CashDB已经具有足够的可扩展性,可以在网络容量达到峰值时处理GB级的数据块。”

不过Vermorel也提到,CashDB不是“可扩展性的银弹”,它只能帮助BCH网络解决在未来所面临的可扩展性挑战的一部分。Vermorel表示,CashDB的吞吐量仍然太低,无法处理持续的十亿字节的区块。不过即使这样的速度与Visa的交易能力相比也是足够了的。

CashDB的突出部分

对于CashDB来说,除了拥有较强的交易处理能力之外,还有一些其他的优势。

CashDB是在C#/ .NET中实现的。高质量的C#实现(例如xxHash)基本上表现出与C一致的性能。生产力方面,C#就像Java或Python一样,明显优于C ++。从客户端角度来看,CashDB是中立的,它提供了一个C/ c++ API,可以直接与大多数语言和平台进行交互。

CashDB实现了接近零的GC压力,确保了性能的稳定。更新UTXO会生成由GC管理的零对象; 提交块时会生成十几个对象(主要是字符串,因为CashDB会记录一些消息)。CashDB广泛利用Span实现了接近零的GC压力。

UTXO分层存储:UTXO项是Lindy,已经存在了很长时间的,预计还会存在很长时间。受generation GC的启发,CashDB将这种洞察力嵌入其设计中。CashDB最多支持三个存储层,它们充当分代层:旧的UTXO集逐渐从一层下沉到下一层。这种设计可以将顶级昂贵的SSD(成本最高的IO)与更大的SSD(成本最高的GB)相结合。

无锁并发性: 锁定是并发的一种弱方法; 并且可以说是目前Satoshi的客户端(checkout cs_main)存在的一个主要缺陷。CashDB 仅依靠有界的收件箱即可实现无锁并发。此设计还确保对CashDB的并发访问可以优雅地获取其各自的IO资源份额,而不会降低整体性能。随着比特币现金实现变得更加并行化,这方面将变得越来越重要。

对抗性:在为区块链设计键值存储时,需要假设有人会试图通过生成交易来破解它,其唯一目的是达到设计所揭示的最坏性能场景。许多键值存储实现在面对对抗插入和更新时表现不佳。CashDB通过SipHash(一种为DoS(拒绝服务)缓解而设计的哈希算法)对所有的点进行哈希,从而避免了这个问题。

以硬件为中心的IO:现代硬件,包括RAM和存储,不提供对数据的字节级访问。相反,无论何时读取或写入数据,块都在4KB(不要与比特币块混淆,是硬件块)大小下进行。因此,尽管可能需要100字节(UTXO条目的典型大小)但无论如何都要检索4KB。

CashDB不是IO粒度的受害者,它采取了相反的立场:无论如何都要检索4KB,充分利用这种“过剩”检索。特别是,CashDB通过CoinPack对UTXO条目及其概率过滤器进行了配置。在底层,内存映射文件(通过MemoryMappedFileSlim处理)用于实现对IO的细粒度控制。

亚毫秒链重组:原始Satoshi客户端采用的block-do / block-undo设计模式在处理大型比特币块时效率很低。通过事件源设计,CashDB完全避免了这个问题,链重组基本上是自由的。这也意味着区块链可以同时从两个提示扩展而不受任何惩罚;IO资源在两个竞争的链之间共享。

TCP阻塞位:典型的机器每秒可以发送大约100,000个TCP数据包——考虑单个线程/每秒。虽然这是相当大的,但如果必须通过UTXO集为每个IO操作发送一个数据包,那么TCP本身就成为性能瓶颈。因此,CashDB会进行一些手动TCP软件以批量处理请求和响应,因为单个TCP数据包(~1500字节)通常可以打包十几个IO操作。ConnectionController中提供了相关的服务器端逻辑。

对于BCH来说,这种项目的研发将会推动BCH变得越来越好。BCH的开发是开放的,任何开发者都可以为BCH的开发添砖加瓦。BCH在这种成长环境中将会获得越来越多用户的支持。


微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发