CN117194482A - 数据查询方法、装置、计算机设备和存储介质 - Google Patents
数据查询方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN117194482A CN117194482A CN202311160089.3A CN202311160089A CN117194482A CN 117194482 A CN117194482 A CN 117194482A CN 202311160089 A CN202311160089 A CN 202311160089A CN 117194482 A CN117194482 A CN 117194482A
- Authority
- CN
- China
- Prior art keywords
- data
- query
- data query
- blockchain
- real
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 121
- 238000012545 processing Methods 0.000 claims abstract description 115
- 238000004590 computer program Methods 0.000 claims abstract description 25
- 238000012546 transfer Methods 0.000 claims description 73
- 230000008569 process Effects 0.000 claims description 62
- 238000012795 verification Methods 0.000 claims description 52
- 238000004891 communication Methods 0.000 claims description 26
- 238000012544 monitoring process Methods 0.000 claims description 15
- 238000013500 data storage Methods 0.000 abstract description 14
- 238000012512 characterization method Methods 0.000 abstract 1
- 230000006870 function Effects 0.000 description 26
- 238000010586 diagram Methods 0.000 description 11
- 238000007726 management method Methods 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 9
- 230000008030 elimination Effects 0.000 description 5
- 238000003379 elimination reaction Methods 0.000 description 5
- 238000007405 data analysis Methods 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 230000006978 adaptation Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000012550 audit Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 230000003862 health status Effects 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000012954 risk control Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种数据查询方法、装置、计算机设备、存储介质和计算机程序产品。本申请实施例可应用于车载场景,方法包括:获取针对区块链的数据查询请求;访问区块链的数据实时缓存服务,得到数据实时缓存服务进行实时查询的缓存数据查询结果;当缓存数据查询结果表征存在查询目标数据时,从数据实时缓存服务得到目标数据查询结果;当其表征不存在查询目标数据时,则访问分布式数据仓库,在区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果;汇总并行数据查询结果,得到目标数据查询结果。本申请的方案中,通过在区块链中使用实时缓存服务结合分布式数据仓库来实现数据存储,从而可以有效地实现在区块链的大规模的数据查询处理。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种数据查询方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
随着计算机技术和网络技术的发展,出现了区块链技术,区块链是一种分布式账本技术,一般由共识、交易区块和状态数据存储、密码学身份安全等内容构成。由于账本是分布式存储的,而且区块是经过共识的,所以具有不可篡改、可追溯、共同维护等特征。区块链所要共识的内容为区块,而区块是由一个个资源转移和元数据组成的。这些资源转移的执行依赖智能合约及其方法的执行。
现有的区块链只支持key-value数据库(如leveldb和couchdb)和关系型数据库(如mysql),不支持超大规模的数据库,因此难以实现大规模数据的存储(例如数据集,机器学习训练模型)。当用户希望存储并查询大规模的数据,使用传统数据库效率很低,并且一个区块链节点可能没有空间存储,没办法分片存储到不同的区块链节点上,也很难实现高效的大规模数据查询。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高区块链数据查询效率的数据查询方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种数据查询方法,包括:
获取针对区块链的数据查询请求;
基于所述数据查询请求访问所述区块链的数据实时缓存服务,得到数据实时缓存服务基于所述数据查询请求进行实时查询的缓存数据查询结果;
当所述缓存数据查询结果表征存在查询目标数据时,从所述数据实时缓存服务得到所述数据查询请求的目标数据查询结果;
当所述缓存数据查询结果表征不存在查询目标数据时,基于所述数据查询请求访问所述区块链的分布式数据仓库,通过所述分布式数据仓库在所述区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果,汇总所述并行数据查询结果,得到目标数据查询结果。
第二方面,本申请还提供了一种数据查询装置,包括:
请求识别模块,用于获取针对区块链的数据查询请求;
第一数据查询模块,用于基于所述数据查询请求访问所述区块链的数据实时缓存服务,得到数据实时缓存服务基于所述数据查询请求进行实时查询的缓存数据查询结果;
第一结果获取模块,用于当所述缓存数据查询结果表征存在查询目标数据时,从所述数据实时缓存服务得到所述数据查询请求的目标数据查询结果;
第二数据查询模块,用于当所述缓存数据查询结果表征不存在查询目标数据时,基于所述数据查询请求访问所述区块链的分布式数据仓库,通过所述分布式数据仓库在所述区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果,汇总所述并行数据查询结果,得到目标数据查询结果。
第三方面,本申请还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取针对区块链的数据查询请求;
基于所述数据查询请求访问所述区块链的数据实时缓存服务,得到数据实时缓存服务基于所述数据查询请求进行实时查询的缓存数据查询结果;
当所述缓存数据查询结果表征存在查询目标数据时,从所述数据实时缓存服务得到所述数据查询请求的目标数据查询结果;
当所述缓存数据查询结果表征不存在查询目标数据时,基于所述数据查询请求访问所述区块链的分布式数据仓库,通过所述分布式数据仓库在所述区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果,汇总所述并行数据查询结果,得到目标数据查询结果。
第四方面,本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取针对区块链的数据查询请求;
基于所述数据查询请求访问所述区块链的数据实时缓存服务,得到数据实时缓存服务基于所述数据查询请求进行实时查询的缓存数据查询结果;
当所述缓存数据查询结果表征存在查询目标数据时,从所述数据实时缓存服务得到所述数据查询请求的目标数据查询结果;
当所述缓存数据查询结果表征不存在查询目标数据时,基于所述数据查询请求访问所述区块链的分布式数据仓库,通过所述分布式数据仓库在所述区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果,汇总所述并行数据查询结果,得到目标数据查询结果。
第五方面,本申请还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取针对区块链的数据查询请求;
基于所述数据查询请求访问所述区块链的数据实时缓存服务,得到数据实时缓存服务基于所述数据查询请求进行实时查询的缓存数据查询结果;
当所述缓存数据查询结果表征存在查询目标数据时,从所述数据实时缓存服务得到所述数据查询请求的目标数据查询结果;
当所述缓存数据查询结果表征不存在查询目标数据时,基于所述数据查询请求访问所述区块链的分布式数据仓库,通过所述分布式数据仓库在所述区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果,汇总所述并行数据查询结果,得到目标数据查询结果。
上述数据查询方法、装置、计算机设备、存储介质和计算机程序产品,通过在获取针对区块链的数据查询请求后;先基于所述数据查询请求访问所述区块链的数据实时缓存服务,得到数据实时缓存服务基于所述数据查询请求进行实时查询的缓存数据查询结果。从而可以在区块链中,直接基于缓存数据实现高效地数据查找处理。而后当所述缓存数据查询结果表征存在查询目标数据时,从所述数据实时缓存服务得到所述数据查询请求的目标数据查询结果,即在数据实时缓存服务保存了相关查询数据的情况下,直接得到并反馈数据查询的结果。而当所述缓存数据查询结果表征不存在查询目标数据时,基于所述数据查询请求访问所述区块链的分布式数据仓库,通过所述分布式数据仓库在所述区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果;汇总所述并行数据查询结果,得到目标数据查询结果。即在数据实时缓存服务未保存相关查询数据的情况下,直接访问区块链的分布式数据仓库,以并行查询的方式来得到数据查询结果。本申请的方案在进行数据查询的过程中,通过区块链节点上的数据实时缓存服务和分布式数据仓库来实现数据查询处理,在数据实时缓存服务存在缓存数据时,直接从所述数据实时缓存服务得到所述数据查询请求的目标数据查询结果,在数据实时缓存服务不存在缓存数据时,通过分布式数据仓库来实现高效地并行查询,来得到目标数据查询结果,通过在区块链中使用实时缓存服务结合分布式数据仓库来实现数据存储,从而可以有效地实现在区块链的大规模的数据查询处理。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一个实施例中分布式系统应用于区块链系统的结构示意图;
图2为一个实施例中区块结构的示意图;
图3为一个实施例中数据查询方法的流程示意图;
图4为一个实施例中通过直接查询的方法实现数据查询的流程示意图;
图5为一个实施例中通过调用智能合约中的方法实现数据查询的流程示意图;
图6为一个实施例中基于Hive的区块链大规模分布式数据存储引擎系统架构图;
图7为一个实施例中基于Hive和Redis的联盟链进行初始化的流程示意图;
图8为一个实施例中生成新区块后记录哈希到链上并保存大规模数据到各个Apache Hive节点的流程示意图;
图9为一个实施例中数据查询装置的结构框图;
图10为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络资源转移的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
区块链底层平台可以包括用户管理、基础服务、智能合约以及运营监测等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和区块链地址对应关系维护(权限管理)等,并且在授权的情况下,监管和审计某些真实身份的资源转移情况,提供风险控制的规则配置(风控审计);基础服务模块部署在所有区块链节点设备上,用来验证业务请求的有效性,并对有效请求完成共识后记录到存储上,对于一个新的业务请求,基础服务先对接口适配解析和鉴权处理(接口适配),然后通过共识算法将业务信息加密(共识管理),在加密之后完整一致的传输至共享账本上(网络通信),并进行记录存储;智能合约模块负责合约的注册发行以及合约触发和合约执行,开发人员可以通过某种编程语言定义合约逻辑,发布到区块链上(合约注册),根据合约条款的逻辑,调用密钥或者其它的事件触发执行,完成合约逻辑,同时还提供对合约升级注销的功能;运营监测模块主要负责产品发布过程中的部署、配置的修改、合约设置、云适配以及产品运行中的实时状态的可视化输出,例如:告警、监测网络情况、监测节点设备健康状态等。
平台产品服务层提供典型应用的基本能力和实现框架,开发人员可以基于这些基本能力,叠加业务的特性,完成业务逻辑的区块链实现。应用服务层提供基于区块链方案的应用服务给业务参与方进行使用。
本申请实施例涉及的系统可以是由客户端、多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)通过网络通信的形式连接形成的分布式系统,其中,用户终端包括但不限于手机、电脑、智能语音交互设备、智能家电、车载终端、飞行器等。
以分布式系统为区块链系统为例,参见图1,图1是本申请实施例提供的分布式系统100应用于区块链系统的一个可选的结构示意图,由多个节点(接入网络中的任意形式的计算设备,如服务器、用户终端)和客户端形成,节点之间形成组成的点对点网络,点对点协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)协议之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
参见图1示出的区块链系统中各节点的功能,涉及的功能包括:
1)路由,节点具有的基本功能,用于支持节点之间的通信。
节点除具有路由功能外,还可以具有以下功能:
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
例如,应用实现的业务包括:
2.1)钱包,用于提供进行电子货币的转移的功能,包括发起转移请求(即,将当前转移请求的资源转移记录发送给区块链系统中的其他节点,其他节点验证成功后,作为承认资源转移有效的响应,将资源转移的记录数据存入区块链的临时区块中;当然,钱包还支持查询电子货币地址中剩余的电子货币;
2.2)共享账本,用于提供账目数据的存储、查询和修改等操作的功能,将对账目数据的操作的记录数据发送到区块链系统中的其他节点,其他节点验证有效后,作为承认账目数据有效的响应,将记录数据存入临时区块中,还可以向发起操作的节点发送确认。
2.3)智能合约,计算机化的协议,可以执行某个合约的条款,通过部署在共享账本上的用于在满足一定条件时而执行的代码实现,根据实际的业务需求代码用于完成自动化的资源转移,例如查询买家所购买商品的物流状态,在买家签收货物后将买家的电子货币转移到商户的地址;当然,智能合约不仅限于执行用于转移请求的合约,还可以执行对接收的信息进行处理的合约。
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
参见图2,图2是本申请实施例提供的区块结构(Block Structure)一个可选的示意图,每个区块中包括本区块存储转移请求记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
在本文中,需要理解的是,所涉及的术语:
区块链:信息技术领域的一种分布式账本技术,一般由共识、交易区块和状态数据存储、密码学身份安全等内容构成,由于账本是分布式存储的,而且区块是经过共识的,所以具有不可篡改、可追溯、共同维护等特征
智能合约:智能合约(英语:Smartcontract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追寻且不可逆转。
ApacheHive是一个开源的数据仓库框架,它是为了方便数据科学家和分析师处理和查询大规模数据集而构建的。Hive是在Hadoop上构建的,它可以处理和分析大规模的结构化和半结构化数据。
Hive提供了一种类SQL的查询语言,叫做HiveQL,它允许用户编写SQL类型的查询来处理和分析数据。这使得那些熟悉SQL的用户可以很容易地使用Hive,而不需要学习新的查询语言。
Redis:Redis是一种开源的内存数据存储系统,也被称为数据结构服务器。Redis支持多种数据结构,例如字符串、哈希表、列表、集合、有序集合等,可以用于缓存、消息队列、计数器、排行榜、实时数据分析等场景。
哈希:哈希(Hash),也称散列,是一种将任意长度的数据映射为固定长度的数字序列的方法。哈希函数将输入数据转换为大小固定、难以反向推导的哈希值。哈希函数被广泛应用于密码学、数据完整性检查、散列存储和散列查找等领域。
哈希函数有以下几个特点:
1.固定长度:哈希函数将输入数据映射为固定长度的哈希值,通常为几十位或几百位。
2.唯一性:对于不同的输入数据,哈希函数必须生成不同的哈希值,这样可以尽可能避免哈希冲突。
3.不可逆性:哈希函数是单向的,即计算哈希值很容易,但从哈希值中推导出原始数据是不可能的。
4.散列性:对于输入数据的微小变化,哈希函数生成的哈希值应该有很大的不同,这样可以确保哈希函数能够有效地分配数据位置、减少哈希冲突。
哈希函数常用于检测文件完整性、密码验证、数据加密、唯一标识生成等场景。常见的哈希函数有MD5、SHA-1、SHA-256等。但是随着计算能力的提升和哈希算法的安全漏洞被发现,一些哈希函数已经不再安全,需要使用更加安全的哈希函数来保护数据安全。
请求池:区块链的请求池(Transaction Pool,也称为Mempool)是指未被打包到区块中的、等待被写入区块的资源转移请求集合。在区块链网络中,每个节点都会维护一个资源转移请求的请求池,用来存放由用户生成新的资源转移请求。当一个用户发起一个资源转移请求时,该资源转移请求将会被广播到整个网络中。如果资源转移请求符合区块链网络的资源转移规则和验证规则,则会被加入到节点的请求池中。请求池中的资源转移请求在等待打包进区块之前,需要等待被验证和确认请求池是区块链网络中重要的组成部分之一,在保证资源转移请求顺利被处理的同时,也可以提高区块链的效率和性能。
合约查询:区块链的合约查询是一种可以在区块链上运行智能合约的查询方式,它可以使得用户可以通过查询智能合约中的可读公共数据或执行一些只读操作,而不需要创建新的交易。智能合约是一种在区块链上实现自动化和可编程逻辑的机制。使用合约查询的好处是,不会对区块链状态进行任何更改,因为查询只读取合约数据而不执行任何事务。查询结果将被返回给用户,这些结果可以被用于执行特定的业务逻辑或作为数据源用于其他应用程序。合约查询在许多区块链应用中都有广泛应用,如用户账户信息、智能合约状态等,它为应用程序提供了集成和交互外部链数据的一种简单方式。
本申请实施例提供的数据查询方法,可以应用于如图1所示的应用环境中。其中,分布式系统100包含多个区块链节点(简称节点)200,这些节点之间相互形成点对点通信,任意一个与用户对应的节点都可以响应用户的操作,执行本申请的数据查询方法。数据查询方法的流程可以参照图3所示,具体包括:
步骤302,获取针对区块链的数据查询请求。
其中,数据查询请求是指用于查询区块链内数据信息的请求,可以通过执行数据查询请求来在区块链的数据中进行查找,得到数据查询请求所指定的目标数据。数据查询请求中包含了数据查询语句,包含了查询关键词和需要查询的数据类型等相关信息。
示例性地,当用户希望查询区块链中的某部分数据时,可以向区块链节点200提交相应的数据查询请求,以请求区块链节点200开始进行数据查询的相关处理,在区块链的数据中查找到相关数据,并进行反馈显示。例如用户希望通过数据查询请求查找某个账户在过去3天内的资源转移信息,此时可以提交相应的数据查询请求至区块链节点200,区块链节点200在解析数据查询请求得到数据查询语句,而后基于数据查询语句进行数据查询的相关处理。
步骤304,基于数据查询请求访问区块链的数据实时缓存服务,得到数据实时缓存服务基于数据查询请求进行实时查询的缓存数据查询结果。
步骤306,当缓存数据查询结果表征存在查询目标数据时,从数据实时缓存服务得到数据查询请求的目标数据查询结果。
其中,数据实时缓存服务是本申请数据查询方法为了实现数据高效查询,在区块链系统中加载的数据存储系统,可以通过在区块链的每个区块链节点中部署数据实时缓存相关的节点实现。在具体实施例中,数据实时缓存服务具体可以通过Redis实现,Redis是一种开源的内存数据存储系统,也被称为数据结构服务器。Redis支持多种数据结构,例如字符串、哈希表、列表、集合、有序集合等,可以用于缓存、消息队列、计数器、排行榜、实时数据分析等场景。
示例性地,本申请可以通过将数据查询过程中的缓存数据保存到数据实时缓存服务中,在后续查询时,即可在数据实时缓存服务实现对数据查询的实时处理。而直接调用数据实时缓存服务来实现数据查找效率时最高的,因此在得到数据查询请求后,可以直接基于数据查询请求访问区块链的数据实时缓存服务,得到数据实时缓存服务基于数据查询请求进行实时查询的缓存数据查询结果。如果缓存数据查询结果表征缓存中存在数据查询请求所要查询的查询目标数据时,说明这些目标数据查询结果属于热门的查询数据,此时可以直接从缓存中得到这部分查找数据。而如果缓存数据查询结果表征不存在查询目标数据,说明缓存中不存在数据查询请求所要查询的查询目标数据,暂未有人就相同的数据向区块链节点发起查询,此时需要进行进一步地查询,才可以确定区块链中是否存在对应数据查询请求的目标数据查询结果。在其中一个实施例中,本申请的数据实时缓存服务具体通过Redis实现,此时可以预先在区块链的区块链节点上配置Redis服务,而后通过Redis服务来保存查询相关的缓存数据,从而实现区块链的高效数据查询。
步骤308,当缓存数据查询结果表征不存在查询目标数据时,基于数据查询请求访问区块链的分布式数据仓库,通过分布式数据仓库在区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果,汇总并行数据查询结果,得到目标数据查询结果。
其中,分布式数据仓库是以分布式体系结构为基础的数据仓库系统,分布式数据仓库系统包含分布式数据仓库管理系统和分布式数据仓库。在分布式数据仓库系统中,可以对数据仓库进行透明操作,数据仓库中的数据分别在不同的局部数据库中存储、由不同的数据仓库管理系统进行管理、在不同的机器上运行、由不同的操作系统支持、被不同的通信网络连接在一起。数据仓库是一种用于大规模数据存储和分析的机制。数据仓库通常用于企业级别的数据分析和决策支持,如市场营销、财务分析、客户服务等等。在其中一个实施例中,分布式数据仓库具体可以通过Apache Hive实现,Apache Hive是一个开源的数据仓库框架,它是为了方便数据科学家和分析师处理和查询大规模数据集而构建的。Hive是在Hadoop上构建的,它可以处理和分析大规模的结构化和半结构化数据。并行查询是指在区块链中的各个区块链节点同时启动查询进程来进行数据查找,通过并行查询可以有效地区块链的不同区块链节点中查找到所需要查询内容的相关信息。
具体地,如果缓存数据查询结果表征不存在查询目标数据,说明缓存中不存在数据查询请求所要查询的查询目标数据,暂未有人就相同的数据向区块链节点发起查询,此时需要进行进一步地查询。此时,可以基于数据查询请求访问区块链的分布式数据仓库,分布式数据仓库支持同时在区块链的各节点进行并行查询。因此可以通过分布式数据仓库,在数据查询请求基础上进行大规模的数据查找,如果查找到相关的数据,则可以汇总所有的述并行数据查询结果,得到目标数据查询结果。而如果未查找到数据查询请求所指定的数据,则会返回查询结果不存在的错误。在其中一个实施例中,在通过分布式数据仓库查询得到目标数据查询结果后,分布式数据仓库还会将所查询到目标数据查询结果发送到数据实时缓存服务中进行存储,以便后续的高效查询过程所用。
上述数据查询方法,通过在获取针对区块链的数据查询请求后;先基于数据查询请求访问区块链的数据实时缓存服务,得到数据实时缓存服务基于数据查询请求进行实时查询的缓存数据查询结果。从而可以在区块链中,直接基于缓存数据实现高效地数据查找处理。而后当缓存数据查询结果表征存在查询目标数据时,从数据实时缓存服务得到数据查询请求的目标数据查询结果,即在数据实时缓存服务保存了相关查询数据的情况下,直接得到并反馈数据查询的结果。而当缓存数据查询结果表征不存在查询目标数据时,基于数据查询请求访问区块链的分布式数据仓库,通过分布式数据仓库在区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果;汇总并行数据查询结果,得到目标数据查询结果。即在数据实时缓存服务未保存相关查询数据的情况下,直接访问区块链的分布式数据仓库,以并行查询的方式来得到数据查询结果。本申请的方案在进行数据查询的过程中,通过区块链节点上的数据实时缓存服务和分布式数据仓库来实现数据查询处理,在数据实时缓存服务存在缓存数据时,直接从数据实时缓存服务得到数据查询请求的目标数据查询结果,在数据实时缓存服务不存在缓存数据时,通过分布式数据仓库来实现高效地并行查询,来得到目标数据查询结果,通过在区块链中使用实时缓存服务结合分布式数据仓库来实现数据存储,从而可以有效地实现在区块链的大规模的数据查询处理。
在一个示例性的实施例中,数据查询请求包括调用合约的数据查询请求。步骤304包括:提取调用合约的数据查询请求中的智能合约信息;基于智能合约信息启动合约进程;基于合约进程执行智能合约信息中合约语句,访问区块链的数据实时缓存服务,得到数据实时缓存服务基于数据查询请求进行实时查询的缓存数据查询结果。
其中,调用合约的数据查询请求是指可以通过编写智能合约的方式,通过本申请的数据查询方法来实现对区块链的数据查询。其中合约指的是智能合约,它是一种旨在以信息化方式传播、验证或执行合同的计算机协议。
示例性地,用户可以通过直接查询或者通过智能合约查询的方式来实现本申请的数据查询方法,其区别在于用户提交的数据查询请求。如果是大规模数据直接查询,则用户可以发送定制化的查询语句,从而能直接查询区块链中所存储的大规模数据。此外,用户还可以大规模数据合约查询来实现数据查询,即通过发送调用合约的数据查询请求来实现数据查询的处理。调用合约的数据查询请求中包含有智能合约信息,用户可以通过发送数据查询请求来调用仅读的合约方法,从而能直接查询区块链中所存储的大规模数据。相比起定制化的直接查询,通过智能合约的查询,用户可以在智能合约中根据查询需要来进行相应的设置,例如可以通过智能合约来规定最终查询返回数据的格式等,从而可以更有效地满足数据查询的需要,提高数据查询的效率。在通过智能合约查询数据时,区块链节点需要先提取调用合约的数据查询请求中的智能合约信息,而后基于智能合约信息启动合约进程,从而可以在合约进程中依次执行合约语句。从而访问区块链的数据实时缓存服务和区块链的分布式数据仓库,从缓存或者数据仓库中取出所需要的目标数据查询结果。在具体的实施例中,为了防止区块链出现没有通过共识的数据,可以在智能合约信息中合约语句的执行过程中对合约语句进行检测,对其中涉及到将内容写入区块链的语句进行忽略处理或者报错处理,以确保逻辑判断合约中没有写入区块链的语句。本实施例中,通过智能合约的方式来进行数据查询,可以有效地拓展数据查询的功能,同时保证查询的效率与准确性。
在一个示例性的实施例中,步骤304包括:提取数据查询请求中的签名数据;基于签名数据对数据查询请求进行签名验证处理;对通过签名验证处理的数据查询请求进行权限验证处理;当数据查询请求通过权限验证时,将数据查询请求保存至查询服务队列;通过区块链的数据实时缓存服务,依次对查询服务队列中的数据查询请求进行实时查询,得到缓存数据查询结果。
其中,签名数据即区块链的数字签名,具体是指一段用于签名的字符,在区块链网络中,每个节点都拥有一份公私钥对,节点发送请求时,先利用自己的私钥对请求内容进行签名,并将签名附加在请求中。其他节点收到广播消息后,首先对请求中附加的数字签名进行验证,完成消息完整性校验和消息发送者身份合法性校验后,请求才会触发后面的处理流程。而对于权限验证,不同的用户对应了区块链的不同权限,例如只有不在黑名单的用户才可以进行数据查询。因此,可以通过权限验证对数据查询请求进行验证,确定发送请求的用户是否在区块链黑名单上。
示例性地,区块链节点在接收到数据查询请求时,会先提取出其中包含的签名数据,而后基于签名数据对数据查询请求进行签名验证处理,确定提交请求的用户是否存在。当签名验证通过时,确定用户存在后,再对通过签名验证处理的数据查询请求进行权限验证处理,确定该用户是否在区块链的黑名单上,当数据查询请求通过权限验证时,将数据查询请求保存至查询服务队列。而针对查询服务队列中的请求数据,区块链节点会通过区块链的数据实时缓存服务,依次对查询服务队列中的数据查询请求进行实时查询,得到缓存数据查询结果。本实施例中,通过签名验证和权限验证来对数据查询请求进行验证,从而保证对区块链中数据进行查询处理的合法性与有效性。
在一个示例性的实施例中,当数据查询请求通过权限验证时,将数据查询请求保存至查询服务队列包括:当数据查询请求通过权限验证时,确定查询服务队列的排队信息;当排队信息表征查询服务队列未满时,以负载均衡的方式将数据查询请求保存至查询服务队列。
其中,排队信息是指当前查询服务队列中每个队列内处于排队状态的数据查询请求的数量信息。每个查询服务队列都有请求度的限额,只有存在未满的队列时,数据查询请求才能被进行有效地处理,而若是所有的查询服务队列都为已满状态,则可以直接向发送数据查询请求返回查询拥挤的信息。而当排队信息表征查询服务队列未满时,则可以通过负载均衡的方式将数据查询请求保存至查询服务队列,此处具体可以识别不同查询服务队列中的请求数量,而后将当前接收到的数据查询请求分配到请求数量最少的游戏中,从而实现负载均衡的处理。在其中一个实施例中,对于从查询服务队列中取出数据查询请求处理的过程,还可以使用当前时间戳减去数据查询请求的时间戳判断是否超过阈值,当超过阈值时,则可以向用户返回查询超时的信息,而只有在未超过阈值时,才会对数据查询请求进行处理。本实施例中,通过查询服务队列来对数据查询请求进行队列化和负载均衡的处理,可以对多并发的数据查询请求进行有效地分流处理,从而保证请求处理的效率与准确性。
在一个示例性的实施例中,本申请中的数据实时缓存服务通过Redis实现,分布式数据仓库通过Hive实现,此时,用户直接访问Redis和Apache Hive查询区块链上所存储数据的流程可以参照图4所示,具体如下:
步骤401,用户发送数据查询请求到区块链节点上。
步骤402,区块链节点网络模块识别到类型为数据查询。
步骤403,签名验证是否通过?是则转到步骤405,否则转到步骤404。
步骤404,返回签名验证失败的错误。转到步骤424。
步骤405,权限验证是否通过?是则转到步骤407,否则转到406。
步骤406,返回该用户无权限进行此操作的错误。转到步骤424。
步骤407,查询服务模块中的队列是否已满?是则转到步骤408,否则转到409。
步骤408,返回查询拥挤的错误。转到步骤423。
步骤409,将上述请求放入队列中依次执行,队列可能有多个进行负载均衡。
步骤410,查询服务模块依次取出请求。
步骤411,当前时间戳减去上述请求的时间戳是否超过阈值?是则转到步骤412,否则转到步骤413。
步骤412,返回查询超时的错误。转到步骤423。
步骤413,访问存储模块的Redis服务查询数据。
步骤414,Redis中是否含有上述数据?是则转到步骤415,否则转到步骤416。
步骤415,Redis服务直接返回查询结果,转到步骤423。
步骤416,访问存储模块的Apache Hive查询数据。
步骤417,Apache Hive访问所有部署的节点进行并行查询。
步骤418,Apache Hive中是否含有上述数据?是则转到步骤420,否则转到步骤419。
步骤419,存储模块返回查询结果不存在的错误。转到步骤423。
步骤420,Apache Hive聚合所有查询的结果并发送到Redis服务中进行存储。
步骤421,Redis根据缓存淘汰机制来淘汰过期数据,存储新数据。
步骤422,存储模块将返回结果返回给查询服务模块。
步骤423,查询服务模块返回查询结果给网络模块。
步骤424,网络模块返回结果给用户。
本实施例中,区块链节点可以在接收到数据查询请求后,先通过签名验证和权限验证的方式对请求合法性进行验证处理,验证未通过时,直接返回相应的查询失败信息,而验证通过后,再通过查询服务模块中的队列来对请求进行排队处理和负载均衡处理,同时在对查询拥挤和请求超时的情况进行处理。在查询处理过程中,则先通过Redis服务查询是否缓存有相应的数据查询结果,当不存在时,再通过Apache Hive以并行查询的方式来得到数据查询结果,最后进行相应的查询结果反馈。
在一个示例性的实施例中,本申请中的数据实时缓存服务通过Redis实现,分布式数据仓库通过Hive实现,此时,用户通过调用智能合约中的方法来访问Redis和ApacheHive查询区块链上所存储数据的流程可以参照图5所示,具体如下:
步骤501,用户将需要查询数据以数据查询请求的方式发送到区块链节点上。
步骤502,区块链节点网络模块识别到类型为合约查询。
步骤503,签名验证是否通过?是则转到步骤505,否则转到步骤504。
步骤504,返回签名验证失败的错误。转到步骤532。
步骤505,权限验证是否通过?是则转到步骤507,否则转到506。
步骤506,返回该用户无权限进行此操作的错误。转到步骤532。
步骤507,查询服务模块中的队列是否已满?是则转到步骤508,否则转到步骤509。
步骤508,返回查询拥挤的错误。转到步骤531。
步骤509,将上述请求放入队列中依次执行,队列可能有多个进行负载均衡。
步骤510,查询服务模块依次取出请求。
步骤511,当前时间戳减去上述请求的时间戳是否超过阈值?是则转到步骤512,否则转到步骤513。
步骤512,返回查询超时的错误。转到步骤531。
步骤513,虚拟机模块根据请求中的合约信息启动对应的合约进程。
步骤514,合约进程调用查询方法。
步骤515,合约进程依次执行合约语句。
步骤516,当前语句为返回的语句?是则转到步骤530,否则转到步骤517。
步骤517,当前语句为调用SQL查询SDK语句?是则转到步骤518,否则转到步骤529。
步骤518,合约进程启动Hive访问客户端。
步骤519,客户端先访问Redis与Hive访问客户端。
步骤520,Redis中是否含有上述数据?是则转到步骤521,否则转到步骤522。
步骤521,Redis服务直接返回查询结果。转到步骤528。
步骤522,访问存储模块的Hive查询数据。
步骤523,Apache Hive访问所有部署的节点进行并行查询。
步骤524,Apache Hive中是否含有上述数据?是则转到步骤526,否则转到步骤525。
步骤525,存储模块返回查询结果不存在的错误。转到步骤528。
步骤526,Apache Hive聚合所有查询的结果发送到Redis服务中进行存储。
步骤527,Redis根据缓存淘汰机制来淘汰过期数据,存储新数据。
步骤528,存储模块将返回结果返回给合约进程客户端。转到步骤515。
步骤529,合约进程执行当前普通语句。转到步骤515。
步骤530,合约进程将结果返回给查询服务模块。
步骤531,查询服务模块将结果返回给网络模块。
步骤532,网络模块将结果返回给用户。
相对比图4的实施例中,本实施例在识别出数据查询请求的查询类型为合约查询后,通过合约信息启动对应的合约进程,再执行合约语句来进行数据查询,当合约语句为查询语句时,通过Redis和Apache Hive来进行数据查询,而当合约语句为普通语句时,直接执行后续语句,通过智能合约来实现数据查询,提高查询的拓展性。
在一个示例性的实施例中,方法还包括:获取区块链中区块链节点的节点信息和节点之间的通信信息;基于节点信息和节点之间的通信信息,为区块链配置数据实时缓存服务和分布式数据仓库服务。
其中,节点的节点信息是指根据区块链的类型为区块链节点所赋予的角色和数量等信息。节点之间的通信信息则是指节点之间的通信方式和协议,例如http节点等。
示例性地,在通过本申请数据查询方法来实现区块链中的数据查询处理之前,还需要先基于数据实时缓存服务和分布式数据仓库来实现区块链初始化,从而在区块链中部署相应服务节点。为区块链配置数据实时缓存服务和分布式数据仓库服务时,具体可以先基于节点信息和节点之间的通信信息,配置服务的名称、节点发现方式和端口等信息,从而分别配置数据实时缓存服务和分布式数据仓库服务,而后建立数据实时缓存服务和分布式数据仓库服务两者之间的关联性。再对两者进行监测和验证,最终配置相应的服务参数来实现服务配置的完整流程。实施例中,通过为区块链配置数据实时缓存服务和分布式数据仓库服务,可以有效地为区块链中配置缓存服务和数据仓库服务,从而为区块链的数据查询处理过程提供服务基础,保证数据查询的效率和准确性。
在一个示例性的实施例中,基于节点信息和节点之间的通信信息,为区块链配置数据实时缓存服务和分布式数据仓库服务包括:基于节点信息和节点之间的通信信息,在区块链中的区块链节点上配置数据实时缓存服务集群节点和分布式数据仓库节点;初始化分布式数据仓库节点的数据库和数据表;对数据实时缓存服务集群节点和分布式数据仓库节点进行数据同步处理;基于数据同步处理后的数据实时缓存服务集群节点和分布式数据仓库节点,对区块链节点进行配置更新处理。
示例性地,对于数据实时缓存服务,可以基于节点信息和节点之间的通信信息,在每个区块链节点上配置Redis服务,包括端口,密码,缓存大小等信息。而对于分布式数据仓库服务,可以基于节点信息和节点之间的通信信息等,在每个区块链节点上配置Hive集群节点,包括Hive集群的名称,节点的发现方式等信息。而后先初始化分布式数据仓库节点的数据库和数据表,完成对数据仓库服务的初始化,再对数据实时缓存服务集群节点和分布式数据仓库节点进行数据同步处理,实现数据实时缓存服务和分布式数据仓库服务两者的数据打通,保证数据查询的准确性。最后,再基于数据同步处理后的数据实时缓存服务集群节点和分布式数据仓库节点,对区块链节点进行配置更新处理。本实施例中,通过对数据实时缓存服务集群节点和分布式数据仓库节点进行数据同步处理,实现数据打通,可以有效提高基于数据实时缓存服务和数据仓库进行区块链中数据查询处理的准确性。
在一个示例性的实施例中,在配置更新处理之前,还包含了部署监测服务,和通过监测服务来对数据实时缓存服务集群节点和分布式数据仓库节点进行验证的处理过程。此时,需要先为数据同步处理后的数据实时缓存服务集群节点和分布式数据仓库节点中的每个节点都配置监测服务和告警服务,用于监测集群的状态和性能,并及时发现和解决问题,而后基于监测服务和告警服务,对数据实时缓存服务集群节点和分布式数据仓库节点进行验证处理,此处具体可以通过API或者命令行工具来验证节点集群的状态和健康状况,只有当验证处理通过时,才会基于数据同步处理后的数据实时缓存服务集群节点和分布式数据仓库节点,来对区块链节点进行配置更新处理。通过对数据实时缓存服务集群节点和分布式数据仓库节点的验证处理,可以保证数据实时缓存服务集群节点和分布式数据仓库节点的有效性,从而保证数据存储和数据检索过程的处理准确性与效率。
在一个示例性的实施例中,对于配置更新的具体过程,可以预先在区块链初始化的过程中导入配置文件,而后当数据实时缓存服务集群节点和分布式数据仓库节点完成同步时,即可生成对应的配置查询信息;而后通过基于配置查询信息调用已经导入到区块链中的节点配置信息,从而基于节点配置信息对区块链节点进行配置更新处理。可以基于节点配置信息先设置区块链节点的配置,包括节点访问的IP、端口、证书和区块配置等。而后在基于节点配置信息,来设置区块链节点的数据实时缓存服务集群节点和分布式数据仓库节点相关的配置,具体包括访问IP、端口等。本实施例中,通过调用节点配置信息来实现对区块链节点的配置更新处理,可以有效保证节点信息配置的准确性与效率。
在其中一个实施例中,本申请的数据实时缓存服务基于Redis实现,而分布式数据仓库基于Hive实现,此时基于Hive的区块链大规模分布式数据存储引擎系统架构可以参见图6所示,图6中阐述了该服务的内部实现,各个模块之间的交互情况,具体包括:
网络模块,区块链节点对外进行网络交互的模块;其功能包括资源转移的上链处理和查询请求的处理。其中对于资源转移的上链处理,用户发送资源转移处理请求后,希望这笔资源转移处理请求被合约执行,被新区块打包,并存储到区块链账本和数据库中。而查询请求具体包括了大规模数据直接查询和大规模数据合约查询,对于大规模数据直接查询,用户发送查询语句,希望能直接查询Apache Hive中的大规模数据;而对于大规模数据合约查询,则由用户发送调用仅读的合约方法,希望通过合约查询并处理Apache Hive中的数据再返回。
鉴权模块,区块链对请求进行权限验证的模块;可以实现签名验证和权限验证的功能。签名验证为区块链对请求的签名进行验证;权限验证为区块链对请求者身份的权限进行判断,即是否有权限进行请求操作
查询服务模块,响应网络模块的请求,并执行查询服务的模块。
请求池模块,缓存资源转移请求并执行的模块。主要实现请求打包的功能,可以打包下个区块的所有资源转移请求到区块调度模块准备执行。
区块调度模块,调度区块中的资源转移请求并生成新区块的模块。实现请求分发调度和区块生成的功能,其中请求分发调度可以将当前区块待执行的资源转移请求进行调度和分发到虚拟机模块进行执行。区块生成则可以执行完当前区块中的所有资源转移请求后生成新区块。
虚拟机模块,即执行资源转移请求的模块,包括合约仓库和合约进程等功能,其中合约仓库用于保存所有智能合约的代码仓库,合约进程则是合约启动的运行时状态。Apache Hive SDK,合约访问Redis以及Apache Hive的接口,例如查询、存储等。Redis与Hive客户端,实际访问存储模块Redis和Apache Hive的客户端。
共识模块,区块链节点进行共识投票的模块。
存储模块,区块链节点存储区块链数据的模块,包括:Redis服务,缓存大量时序数据的内存数据库;Apache Hive,存储大规模数据的分布式数据库;状态数据库,存储最新变量状态的数据库(不包括时序数据);区块账本,存储区块的文本文件。
在其中一个实施例中,本申请的数据实时缓存服务基于Redis实现,而分布式数据仓库基于Hive实现,区块链通过联盟链实现。此时,对基于Hive和Redis的联盟链进行初始化的流程可以参照图7所示,包括:
步骤701,确定联盟链节点的角色和数量以及节点之间的通信方式和协议。
步骤702,在每个区块链节点上配置Hive集群节点,包括Hive集群的名称,节点的发现方式等信息。
步骤703,在每个区块链节点上配置Redis服务,包括端口,密码,缓存大小等。
步骤704,初始化Hive的数据库和表。
步骤705,配置Hive和Redis之间的数据同步。
步骤706,配置Hive和Redis的监测和告警,用于监测集群的状态和性能,并及时发现和解决问题。
步骤707,验证集群,可以使用Hive和Redis的API或者命令行工具来验证集群的状态和健康状况。
步骤708,Hive和Redis是否能够正常工作?是则转到步骤710,否则转到步骤709。
步骤709,返回Hive和Redis部署失败的错误。
步骤710,设置联盟链节点的配置,包括节点访问的IP,端口,证书和区块配置等。
步骤711,设置联盟链节点的Hive和Redis相关的配置,包括访问IP,端口等。
步骤712,启动联盟链所有节点。
本实施例中,通过先识别联盟链节点的相关信息,而后在联盟链节点上配置用于实现数据实时缓存服务的Redis服务和分布式数据仓库的Hive集群节点,并分别对两者进行数据同步与验证处理,并在验证完成后再设置联盟链节点、Hive和Redis相关的配置信息,完成联盟链的初始化过程,可以有效提高联盟链的数据查询效率。
在一个示例性的实施例中,方法还包括:基于已接受到资源转移请求调用智能合约执行资源转移处理,得到资源转移结果;基于资源转移结果生成区块链的下一区块;将下一区块发送至区块链的各区块节点进行共识处理,得到共识结果;基于共识结果进行共识校验处理;当共识校验处理通过时,对下一区块进行存储处理。
其中,共识处理即通过共识机制来对新生成区块进行处理的方式,区块链作为一种按时间顺序存储数据的数据结构,可支持不同的共识机制。共识机制是区块链技术的重要组件。区块链共识机制的目标是使所有的诚实节点保存一致的区块链视图,同时满足两个性质:一致性。所有诚实节点保存的区块链的前缀部分完全相同。有效性。由某诚实节点发布的信息终将被其他所有诚实节点记录在自己的区块链中。
具体地,当所有的资源处理请求处理完毕,生成下一区块后,为了将新生成的区块存储在区块链中,需要区块链上的节点来完成对该新生成区块的共识处理,此时将下一区块发送至区块链的各区块节点进行共识处理,得到各区块节点对新生成的下一区块的共识结果。而在得到各区块节点反馈的共识结果后,可以基于共识结果进行共识校验处理;如果共识校验处理通过,则可以对下一区块进行存储处理,从而更新区块链。若共识校验未通过,则直接反馈共识校验失败的信息。本实施例中,通过共识校验来对生成的下一区块进行校验处理,从而可以将生成的区块保存到区块链中,完成请求处理的全流程。
在一个实施例中,基于已接受到资源转移请求调用智能合约执行资源转移处理,得到资源转移结果包括:基于已接受到资源转移请求启动智能合约的合约进程,通过合约进程执行资源转移处理;当资源转移处理的执行过程中接收到针对区块链的数据查询请求时,基于数据查询请求调用区块链的区块快照;基于区块快照确定针对区块链的数据查询请求对应的数据查询结果。
具体地,在对资源转移请求处理,进行新区块生成的过程中,也可能接收到针对区块链的数据查询请求,此时为了确保查询请求不会影响区块的生成,同时保证数据查询处理的效率与准确性,可以在生成区块之前先保存区块链的区块快照,而后在区块生成过程中,如果接收到针对区块链的数据查询请求,则可直接基于数据查询请求调用区块链的区块快照,而后在区块快照的基础上进行数据查询处理。在一个实施例中,在得到数据查询结果后,可以确定数据查询结果所对应的查询数据为热点数据,即基于数据查询结果得到数据查询热点数据;而后通过数据实时缓存服务对数据查询热点数据进行存储处理。每次通过分布式数据仓库进行数据查询之后,都可以将查询得到的目标数据查询结果保存到数据实时缓存服务中,此外对于数据实时缓存服务,则可以根据缓存淘汰机制来淘汰过期数据,存储新数据,缓存淘汰机制具体可以依据时间淘汰,例如淘汰缓存时间在1天之内的目标数据查询结果,此外还可以根据目标数据查询结果的占用大小来进行淘汰,例如当数据实时缓存服务中存储的目标数据查询结果超过10G后,按照从旧到新的顺序淘汰原先缓存的目标数据查询结果。本实施例中,通过区块快照来实现区块生成过程中的数据查询处理,可以有效地保证区块数据查询的全面性,保证数据查询的准确性。
在其中一个实施例中,本申请的数据实时缓存服务基于Redis实现,而分布式数据仓库基于Hive实现,此时区块链在成功生成新区块后记录哈希到链上并保存大规模数据到各个Apache Hive节点的流程具体可以参照图8所示,包括:
步骤801,用户将资源转移请求发送到区块链节点上。
步骤802,区块链节点网络模块识别到类型为请求上链。
步骤803,签名验证是否通过?是则转到步骤805,否则转到步骤804。
步骤804,返回签名验证失败的错误。转到步骤825。
步骤805,权限验证是否通过?是则转到步骤807,否则转到步骤806。
步骤806,返回该用户无权限进行此操作的错误。转到步骤825。
步骤807,区块链节点将该资源转移请求放入请求池中。
步骤808,区块链主节点区块调度模块开始出新区块。
步骤809,区块调度模块从请求池打包一批资源转移请求作为新区块的所有资源转移请求准备执行。
步骤810,区块调度模块按照一定调度算法将资源转移请求分发调度到虚拟机模块进行执行。
步骤811,虚拟机模块从合约仓库搜索是否有资源转移请求对应的智能合约?是则转到步骤813,否则转到步骤812。
步骤812,虚拟机模块标记这次资源转移请求的合约不存在。转到步骤818。
步骤813,虚拟机模块启动合约进程来执行当前这次资源转移请求。
步骤814,执行过程中是否遇到调用Hive的mysql语句?是则转到步骤815,否则转到步骤817。
步骤815,合约进程调用存储模块的Apache Hive基于上个区块的快照来进行查询和存储。
步骤816,存储模块记录所有数据更改的日志,包括插入,更新和删除操作的详细信息,以及所涉及的数据表和行。
步骤817,合约进程执行完成这次资源转移请求。
步骤818,区块调度模块将这次资源转移请求打包进区块中。
步骤819,区块调度模块计算区块的元数据,如哈希值,时间戳等。
步骤820,共识模块将上述区块发送给所有从节点进行验证。
步骤821,所有节点达成一致的共识?是则转到步骤823,否则转到步骤822。
步骤822,丢弃区块,返回共识失败的错误,使用之前记录的快照和日志将ApacheHive恢复到最新的快照。
步骤823,所有节点将合约进程查询过的热点数据存储Redis服务中。
步骤824,所有节点将新的区块追加到区块账本中。
本实施例中,如果在执行资源转移请求的过程中接收到查询相关的信息,则可以通过调用存储模块的Apache Hive基于上个区块的快照来进行查询和存储,从而有效地在资源转移处理以及区块生成的过程中,完成对区块链数据查询的处理,保证数据查询的连续性。
应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的数据查询方法的数据查询装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个数据查询装置实施例中的具体限定可以参见上文中对于数据查询方法的限定,在此不再赘述。
在一个示例性的实施例中,如图9所示,提供了一种数据查询装置,包括:
请求识别模块902,用于获取针对区块链的数据查询请求。
第一数据查询模块904,用于基于数据查询请求访问区块链的数据实时缓存服务,得到数据实时缓存服务基于数据查询请求进行实时查询的缓存数据查询结果。
第一结果获取模块906,用于当缓存数据查询结果表征存在查询目标数据时,从数据实时缓存服务得到数据查询请求的目标数据查询结果。
第二数据查询模块908,用于当缓存数据查询结果表征不存在查询目标数据时,基于数据查询请求访问区块链的分布式数据仓库,通过分布式数据仓库在区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果,用于汇总并行数据查询结果,得到目标数据查询结果。
在一个实施例中,数据查询请求包括调用合约的数据查询请求。第一数据查询模块904具体用于:提取调用合约的数据查询请求中的智能合约信息;基于智能合约信息启动合约进程;基于合约进程执行智能合约信息中合约语句,访问区块链的数据实时缓存服务,得到数据实时缓存服务基于数据查询请求进行实时查询的缓存数据查询结果。
在一个实施例中,第一数据查询模块904还用于:提取数据查询请求中的签名数据;基于签名数据对数据查询请求进行签名验证处理;对通过签名验证处理的数据查询请求进行权限验证处理;当数据查询请求通过权限验证时,将数据查询请求保存至查询服务队列;通过区块链的数据实时缓存服务,依次对查询服务队列中的数据查询请求进行实时查询,得到缓存数据查询结果。
在一个实施例中,第一数据查询模块904还用于:当数据查询请求通过权限验证时,确定查询服务队列的排队信息;当排队信息表征查询服务队列未满时,以负载均衡的方式将数据查询请求保存至查询服务队列。
在一个实施例中,还包括服务初始化模块,用于:获取区块链中区块链节点的节点信息和节点之间的通信信息;基于节点信息和节点之间的通信信息,为区块链配置数据实时缓存服务和分布式数据仓库服务。
在一个实施例中,服务初始化模块还用于:基于节点信息和节点之间的通信信息,在区块链中的区块链节点上配置数据实时缓存服务集群节点和分布式数据仓库节点;初始化分布式数据仓库节点的数据库和数据表;对数据实时缓存服务集群节点和分布式数据仓库节点进行数据同步处理;基于数据同步处理后的数据实时缓存服务集群节点和分布式数据仓库节点,对区块链节点进行配置更新处理。
在一个实施例中,服务初始化模块还用于:为数据同步处理后的数据实时缓存服务集群节点和分布式数据仓库节点配置监测服务和告警服务;基于监测服务和告警服务,对数据实时缓存服务集群节点和分布式数据仓库节点进行验证处理;当验证处理通过时,基于数据同步处理后的数据实时缓存服务集群节点和分布式数据仓库节点,对区块链节点进行配置更新处理。
在一个实施例中,服务初始化模块还用于:基于数据同步处理后的数据实时缓存服务集群节点和分布式数据仓库节点生成配置查询信息;基于配置查询信息调用节点配置信息;基于节点配置信息对区块链节点进行配置更新处理。
在一个实施例中,还包括区块生成模块,用于:基于已接受到资源转移请求调用智能合约执行资源转移处理,得到资源转移结果;基于资源转移结果生成区块链的下一区块;将下一区块发送至区块链的各区块节点进行共识处理,得到共识结果;基于共识结果进行共识校验处理;当共识校验处理通过时,对下一区块进行存储处理。
在一个实施例中,区块生成模块还用于:基于已接受到资源转移请求启动智能合约的合约进程,通过合约进程执行资源转移处理;当资源转移处理的执行过程中接收到针对区块链的数据查询请求时,基于数据查询请求调用区块链的区块快照;基于区块快照确定针对区块链的数据查询请求对应的数据查询结果。
在一个实施例中,还包括查询数据缓存模块,用于:基于数据查询结果得到数据查询热点数据;通过数据实时缓存服务对数据查询热点数据进行存储处理。
上述数据查询装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个示例性的实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括处理器、存储器、输入/输出接口(Input/Output,简称I/O)和通信接口。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据查询相关的数据。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据查询方法。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要符合相关规定。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (15)
1.一种数据查询方法,其特征在于,所述方法包括:
获取针对区块链的数据查询请求;
基于所述数据查询请求访问所述区块链的数据实时缓存服务,得到数据实时缓存服务基于所述数据查询请求进行实时查询的缓存数据查询结果;
当所述缓存数据查询结果表征存在查询目标数据时,从所述数据实时缓存服务得到所述数据查询请求的目标数据查询结果;
当所述缓存数据查询结果表征不存在查询目标数据时,基于所述数据查询请求访问所述区块链的分布式数据仓库,通过所述分布式数据仓库在所述区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果,汇总所述并行数据查询结果,得到目标数据查询结果。
2.根据权利要求1所述的方法,其特征在于,所述数据查询请求包括调用合约的数据查询请求;
所述基于所述数据查询请求访问所述区块链的数据实时缓存服务,得到数据实时缓存服务基于所述数据查询请求进行实时查询的缓存数据查询结果包括:
提取所述调用合约的数据查询请求中的智能合约信息;
基于所述智能合约信息启动合约进程;
基于所述合约进程执行所述智能合约信息中合约语句,访问所述区块链的数据实时缓存服务,得到数据实时缓存服务基于所述数据查询请求进行实时查询的缓存数据查询结果。
3.根据权利要求1所述的方法,其特征在于,所述基于所述数据查询请求访问所述区块链的数据实时缓存服务,得到数据实时缓存服务基于所述数据查询请求进行实时查询的缓存数据查询结果包括:
提取所述数据查询请求中的签名数据;
基于所述签名数据对所述数据查询请求进行签名验证处理;
对通过签名验证处理的数据查询请求进行权限验证处理;
当所述数据查询请求通过权限验证时,将所述数据查询请求保存至查询服务队列;
通过所述区块链的数据实时缓存服务,依次对所述查询服务队列中的数据查询请求进行实时查询,得到缓存数据查询结果。
4.根据权利要求3所述的方法,其特征在于,所述当所述数据查询请求通过权限验证时,将所述数据查询请求保存至查询服务队列包括:
当所述数据查询请求通过权限验证时,确定查询服务队列的排队信息;
当所述排队信息表征所述查询服务队列未满时,以负载均衡的方式将所述数据查询请求保存至查询服务队列。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取区块链中区块链节点的节点信息和节点之间的通信信息;
基于所述节点信息和所述节点之间的通信信息,为所述区块链配置数据实时缓存服务和分布式数据仓库服务。
6.根据权利要求5所述的方法,其特征在于,所述基于所述节点信息和所述节点之间的通信信息,为所述区块链配置数据实时缓存服务和分布式数据仓库服务包括:
基于所述节点信息和所述节点之间的通信信息,在所述区块链中的区块链节点上配置数据实时缓存服务集群节点和分布式数据仓库节点;
初始化所述分布式数据仓库节点的数据库和数据表;
对所述数据实时缓存服务集群节点和所述分布式数据仓库节点进行数据同步处理;
基于所述数据同步处理后的所述数据实时缓存服务集群节点和所述分布式数据仓库节点,对所述区块链节点进行配置更新处理。
7.根据权利要求6所述的方法,其特征在于,所述基于所述数据同步处理后的所述数据实时缓存服务集群节点和所述分布式数据仓库节点,对所述区块链节点进行配置更新处理包括:
为数据同步处理后的所述数据实时缓存服务集群节点和所述分布式数据仓库节点配置监测服务和告警服务;
基于所述监测服务和告警服务,对所述数据实时缓存服务集群节点和所述分布式数据仓库节点进行验证处理;
当所述验证处理通过时,基于所述数据同步处理后的所述数据实时缓存服务集群节点和所述分布式数据仓库节点,对所述区块链节点进行配置更新处理。
8.根据权利要求6所述的方法,其特征在于,所述基于所述数据同步处理后的所述数据实时缓存服务集群节点和所述分布式数据仓库节点,对所述区块链节点进行配置更新处理包括:
基于所述数据同步处理后的所述数据实时缓存服务集群节点和所述分布式数据仓库节点生成配置查询信息;
基于所述配置查询信息调用节点配置信息;
基于所述节点配置信息对所述区块链节点进行配置更新处理。
9.根据权利要求1至8任意一项所述的方法,其特征在于,所述方法还包括:
基于已接受到资源转移请求调用智能合约执行资源转移处理,得到资源转移结果;
基于所述资源转移结果生成所述区块链的下一区块;
将所述下一区块发送至所述区块链的各区块节点进行共识处理,得到共识结果;
基于所述共识结果进行共识校验处理;
当所述共识校验处理通过时,对所述下一区块进行存储处理。
10.根据权利要求9所述的方法,其特征在于,所述基于已接受到资源转移请求调用智能合约执行资源转移处理,得到资源转移结果包括:
基于已接受到资源转移请求启动所述智能合约的合约进程,通过所述合约进程执行资源转移处理;
当所述资源转移处理的执行过程中接收到针对区块链的数据查询请求时,基于所述数据查询请求调用所述区块链的区块快照;
基于所述区块快照确定所述针对区块链的数据查询请求对应的数据查询结果。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
基于所述数据查询结果得到数据查询热点数据;
通过所述数据实时缓存服务对所述数据查询热点数据进行存储处理。
12.一种数据查询装置,其特征在于,所述装置包括:
请求识别模块,用于获取针对区块链的数据查询请求;
第一数据查询模块,用于基于所述数据查询请求访问所述区块链的数据实时缓存服务,得到数据实时缓存服务基于所述数据查询请求进行实时查询的缓存数据查询结果;
第一结果获取模块,用于当所述缓存数据查询结果表征存在查询目标数据时,从所述数据实时缓存服务得到所述数据查询请求的目标数据查询结果;
第二数据查询模块,用于当所述缓存数据查询结果表征不存在查询目标数据时,基于所述数据查询请求访问所述区块链的分布式数据仓库,通过所述分布式数据仓库在所述区块链的各节点进行并行查询,得到各节点对应的并行数据查询结果,用于汇总所述并行数据查询结果,得到目标数据查询结果。
13.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至11中任一项所述的方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
15.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311160089.3A CN117194482A (zh) | 2023-09-08 | 2023-09-08 | 数据查询方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311160089.3A CN117194482A (zh) | 2023-09-08 | 2023-09-08 | 数据查询方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117194482A true CN117194482A (zh) | 2023-12-08 |
Family
ID=88991905
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311160089.3A Pending CN117194482A (zh) | 2023-09-08 | 2023-09-08 | 数据查询方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117194482A (zh) |
-
2023
- 2023-09-08 CN CN202311160089.3A patent/CN117194482A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11611441B2 (en) | Decentralized database optimizations | |
EP3673620B1 (en) | Shared blockchain data storage | |
EP3669280B1 (en) | Shared blockchain data storage | |
US11283617B2 (en) | Systems and methods for state of data management | |
CN109791594B (zh) | 在关系数据库上执行写入和存储操作的方法及可读介质 | |
US10754848B2 (en) | Method for registration of data in a blockchain database and a method for verifying data | |
CN102170440B (zh) | 适用于存储云间数据安全迁移的方法 | |
CN110647503A (zh) | 一种分布式存储方法及装置 | |
Li et al. | Integrity-verifiable conjunctive keyword searchable encryption in cloud storage | |
CN111201519A (zh) | 用于低时延读取和写入大型数据集的不可变数据存储 | |
EP3744071B1 (en) | Data isolation in distributed hash chains | |
Weintraub et al. | Data integrity verification in column-oriented NoSQL databases | |
Lai et al. | A blockchain-based traceability system with efficient search and query | |
Zhang et al. | A blockchain based searchable encryption scheme for multiple cloud storage | |
Zhou et al. | Integrity preserving multi-keyword searchable encryption for cloud computing | |
Trueman et al. | Ensuring privacy and data freshness for public auditing of shared data in cloud | |
CN117194482A (zh) | 数据查询方法、装置、计算机设备和存储介质 | |
CN113449014A (zh) | 一种基于区块链的选择性云数据查询系统 | |
US11271716B1 (en) | Blockchain-based data management of distributed binary objects | |
CN117035740B (zh) | 桥梁结构检测监测与维修数据溯源系统的构建方法 | |
Zhang et al. | An integrity verification scheme for multiple replicas in clouds | |
Han et al. | A search optimized blockchain‐based verifiable searchable symmetric encryption framework | |
CN117251584A (zh) | 区块链网络的数据处理方法、装置、产品、设备和介质 | |
Gupta et al. | Blockchain Enabled Hadoop Distributed File System Framework for Secure and Reliable Traceability | |
CN116391197A (zh) | 优化区块链网络上的数据交易和验证 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |