其他分享
首页 > 其他分享> > Data-Export数据导出功能介绍

Data-Export数据导出功能介绍

作者:互联网

功能介绍

Data-Export为解决查询或分析链上数据,效率低、兼容性差的问题,在链上进行复杂数据分析处理,浪费链上资源问题以及开发能够导出基于自身合约业务数据的应用,重复“造轮子问题,通过提供一种通用化、智能化、标准化的数据导出解决方案,降低区块链数据开发门槛,提升研发效率。

使用者几乎无需编码,只进行简单配置,即可把结构化的数据导出到关系型数据库或ElasticSearch等数据存储中,以便后续业务分析和处理。同时支持多活部署、数据分库分表、导出数据可视化、应用监控等功能,适应各类复杂业务场景,满足业务开发中各项需求,提升使用体验。

特性

支持自动分析、导出智能合约数据

Data-Export支持导出区块链基础数据、基于智能合约自动分析的详情数据。基础数据包含当前块高、交易总量等。如配置了FISO BCOS上运行的合约,则可导出区块链上合约的业务数据,包括event、构造函数、合约地址、执行函数的信息等。

开发者可基于已导出的区块链基础数据,以及智能合约部署合约账户、事件和函数等数据,进行二次开发、定制复杂查询和数据分析的逻辑,快速实现业务需求。

灵活的存储和导出策略

链上存在海量数据时,将数据导出到单个数据库或单个业务表会给运维带来巨大压力,造成数据库性能衰减;如数据量过大,通常需对数据进行分片,将同一表内的数据拆分到多个或同个数据库的多张表中,即分库分表。

为此,Data-Export支持可配置的多数据源存储、读写分离和分库分表。Data-Export也支持ElasticSearch,方便海量数据的存储、查询、检索。

数据导出策略方面,Data-Export提供灵活可配置的区块、交易、事件、账户等数据导出功能,可过滤不需要的事件、函数以及其中的具体字段。如某个合约事件信息无需导出,则可通过配置来过滤该事件信息。

支持多活部署

在大数据、高可用的场景中,单节点部署的数据导出服务通常无法满足业务需要,且一旦单机服务宕机,则无法获取最新数据。多节点部署方案,可将导出任务独立分片到多节点执行,即便个别节点宕机时也能保证任务正常执行,同时还能提升数据导出的效率。

Data-Export支持灵活的分布式部署和任务调度,保证数据导出的高效率和高可用,具备分布式任务协调服务、横向扩展、灵活伸缩的能力。

丰富的API及可视化能力

在数据查询上,Data-Export支持丰富的Restful API数据查询接口,方便用户对链上导出数据完成通用查询操作。

在数据可视化上,Data-Export集成了swagger插件,提供可视化互动API控制台;集成了可视化数据插件Grafana,实现直观、实时、可视化的展示区块链数据;支持自动生成FISCO BCOS链上数据监控视图,让用户对链上数据了如指掌。

架构

codegen模块:代码生成

该模块负责相关合约代码和配置文件的生成,包括合约解析、代码模板、代码生成、组件组装等子模块。

codegen运行模式如下图:

各子模块功能如下:

合约解析模块:解析智能合约文件,获取合约中的交易和event对象。

代码模板模块:用于生成获取交易/event数据的代码模板。

代码生成模块:根据获取的交易和event对象,填充代码模板,生成代码文件。

组件组装模块:用于将生成的代码和core组装成一个独立服务。

core模块:核心模块

该模块是Data-Export的核心模块,它被打包为一个可执行的BootJar包,内置开箱即用的Restful API,开发者可便捷地获得数据导出服务。同时,core自身也是一个示例,向开发者展示了如何组合利用各功能模块Jar包,来开发一个功能完整的数据导出系统。

运行模式如下图:

链上数据由Data-Export任务调度模块统一调度,由BlocakFetcher从链上获取数据到本地处理节点,交由对应的BlockHandler进行解析,最后将解析后的数据封装,交由db数据存储模块进行持久化。

如上所述,Data-Export对于链上数据处理的核心流程为数据获取、解析、持久化三步,其中涉及功能模块包括线程管理、多活管理、数据管理、异常监控、用户访问。

