数据可视化
特性简介
在Hyperchain新版本中提供了一个专用于合约数据可视化的服务Radar。Radar能够在区块链正常运行的同时将区块链中合约的状态变量的信息导入到关系型数据库(mysql)中,使得合约状态可视化、可监控。关系型数据库中数据总是和已经提交到区块链中的数据保持最终一致性。 此外,Radar还支持合约的动态升级,在合约升级之后,用户只需要重新在Radar服务中重新绑定合约新的源码信息即可。但为了保证数据的完整性及连续性,被删除或者替换掉的字段仍然会保留在关系型数据库。 综合来说,Radar服务能够自动地将部署在Hyperchain上的智能合约数据转换成结构化的数据格式导入外部关系型数据库中,以便用户进行数据监视、分析等。
本特性主要的应用场景是:在需要利用到区块链优良特性的同时需要应用数据具有可观察、可分析等特点。Radar服务可以协助用户及时地将数据导入到关系型数据库(mysql)中。
Radar运行的流程如下:
合约监听;
存储调用信息;
更新状态变量;
数据导出;
合约监听阶段有两个主要工作:分析合约方法和合约变量。分析合约变量时,数据可视化组件会针对每一个变量构建一个变量模型。每个模型里记录着变量的内存地址、类型、长度等信息。合约方法的分析的主要分析对象是运行时难以获得的字典变量的key值。 在存储调用信息阶段可视化组件将用户调用合约的Payload信息进行存储。由于Radar需要在导入数据的时候按顺序重放用户的调用信息,合约调用信息Payload需要严格按序存储。 最后是数据提交阶段。这一操作分为更新合约状态变量信息(即更新前面提到的动态变量的变量模型)和数据导出。提交区块的时候,Radar能够获取当前区块涉及的完整的存储信息。之后根据这些模型进行数据解码,生成对应的sql语句,实现数据导入。
优势
使用Radar服务能够给使用方带来以下几点优势:
1.便于数据分析
当前区块链存储数据主要使用以levelDB为代表的键值对数据库,和以couchDB为代表的文档型数据库。其查询效率均不高,需要按照字段的key值逐条查询。而且key值往往还是根据存储地址等数据拼接后得到的一个很难和原始变量名建立直接关系的的字符串,这在分析数据,尤其是分析两列数据之间的相关性等方面会带来很大困难。 将数据转存到结构化数据库之后,这种问题将迎刃而解。有了明文化、结构化的数据之后,用户就可以更好的挖掘数据背后的信息和价值。
2.减少合约代码冗余程度,减轻区块链负担
在数据导出到关系型数据库之前,由于刻画一个对象可能会用到一个结构体,一个结构体中可能会有许多字段,这就导致了哪怕仅仅为支持前端展示,合约中也要为其实现许多的get函数。这增加了合约冗余程度的同时,也会使得一些可能不需要通过区块链查询的操作变成了合约调用,从而增大了系统的负担。使用数据导出模块后可以缓解这样的问题。