【摘要】
1. 概述
Qtum 量子链作为一个以技术革新为主导的创新公链,一直将推动区块链的技术发展和应用落地为己任。量子链研究院一直在探索区块链上的各种创新方式,其中基于Google Cloud进行的对区块链云计算与大数据方向的创新探究一直在稳步推进。继Google Cloud推出Qtum开发工具包后,Qtum量子链结合Google Cloud强大的数据分析能力与丰富的云平台功能,基于数据分析工具BigQuery再次推出了一个重量级数据分析服务——Qtum链上数据分析。
Qtum量子链是全球首个基于PoS共识机制和UXTO模型的智能合约平台。其账户抽象层实现了UTXO模型与智能合约虚拟机账户模型的的无缝交互,实现了区块链技术与真实的商业世界的完美融合。
+最新数据显示(截止到2019年5月),截止至5月30日地址数总量为1648035个,在一个月内增长67596个,平均每日增长2253.2个。网络权重变化整体较稳定,挖矿平均年回报率为7.87%[1]。Qtum x86虚拟机、完善的DGP链上治理以及Qtum与金融、医疗、文娱、游戏等多领域的融合,使Qtum量子链逐渐成为全球最有影响力的项目之一。
主流货币的数据全是公开透明的,我们可以用 blockchain.com、etherscan.io 、qtum.info等开放的区块链浏览器查询交易、余额等基本信息。但若想对链上数据进行统计分析并不容易,例如每日的交易量、全网算力等等,需要对历史的所有区块、交易进行数据统计才能得到。
本文就基于BigQuery实现了Qtum链上数据的统计、分析以及可视化展现,将Qtum的各项指标更为直观地呈现给用户。最终效果参见网址:https://chart.qtum.info/
2. 背景
BigQuery [2] 是Google Cloud最新推出的数据分析工具。它是一个基于列存储的数据库系统。列存储和行存储的区别可以用下图很好地表示。
列存储和行存储有着各自的优缺点,适用于不同的场合。从下表中可以很明显地看出,列存储可以有效应用于数据统计中。因为数据统计通常需要把大量的数据(列如用户日志)加载进表里,然后对逐个字段进行筛选和统计。这个场景和列存储的应用场景是完全符合的。
目前开源的列存储数据库并不多,主流的包括HBase、ClickHouse等。而各大互联网公司都会研发自己的闭源列存储数据库。BigQuery就是Google研发的列存储数据库,目前在Google Cloud上可以使用,主要按照SELECT操作涉及的数据量大小进行收费。
由于列存储数据库能很好地应用于数据统计的场景中,所以我们采用BigQuery进行Qtum链上数据的分析,以便更好地了解区块、交易等数据。BigQuery也经常宣传自己在区块链数据方面的应用[3]。
03. 架构
本系统分为上中下三层:
· 下层为数据源部分。运行在服务端的Qtum节点开启了RPC服务。ETL(Extract-Transform-Load )程序会持续从RPC获取链上数据,然后输出给中间层。
· 中间层用BigQuery实现数据存储和计算。运行在服务端的定时任务会持续往BigQuery中写入最新的链上数据。然后,用SQL对数据进行统计分析,写入上层的Redis中。
· 上层是前端展示部分。Flask框架从Redis中读取数据返回给前端。前端通过在React框架中嵌入的Echarts工具,用来展示Qtum链上数据的统计分析结果。
数据源
数据源部分由Qtum节点和ETL程序组成。Qtum全节点实时同步最新的链上数据。ETL程序通过RPC接口获取链上数据,最终写入本地CSV(Comma-Separated Values)文件。流程图如下:
ETL详细步骤如下:
1. 启动Qtum全节点和ETL程序;
2. ETL程序调用Qtum节点的RPC接口获取当前区块高度;
3. ETL程序开启多个进程,并发地调用getblock接口,获取最近多个区块的数据;
4. 将区块数据写入本地的CSV文件。
其中,getblock接口有两个参数,分别是区块哈希值和数字2(2代表会返回完整的交易信息)。返回结果如下:
BigQuery
BigQuery部分主要是数据的存储和计算。每次ETL程序运行完成之后,会将最新的CSV文件上传至BigQuery。然后执行SQL语句进行统计计算,并将计算结果写入Redis。关键操作步骤如下:
· 建表:在BigQuery网站界面中新建数据库表,表名为block。依次填写各个字段的名称,类型和模式,填写完毕点击“创建表”。