线程管理子模块

该模块旨在单节点运行情况下,最大限度地提升数据导出和处理效率,包括链上数据的获取、解析、任务调度和执行等,均由线程管理模块统一调度。

多活管理子模块

该模块集成了Elastic-Job,现已支持分布式部署、任务分片、弹性扩容、并行调度和定制化流程任务。该组件可在分布式环境下,通过SimpleJob对区块进行抓取,并由DataflowJob对区块进行解析处理。

数据管理子模块

该模块集成了Sharding-JDBC,支持分库分表和读写分离,开发者使用时只需设置分片数,系统会自动生成分片策略配置,将海量数据导出到不同的库表中。

异常监控子模块

该模块负责对导出数据的异常进行监控和处理,包括在任务异常失败时,对区块数据进行回滚,并重试补偿,以及对任务超时的校验。

Data-Export通过脚本监控数据源和链上数据,来确保导出任务的正确执行,监控主要基于两个维度:

(1)一段时间内,DB中的数据开始落后于链上数据,直到达到某个阈值;

(2)链上块高增加,一段时间内,DB中块高不变。

一旦触发其中某一个的条件,则会输出报警日志。

用户访问子模块

该模块提供两种数据访问方式,一种是API方式,支持用户系统本地调用;另一种为REST方式,可通过http方式访问,降低业务耦合性,支持跨平台调用。

用户接口按照数据类型分成四类接口:区块数据接口、账户数据接口、交易数据接口和事件数据接口。其中,每类接口中都支持基于块高、hash或账户的查询,同样也支持基于时间、特定字段的复杂查询.

extractor模块:数据获取

该模块进一步封装了区块链底层平台FISCO BCOS SDK的逻辑,可以更便捷地调用上链功能,获取区块链数据,包括区块高度、交易详情、区块详情等信息。

运行模式如下图:

parser模块:数据解析

该模块封装了区块解析功能,可对链上数据进行分析处理。extractor模块获取链上数据后,由parser模块对合约和区块信息进行完整的解析处理,获得区块、函数、事件、账户等数据详情。

运行模式如下图:

各子模块功能如下:

合约加载:解析器执行前,会加载合约的BIN、ABI和配置信息,计算所有合约函数的MethodId。

账户解析:通过Block获取区块的合约地址,通过合约地址获取runcode后,由预先加载的合约BIN信息,识别账户的类型,最终解析出账户。

函数解析:如函数为构造函数,通过加载合约可解析出函数的值传递信息;如函数非构造函数,则transaction中的to字段即为合约地址。通过合约地址获得函数所属的合约,并根据transaction中附带的input和预先加载的methodId进行比对,可获得函数名。在精准定位了函数所属合约和函数名以后,会触发transactionHandler,并执行对应的解析工作。

事件解析: 基于已解析的transactionHash与合约名映射,可以获取合约名称;根据特定的合约名称,会自动触发该合约下的eventHandler,并执行对应解析工作。

区块解析: 根据获得的Block对象属性解析,获得区块概要信息。

db模块:数据存储

该模块封装了数据存储和查询逻辑,并提供数据存储扩展接口,可进行定制开发,目前默认支持mysql和ElasticSearch的存储。

Data-Export通过db模块将数据导出到存储介质中,每一类数据都有特定的存储格式和模型,包括区块原始数据、解析后的区块数据、合约信息、事件数据和交易数据等多种存储模型,存储模型如下:

存储模型 说明
区块原始数据 block_raw_data 区块原始数据表
tx_raw_data 交易原始数据表
tx_receipt_raw_data 交易回执原始数据表
解析后的区块数据 block_detail_info 区块详细数据表
block_tx_detail_info 交易数据表
合约信息 contract_info 合约信息表
deployed_account_info 已部署合约详情信息表
事件数据 合约名称_事件名称 合约事件信息表
交易数据 合约名称_函数名称 合约函数信息表

common模块:公共模块

该模块封装了一些公用的数据结构、工具类和公共参数等,包括:

标签:解析,数据,导出,合约,Export,模块,区块,Data
来源: https://www.cnblogs.com/zhangchenwei/p/16486686.html