ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Data-Export数据导出功能介绍

2022-07-17 13:02:21  阅读:167  来源: 互联网

标签:解析 数据 导出 合约 Export 模块 区块 Data


功能介绍

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模块:公共模块

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

  • 链上数据类型转换工具,提供solidity和java类型转换功能支持。

  • 合约类扫描解析工具,对配置合约类进行解析,提取有效信息。

  • 用于模块间交互的数据对象,在模块间传递信息。

  • 全局静态参数,包括任务状态等枚举。

  • 时间、格式等常用工具。

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有