解决方案:实现数据智能无感采集的方法及系统
优采云 发布时间: 2022-12-19 09:52解决方案:实现数据智能无感采集的方法及系统
1. 一种实现智能无感数据采集的方法,用于政务服务应用系统中的数据采集,其特征在于,包括:
预先建立政务服务应用系统目标办理页面统一资源定位器下的所有功能点,配置功能点的各功能标识对象、数据采集触发对象和数据采集项; 将数据采集项与大数据平台数据元信息绑定;
政务服务应用系统的目标文档页面的控制安全域是预先设置好的。 控制安全域包括文档页面操作的安全控制和数据类型转换的安全控制。 数据类型转换状态包括激活状态和异常状态。 文件页的运行状态包括工作状态和空闲状态;
当客户端*敏*感*词*到数据采集触发对象被触发时,会根据数据采集项从当前目标处理页面采集数据;
客户端检测并控制安全域中的数据类型转换状态。 如果检测到数据类型转换状态为active,处理页面的操作状态为idle,则客户端对采集的数据进行数据类型转换。 如果数据类型转换成功,转换后的数据将发送到服务器。 如果数据类型转换失败,触发器会将数据类型转换状态更改为异常状态。 根据数据采集项,从当前目标处理页面再次采集数据,并进行数据类型转换后发送给Server; 如果检测到数据类型转换状态异常,则客户端首先对采集的数据进行数据校验,校验通过后触发将数据类型转换状态更改为active状态,并在处理页面进行操作,如 中idle状态,客户端对采集的数据进行数据类型转换后发送给服务器,下次对采集的数据进行数据类型转换前不进行数据校验;
服务器接收到数据后,根据数据采集项绑定的数据元,将采集到的数据发送给大数据平台,并保存在相应的数据元中。
2.根据权利要求1所述的方法,还包括:
政务服务应用系统目标文档页面打开时,客户端获取政务服务应用系统目标文档页面统一资源定位器下所有功能点的功能标识对象、数据采集触发对象和数据采集项;
客户端监控政务服务应用系统目标文档页面统一资源定位器下所有功能点的功能标识对象和数据采集触发对象;
当客户端*敏*感*词*到该函数标识的对象被触发时,继续*敏*感*词*数据采集触发对象是否被触发。
3.根据权利要求1所述的方法,还包括:
服务器获取大数据平台返回的保存的结果信息,并记录数据采集日志。
4.根据权利要求2所述的方法,其特征在于,所述客户端获取政务服务应用系统的目标处理页面统一资源定位器下所有功能点的功能标识对象和数据采集触发对象具体包括:
客户端向服务器端发送政务服务应用系统目标文档页面的统一资源定位符;
服务器向客户端返回统一资源定位符下所有功能点的功能标识对象、数据采集触发对象和数据采集项。
5. 2.根据权利要求1所述的方法,其特征在于,所述客户端为安装在政务服务应用系统工作人员使用的浏览器中的浏览器插件。
6、一种实现数据智能化、无感化采集的系统,用于政务服务应用系统中的数据采集,其特征在于,包括:
功能点建立处理模块,用于预先建立政务服务应用系统目标文档页面统一资源定位器下的所有功能点,并配置各功能标识对象、数据采集触发对象和数据采集项。观点;
控件安全域设置处理模块,用于预先设置政务服务应用系统目标文档页面的控件安全域,控件安全域包括文档页面操作安全控件和数据类型转换安全控件,数据类型转换状态包括激活状态、异常状态,处理页面的运行状态包括工作状态和空闲状态;
绑定处理模块,用于将数据采集项与大数据平台的数据元信息进行绑定;
数据采集处理模块,用于在客户端*敏*感*词*触发采集采集触发对象时,根据数据采集项从当前目标处理页面采集数据
数据转换处理模块用于客户端检测和控制安全域中的数据类型转换状态。 如果检测到数据类型转换状态为active,处理页面的操作状态为idle,则客户端对采集的数据进行数据类型转换。 转换。 如果数据类型转换成功,转换后的数据将被发送到服务器。 如果数据类型转换失败,则数据类型转换状态变为异常状态,并根据数据采集项从当前目标文档页面重新采集数据。 数据类型转换后发送给服务器; 如果检测到数据类型转换状态异常,则客户端首先对采集的数据进行数据校验,校验通过后触发数据类型转换状态变为活动状态。 并且当处理页面处于空闲状态时,客户端对采集的数据进行数据类型转换后发送给服务端,下次对采集的数据进行数据类型转换前不进行数据校验;
数据存储处理模块,用于服务器接收到数据后,将采集到的数据发送给大数据平台,并根据数据采集项绑定的数据元保存在相应的数据元中。
7.根据权利要求6所述的系统,还包括:
获取处理模块,用于在政务服务应用系统目标应用页面打开时,获取政务服务应用系统目标应用页面统一资源定位器下所有功能点的功能标识对象和数据采集触发对象。 . 和数据采集项目;
监控处理模块,用于客户端监控政务服务应用系统目标处理页面统一资源定位器下所有功能点的功能标识对象和数据采集触发对象,并在检测到数据时继续监控数据a function identification object is triggered采集触发对象是否被触发。
8.根据权利要求6所述的系统,还包括:
记录处理模块,用于在服务器获取到大数据平台返回的保存结果信息后,记录数据采集日志。
9.根据权利要求7所述的系统,其特征在于,所述采集处理模块具体包括:
请求模块,用于客户端向服务器端发送政务服务应用系统目标文档页面的统一资源定位符;
响应模块用于服务端向客户端返回统一资源定位符下所有功能点的功能标识对象、数据采集触发对象和数据采集项。
10.根据权利要求6所述的系统,其特征在于,所述客户端为政务服务应用系统工作人员使用的浏览器中安装的浏览器插件。
解决方案:打开区块链浏览器,你能看到...
前言
随着区块链技术的不断发展和应用,公众对区块链技术的认识也逐渐加深。 我们都知道区块链具有可追溯、不可篡改等技术特性,那么如何查询和追溯链上数据呢? 这就是我们今天要分享的主角——区块链浏览器。
区块链浏览器:是链上数据可视化的主窗口,是用户浏览和查询区块链所有信息的工具。 借助该窗口,可以将区块信息、交易信息、账户信息等重要加密数据可视化。 因此,区块链浏览器对于区块链用户来说是必不可少的。 以目前国外开源的区块链项目以太坊为例。 其社区开源浏览器Etherscan承载着大量的用户流量,是最便捷的链上行为分析工具。
本文将从区块链浏览器开发的实践经验出发,与大家分享如何快速搭建一个区块链浏览器。
浏览器可以渲染什么?
通过分析一些开源浏览器,我们总结出区块链浏览器显示的典型区块链信息如下:
- 区块高度
- 交易数量
- 交易趋势
- 黑名单
- 最近的交易清单等。
可以直接获取浏览器数据吗?
通常,区块链会提供必要的链SDK信息,帮助开发者获取链上的区块和交易数据,但其提供的接口往往是基础的,比如如何获取区块高度、区块详情、获取a某些交易明细等。这些数据直接对应页面上的区块列表、区块明细、交易明细等基础数据。 无法通过链SDK直接获取浏览器所需的全量信息。
为此,一个好的区块浏览器需要支持本地数据处理和链上处理。
首先,通过监控不同区块链底层的区块和交易数据,当链上有新的区块产生时,监控系统可以通过链SDK第一时间获取该区块的信息; 缓存存储在仓库中,按需设计各种统计逻辑,完成数据的处理统计。 因此,区块链浏览器页面的数据不是直接通过链上SDK请求的,而是来自于本地的列表数据和统计数据。
相较于一般通过区块链SDK直接获取数据的方式,我们需要的是一种在本地缓存区块数据并在链上处理数据的方法,以显着提升区块链浏览器前端的数据获取速度,但是对于这种方案读者可能有两个问题:
回答问题1,很明显,时间上的差异主要是本地获取链上数据的频率。 因此,通过将频率范围控制在合理的范围内,可以实现极短的延迟,基本不会影响用户使用浏览器的性能体验。 对于第二个问题,本方案的研发设计人员需要着重解决。
如何保证数据的真实性和有效性?
事实上,为了保证数据浏览器中数据的真实性,区块浏览器需要增加数据验证模块,即用户可以通过简单的接口调用与区块链进行交互,快速验证数据的真实性。 例如,上述验证模块中的接口主要包括以下功能:
区块证明:用于证明特定区块是否存在于区块链的账本数据中;
交易证明:用于证明区块链账本数据中是否存在特定交易或交易执行结果;
账户证明:用于证明特定账户数据是否存在于区块链账本数据中;
因此,通过上面的分解,我们可以理解整个浏览器的数据获取、处理、验证过程如下:
区块链浏览器设计实践
初步介绍了区块链浏览器的设计思路和整体运行流程。 下面以FunChain BaaS区块链浏览器为例,详细介绍区块链浏览器的具体设计,以及如何实现不同区块链的区块和交易数据的采集和存储。 如下图,自研浏览器组件整体架构如下:
自研浏览器组件架构图
为了方便大家理解,我们先简单介绍下架构图中各个模块的功能:
Ø数据公共处理层:负责数据存储优化等功能,相关功能设计将在下一篇推文中重点介绍;
Ø 采集适配层:负责不同区块链采集的采集适配;
Ø定时服务:负责定时触发采集和统计逻辑,采集器主要利用乐趣链BaaS自研的链驱动功能,与不同的区块链底层进行交互,获取最新的区块和交易数据。 在:
■采集模块:负责定时和主动触发采集逻辑,包括数据处理等功能;
■统计模块:
1)统计模块也是一个定时服务,定时判断数据库中是否有新的数据;
2)如果有新的数据产生,会触发统计逻辑,比如区块数、交易数、合约数、合约调用数等指标统计;
3)统计数据将直接存储或更新现有数据;
有了这些介绍,我们就可以重点关注QuChain自研浏览器组件如何在一个服务中获取不同区块链的数据。 首先,我们为其设计了一个抽象的采集层,具体调用时只需要传入趣链BaaS开发的链驱动即可。
例如,以下示例显示了如何获取最新的块接口:
// Collector collector definitiontype Collector interface { // GetLatestBlock 获取最新的区块 GetLatestBlock() (*Block, error)}
那么,如何通过如何实现FunChain区块链平台的区块数据采集代码来实际演示它是如何工作的,
* 自建项目`hpc`,创建目录
* 进入hpc目录
cd hpcgo mod init hpctouch main.go
* 成功的目录结构如下
.├── go.mod└── main.go
* go.mod 引入依赖
module hpc go 1.17 require ( git.hyperchain.cn/blocface/chainsdk v0.0.1)
* main.go编辑器,可以注意代码注释的补充说明:首先将实现自定义接口Collector的对象注册到executor中,导入采集器执行器,并执行;
*注:如果链上没有区块,该方法返回&bs.Block{},nil,各种区块链可以通过自定义实现方法实现采集效果;
package main import ( bs "git.hyperchain.cn/blocface/chainsdk/pkg/collect/base" "git.hyperchain.cn/blocface/chainsdk/pkg/collect/collectinter") func main() { err := collectinter.Register(mockImp{}) if err != nil { panic(err) } collectinter.Execute()} type mockImp struct {} func (m mockImp) GetLatestBlock() (*bs.Block, error) { panic("自定义实现获取最新区块")}
* 信息对象在工具包中提供,例如提供节点或链的信息
type Base struct { node string Node struct { Name string Type string Host string Ports string UniqueName string } Channel string }
* 编译打包(平台GOOS=linux架构GOARCH=amd64)
GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -gcflags="all=-N -l" -o hpc .
通过以上步骤,我们实现了QuChain区块链平台的区块数据采集。 那么,我们只需要在QuChain自研浏览器组件中调用并导入相关的客户端包,根据驱动二进制文件的路径新建一个客户端即可。 能。
// NewChainClient new chain clientfunc NewChainClient(tool, channel, cfgRootPath string, node base.Node, opts ...ClientOpt) (*ChainClient, error) { abs, err := filepath.Abs(tool) if err != nil { return nil, errors.Wrap(err, "get absolute path") } marshal, err := json.Marshal(node) if err != nil { return nil, errors.Wrap(err, "marshal node") } c := &ChainClient{ tool: abs, node: string(marshal), channel: channel, configRootPath: cfgRootPath, timeout: 10 * time.Second, } for _, opt := range opts { opt(c) }
return c, nil}
获取最新区块示例的调用逻辑
func (c ChainClient) GetLatestBlock() (*base.Block, error) { command := fmt.Sprintf("%s -p '%s' -m GetLatestBlock ", c.tool, c.configRootPath) out, err := util.NewDefaultCMD(command, []string{}, util.WithTimeout(int(c.timeout.Seconds())), util.WithForceKill(true), util.WithErrPrint(false)).Run() if err != nil { return nil, errors.Wrap(err, "call GetLatestBlock") } out = strings.TrimSuffix(out, "\n") var b = base.Block{} err = deocde([]byte(out), &b) if err != nil { return nil, errors.Wrapf(err, "decode resp [%s]", out) } return &b, nil}
以下是乐趣链BaaS的区块链浏览器前端页面。 只需要调用内部接口,直接从数据库中获取所需信息即可。 我们从区块、交易、合约、账户等多个维度为用户提供直观的信息。 链上数据的呈现有利于用户更好地了解链上业务运行的全貌。
总结
QuChain自研的浏览器组件通过上述模式实现了无差异的调用逻辑,实现了对不同区块链底层数据的统一支持,充分保留了新型区块链底层的灵活扩展性。 通过上述核心功能模块设计,基本实现了区块链浏览器的最小产品MVP。
当然,在构建区块链浏览器时仍然存在很多挑战。 最典型的挑战之一是如何处理大量数据。 相信细心的读者已经看到了前面架构介绍中提到的数据公共处理层。 第一个模块主要是优化数据存储,保证数据存储不会随时间增加,充分减轻服务器存储部分的压力。 我们会在后续的推文中重点介绍~