CN107273455B - 区块链数据访问方法和装置 - Google Patents
区块链数据访问方法和装置 Download PDFInfo
- Publication number
- CN107273455B CN107273455B CN201710402043.6A CN201710402043A CN107273455B CN 107273455 B CN107273455 B CN 107273455B CN 201710402043 A CN201710402043 A CN 201710402043A CN 107273455 B CN107273455 B CN 107273455B
- Authority
- CN
- China
- Prior art keywords
- data
- blockchain
- block chain
- storage space
- shared
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1727—Details of free space management performed by the file system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/176—Support for shared access to files; File sharing support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种区块链数据访问方法,该方法包括步骤:当侦测到执行区块链实例的执行指令时,获取执行所述执行指令的区块链节点;将所述区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的所述区块链节点对应着同一份共享数据;设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据。本发明还公开了一种区块链数据访问装置。本发明在区块链节点数据已经分布式存储的基础上,对区块链节点进行分组,使同一区块链分组内的区块链节点共同访问同一份共享数据,实现了区块链节点之间数据的共享。
Description
技术领域
本发明涉及区块链技术领域,尤其涉及一种区块链数据访问方法和装置。
背景技术
现有的区块链数据按节点分布,每个区块链节点存储全量或局部的区块链数据。当区块链里有多个节点时,每个区块链节点都有一份独立完整的数据。目前区块链数据存储在存储介质上,一般采用文件型本地数据库存储,数据基于文件装置实现key-value结构保存在区块链节点的物理硬盘中,一般不提供跨网络的存储结构。
在这种区块链数据存储方案里,每个区块链节点是相对独立的工作的,有多少个区块链节点就有多少份数据,区块链节点和区块链节点之间并不能通过数据访问接口直接共享各自所存储的数据。
发明内容
本发明的主要目的在于提供一种区块链数据访问方法和装置,旨在解决现有区块链节点的数据需要单独存储,不能实现区块链节点之间数据的共享的技术问题。
为实现上述目的,本发明提供一种区块链数据访问方法,所述区块链数据访问方法包括步骤:
当侦测到执行区块链实例的执行指令时,获取执行所述执行指令的区块链节点;
将所述区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的所述区块链节点对应着同一份共享数据;
设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据。
优选地,所述设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据的步骤之后,还包括:
采用跨进程访问技术定义所述区块链节点的数据访问接口;
通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作或写入操作。
优选地,所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的写入操作的步骤之前,还包括:
判断所述区块链节点是否已缓存待写入共享数据;
若所述区块链节点未缓存所述待写入共享数据,或所述区块链节点中已缓存所述待写入共享数据,但所述待写入共享数据对应的值需要更新,则执行所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的写入操作的步骤。
优选地,所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的写入操作的步骤包括:
当通过所述数据访问接口侦测到所述写入操作对应的写入请求时,获取所述待写入共享数据的标识;
根据所述标识将所述待写入共享数据写入所述数据存储空间中。
优选地,所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作的步骤之前,还包括:
判断所述区块链节点中是否缓存有待读取共享数据;
若所述区块链节点中未缓存所述待读取共享数据,则执行所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作的步骤。
优选地,所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作或写入操作的步骤之后,还包括:
若根据在所述数据访问接口中设置的缓存策略确定所写入或所读取的共享数据可被缓存,则在所述区块链节点的缓存空间中缓存所写入或所读取的共享数据。
优选地,所述区块链数据访问方法还包括:同一区块链分组内的任一区块链节点分别对应着一份节点独立数据。
优选地,所述区块链数据访问方法还包括:
获取所述数据存储空间所存储的数据量,以及所述数据存储空间的访问性能;
根据所述数据量和所述访问性能对所述数据存储空间进行扩容,并在间隔预设时间对所述数据存储空间所存储的所述节点独立数据和所述共享数据进行备份。
此外,为实现上述目的,本发明还提供一种区块链数据访问装置,所述区块链数据访问装置包括:
获取模块,用于当侦测到执行区块链实例的执行指令时,获取执行所述执行指令的区块链节点;
配置模块,用于将所述区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的所述区块链节点对应着同一份共享数据;
设置模块,用于设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据。
优选地,所述区块链数据访问装置还包括:
定义模块,用于采用跨进程访问技术定义所述区块链节点的数据访问接口;
执行模块,用于通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作或写入操作。
优选地,所述区块链数据访问装置还包括:
第一判断模块,用于判断所述区块链节点是否已缓存待写入共享数据;
所述执行模块还用于若所述区块链节点未缓存所述待写入共享数据,或所述区块链节点中已缓存所述待写入共享数据,但所述待写入共享数据对应的值需要更新,则通过所述数据访问接口在所述数据存储空间中执行所述共享数据的写入操作。
优选地,所述执行模块包括:
获取单元,用于当通过所述数据访问接口侦测到所述写入操作对应的写入请求时,获取所述待写入共享数据的标识;
写入单元,用于根据所述标识将所述待写入共享数据写入所述数据存储空间中。
优选地,所述区块链数据访问装置还包括:
第二判断模块,还用于判断所述区块链节点中是否缓存有待读取共享数据;
所述执行模块还用于若所述区块链节点中未缓存所述待读取共享数据,则通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作。
优选地,所述区块链数据访问装置还包括:
缓存模块,用于若根据在所述数据访问接口中设置的缓存策略确定所写入或所读取的共享数据可被缓存,则在所述区块链节点的缓存空间中缓存所写入或所读取的共享数据。
优选地,同一区块链分组内的任一区块链节点分别对应着一份节点独立数据。
优选地,所述获取模块还用于获取所述数据存储空间所存储的数据量,以及所述数据存储空间的访问性能;
所述区块链数据访问装置还包括:
扩容模块,用于根据所述数据量和所述访问性能对所述数据存储空间进行扩容;
备份模块,用于在间隔预设时间对所述数据存储空间所存储的所述节点独立数据和所述共享数据进行备份。
本发明通过当侦测到执行区块链实例的执行指令时,获取执行所述执行指令的区块链节点;将所述区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的所述区块链节点对应着同一份共享数据;设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据。在区块链节点数据已经分布式存储的基础上,对区块链节点进行分组,使同一区块链分组内的区块链节点共同访问同一份共享数据,实现了区块链节点之间数据的共享。
附图说明
图1为本发明区块链数据访问方法第一实施例的流程示意图;
图2为本发明区块链数据访问方法第二实施例的流程示意图;
图3为本发明区块链数据访问装置第一实施例的功能模块示意图;
图4为本发明区块链数据访问装置第二实施例的功能模块示意图;
图5为本发明区块链数据访问装置第三实施例的功能模块示意图;
图6为本发明区块链数据访问装置第四实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种区块链数据访问方法。
参照图1,图1为本发明区块链数据访问方法第一实施例的流程示意图。
在本实施例中,所述区块链数据访问方法包括:
步骤S10,当侦测到执行区块链实例的执行指令时,获取执行所述执行指令的区块链节点;
在本发明实施例中,区块链节点存在对等网络中。在对等网络中,区块链节点之间可以互相通信,构成一个对等的网状结构,以减少中心网络的开销;当一个区块链节点产生数据时,可以同时向对等网络中的其它区块链节点发送广播,区块链节点也可以在其它任意区块链节点中查询和获取数据。区块链节点是指参与到区块链网络里,进行交易和数据交换的网络节点,每个独立机构可以拥有一个或者多个交易节点,每个交易节点是一组物理网络、计算机、区块链应用软件以及数据库的组合。在区块链节点中,可以执行区块链业务逻辑,如执行交易验证、共识计算等。
当侦测到执行区块链实例的执行指令时,获取执行该执行指令的区块链节点。需要说明的是,在一个机构中,每个业务使用不同的区块链实例,一个业务(一个区块链实例)可对应着一个或者多个区块链节点。
步骤S20,将所述区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的所述区块链节点对应着同一份共享数据;
当确定执行该执行指令的区块链节点时,将区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的区块链节点对应着同一份共享数据。需要说明的是,若一个区块链实例对应着至少两个区块链节点,则在将区块链节点配置到预设的区块链分组的过程中,要将同一个区块链实例对应着的至少两个区块链节点配置到同一区块链分组中。共享数据包括但不限于区块数据、智能合约数据和索引数据。区块数据为区块链节点运行时所需数据,包括区块头;智能合约数据包括智能合约代码和智能合约状态数据。
进一步地,对于同一区块链分组内的各个区块链节点,可以重复写入共享数据,可以读取共享数据,以及同时写入相同的共享数据。
步骤S30,设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据。
设置与区块链分组对应数据存储空间,以使同一区块链分组内的区块链节点,在数据存储空间中访问同一份共享数据。可以理解的是,不同机构之间的区块链节点不允许访问同一份共享数据,不同区块链分组的区块链节点也不允许访问同一份共享数据,不同区块链分组的区块链节点也不能访问其它区块链分组中的其它数据,如不能访问其它区块链分组中的节点独立数据。
进一步地,所述区块链数据访问方法还包括:同一区块链分组内的任一区块链节点分别对应着一份节点独立数据。
同一区块链分组内的任一区块链节点都分别对应着一份节点独立数据。其中,同一区块链分组内的各个区块链节点的节点独立数据是互相隔离的。需要说明的是,节点独立数据是和区块链节点属性相关的数据,每个区块链节点都有其对应的节点独立数据,不允许其它区块链节点读取不属于它的节点独立数据。隔离节点独立数据的方法包括但不限于物理隔离、权限隔离和访问标识隔离。
需要说明的是,为了防止在数据存储空间读取和写入数据过程中,出现节点独立数据被错误覆盖的情况,在数据存储空间中,节点独立数据和共享数据是隔离存储的,即节点独立数据和共享数据所在的存储区域是不一样。
进一步地,所述区块链数据访问方法还包括:
步骤a,获取所述数据存储空间所存储的数据量,以及所述数据存储空间的访问性能;
步骤b,根据所述数据量和所述访问性能对所述数据存储空间进行扩容,并在间隔预设时间对所述数据存储空间所存储的所述节点独立数据和所述共享数据进行备份。
进一步地,获取数据存储空间所存储的数据量、以及数据存储空间的访问性能,根据所获取的数据量和访问性能对数据存储空间进行扩容,并在间隔预设时间对数据存储空间所存储的节点独立数据和共享数据进行备份。其中,访问性能可以理解为数据存储空间可同时接收多少个区块链节点的访问请求。预设时间可根据具体需要而设置,如可设置间隔10天对数据存储空间所存储的节点独立数据和共享数据进行备份。
本实施例通过当侦测到执行区块链实例的执行指令时,获取执行所述执行指令的区块链节点;将所述区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的所述区块链节点对应着同一份共享数据;设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据。在区块链节点数据已经分布式存储的基础上,对区块链节点进行分组,使同一区块链分组内的区块链节点共同访问同一份共享数据,实现了区块链节点之间数据的共享。
进一步地,提出本发明区块链数据访问方法第二实施例。
所述区块链数据访问方法第二实施例与所述区块链数据访问方法第一实施例的区别在于,参照图2,所述区块链数据访问方法还包括:
步骤S40,采用跨进程访问技术定义所述区块链节点的数据访问接口;
步骤S50,通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作或写入操作。
采用跨进程访问技术定义区块链节点的数据访问接口,通过数据访问接口在数据存储空间中执行共享数据的读取操作或写入操作。需要说明的是,区块链节点和数据存储空间可能不在同一个进程里面,或者不在同一台物理服务器上。因此,需要通过跨进程访问技术实现不同的区块链节点访问同一个数据存储空间。跨进程访问技术包括但不限于IPC(Inter-Process Communication,进程间通信)技术、socket网络编程技术和数据序列化协议技术。
在区块链节点在数据存储空间中执行共享数据和节点独立数据的读取操作或写入操作过程中,需要调用数据访问接口。在对数据存储空间所存储的数据进行的读取操作分为单个共享数据或单个节点独立数据的读取,以及批量共享数据或批量节点独立数据的读取。
单个共享数据或或者节点独立数据的读取过程可为:result=get(key,value,useindex=false,cachepolicy=cached)。即获取待读取数据的标识key,从数据缓存空间中获取与key对应的待读取数据的value值,并将读取是否成功的标志位添加至result里,其中,待读取数据可为共享数据或节点独立数据。result是根据操作结果来确定,如0表示待读取数据读取失败,1表示待读取数据读取成功。当useindex取值为false时,key为直接指向数据;当useindex取值为true时,key为索引数据的标识,此时,区块链节点先在数据存储空间中的数据索引区域检索key所对应的值datakey,再用datakey去数据存储空间获取真正的待读取数据。当cachepolicy取值为cached时,从区块链节点的缓存空间中读取待读取数据;当cachepolicy取值为nocache时,直接从数据存储空间中读取待读取数据。
在本实施例中,区块链节点可分为业务逻辑层和缓存层,即区块链节点包括业务逻辑层和缓存层,缓存层即为本发明实施例中所提及的缓存空间。
批量共享数据或批量节点独立数据的读取过程可为:successcount=getbatch(list[key,useindex],valuelist[values],cachepolicy=cached)。即获取一个或多个待读取数据的key,根据所获取的key从数据存储空间里获取对应的待读取数据的value值,将所获取的value值存入valuelist里。需要说明的是,在进行多个待读取数据的读取过程中,可能一部分的待读取数据会处于错误或缺失状态,此时,区块链节点的业务逻辑层需要对所读取的待读取数据的完整性,有效性进行检查。在进行完整性检查过程中,当所获取的key的个数和所获取的value值的个数不一致时,确定所读取的待读取数据不完整;当所获取的key的个数和所获取的value值的个数一致时,确定所读取的待读取数据完整。在进行有效性检查过程中,可通过检查所读取的待读取数据的格式来确定有效性,如通过检查待读取数据字符串长度、以及对应的变量范围等确定有效性。useindex以及cachepolicy与单个共享数据或单个节点独立数据的读取过程中的useindex以及cachepolicy相同,在此不再赘述。
单个共享数据或单个节点独立数据的写入过程可为:put(key,value,cachepolicy=cached)。在写入待写入数据的过程中,设置待写入数据的标识key和对应的value值,然后将key和value值关联写入数据缓存空间中。其中,待写入数据为共享数据或节点独立数据。在将待写入数据写入数据存储空间的过程中,可先判断数据缓存空间中是否已存在与key对应的待写入数据,即判断数据缓存空间中是否已存在与key对应的value值。若数据缓存空间中已存在与key对应的数据并且value值不同时,则可覆盖写入待写入数据;若数据缓存空间中未存在与key对应的数据,则在数据存储空间中建立一个新的数据存储项,在所建立的数据存储项中写入待写入数据。当待写入数据为共享数据时,将待写入数据写入共享数据所在的存储区域;当待写入数据为节点独立数据时,将待写入数据写入节点属性数据所在的存储的区域。需要说明的是,put操作可以进行队列缓存,在批量写入待写入数据时,不用每次发生put操作时都调用数据存储空间,而是在待写入数据的批量写入操作完成时一次提交到数据存储空间即可。当cachepolicy取值为cached时,在区块链节点的缓存空间中写入待写入数据;当cachepolicy取值为no cache时,直接在数据存储空间中写入待写入数据。
在批量写入共享数据或节点独立数据过程中,将发生变化的待写入数据批量提交给缓存空间和数据存储空间。在批量写入待写入数据过程中,要保证待写入数据是全部写入成功,或者全部写入不成功。当待写入数据部分写入成功,部分写入失败时,会将写入成功的待写入数据返回至未写入缓存空间或数据存储空间前的状态。
进一步地,步骤S60包括:
步骤c,当通过所述数据访问接口侦测到所述写入操作对应的写入请求时,获取所述待写入共享数据的标识;
步骤d,根据所述标识将所述待写入共享数据写入所述数据存储空间中。
进一步地,当通过数据访问接口侦测到写入操作对应的写入请求时,获取待写入共享数据的标识,根据待写入共享数据的标识将待写入共享数据写入数据存储空间中。
当通过数据访问接口侦测到读取操作对应的读取请求时,获取读取待读取共享数据的标识,根据待读取共享数据的标识从数据存储空间中读取待读取共享数据。
需要说明的是,将待写入共享数据写入缓存空间,以及从缓存空间读取待读取共享数据的过程中,都需要通过共享数据的标识来完成写入操作和读取操作。节点独立数据的读取操作和写入操作过程与共享数据的读取操作和写入操作过程相似,在此不再赘述。节点独立数据的读取操作和写入操作所用的标识是由所操作的数据标识和区块链节点标识组成,而共享数据的读取操作和写入操作所用的标识不包括区块链节点标识,只是所操作数据的数据标识。
进一步地,所述区块链数据访问方法还包括::
步骤e,若根据在所述数据访问接口中设置的缓存策略确定所写入或所读取的共享数据可被缓存,则在所述区块链节点的缓存空间中缓存所写入或所读取的共享数据。
进一步地,当定义数据访问接口后,可在数据访问接口中设置缓存策略。缓存策略可为:当生成区块数据后,将区块数据写入缓存空间中(区块数据生成之后就不会再改变);由于一部分智能合约状态数据在智能合约运行过程中会被改变,而另一部分的智能合约状态数据不一定会被改变,因此,可将智能合约状态数据设置为可缓存数据等。需要说明的是,在智能合约状态数据更新时,应同时更新区块链节点缓存空间中的智能合约状态数据。在本发明实施例中,缓存算法为LRU(Least Recently Used,近期最少使用算法),在根据LRU缓存数据过程中,可根据缓存空间中数据量的增长和使用情况,调整LRU缓存的大小。
在执行共享数据的写入操作或读取操作过程中,若根据在数据访问接口中设置的缓存策略确定所写入或读取的共享数据可被缓存,则在区块链节点的缓存空间中缓存所写入或所读取的共享数据。
需要说明的是,缓存空间是负载共享数据和节点独立数据的落盘存储。在缓存空间中,包括物理数据服务器、存储设备、操作装置和数据库软件等组件,缓存空间支持key-value格式的存储。
需要说明的是,节点独立数据的缓存过程与共享数据的缓存过程相似,在此不再赘述。
本实施例通过采用跨进程访问技术定义区块链节点的数据访问接口,提高了区块链节点数据的读写性能。
进一步地,提出本发明区块链数据访问方法第三实施例。
所述区块链数据访问方法第三实施例与所述区块链数据访问方法第二实施例的区别在于,所述区块链数据访问方法还包括:
步骤f,判断所述区块链节点是否已缓存待写入共享数据;
步骤g,若所述区块链节点未缓存所述待写入共享数据,或所述区块链节点中已缓存所述待写入共享数据,但所述待写入共享数据对应的值需要更新,则执行所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的写入操作的步骤。
将共享数据写入区块链节点对应的数据存储空间的具体过程为:判断区块链节点的缓存空间是否缓存有待写入共享数据。若区块链节点的缓存空间未缓存待写入共享数据,则通过数据访问接口在数据存储空间中执行共享数据的写入操作,将待写入共享数据写入数据存储空间中;若区块链节点的缓存空间已缓存待写入共享数据,则判断缓存空间已缓存的待写入共享数据对应的值是否需要更新。若缓存空间中已缓存的待写入共享数据对应的值需要更新,则通过数据访问接口在数据存储空间中执行共享数据的写入操作,将待写入共享数据写入数据存储空间中;若缓存空间中已缓存的待写入节点共享户数对应的值不需要更新,则不执行共享数据的写入操作,即不将待写入共享数据写入数据存储空间中。
可以理解的是,可通过判断缓存空间所缓存的待写入共享数据对应的值与需要写入的待写入共享数据对应的值是否一致,来确定缓存空间已缓存的待写入共享数据对应的值是否需要更新。当缓存空间所缓存的待写入共享数据对应的值与需要写入的待写入共享数据对应的值一致时,缓存空间已缓存的待写入共享数据对应的值不需要更新;当缓存空间所缓存的待写入共享数据对应的值与需要写入的待写入共享数据对应的值不一致时,缓存空间已缓存的待写入共享数据对应的值需要更新。
进一步地,通过数据访问接口分离数据存储空间和缓存空间,即通过数据访问接口实现区块链节点和数据存储空间的分离部署。
进一步地,在将节点独立数据中的节点属性数据写入数据存储空间过程中,需要将节点属性数据写入数据存储空间中的节点独立数据存储区域。在通过数据访问接口将节点属性数据写入数据存储空间过程中,可在数据访问接口中,在节点属性数据中添加区块链节点标识,以保证该节点属性数据在数据存储空间的节点独立数据存储区域中不会被其它区块链节点的节点属性数据覆盖。在本发明实施例中,区块链节点标识是区块链节点的私钥。区块链节点标识用于区分不同区块链节点的节点属性数据,数据标识用于标识不同的区块链节点数据,即用于标识共享数据和节点独立数据。通过数据标识可以找到对应的共享数据或节点独立数据。
需要说明的是,节点属性数据包括但不限于区块链节点的名称、区块链节点的配置信息、区块链节点的运行状态信息和统计信息。节点属性数据的写入操作是由节点属性数据所在的区块链节点触发的,其它区块链节点不能触发不属于它自己的节点属性数据的写入操作,因此,在将节点属性数据写入数据存储空间后,可将该节点属性数据缓存至对应的缓存空间中。
在将区块数据写入数据存储空间的过程中,区块数据的标识key是区块数据的hash值,区块数据的hash值是区块数据值的体现。在将区块数据写入数据存储空间的过程中,可通过区块数据的hash值来判断数据存储空间是否已存在该区块数据。可以理解的是,当数据存储空间中已存在与该区块数据对应的hash值,则确认数据存储空间中已存在该区块数据,且在该区块数据对应的值不需要更新时,不执行区块数据的写入操作。当数据存储空间中未存在与该区块数据对应的hash值,则确认数据存储空间中未存在该区块数据。当数据存储空间中未存在该区块数据,或数据存储空间中的该区块数据对应的值需要更新时,执行区块数据的写入操作,将该区块数据写入数据存储空间中。由于将区块数据写入数据存储空间后,就不会再改变,因此可将写入数据储存空间的区块数据缓存至缓存空间中。
在区块链节点部署智能合约后,需要将智能合约的字节码写入数据存储空间。可以理解的是,智能合约的字节码属于智能合约代码。在将智能合约的字节码写入数据存储空间过程中,字节码的标识key是智能合约数据的hash值,可以根据智能合约数据的hash值判断该字节码是否已存在数据存储空间中。具体地,当数据存储空间中已存在该字节码对应的hash值时,确认数据存储空间中已存在该字节码,且当该字节码对应的值不需要更新时,不执行字节码的写入操作;当数据存储空间中未存在该字节码对应的hash值,或数据存储空间中存在该字节码对应的hash值,但该字节码对应的值需要更新时,执行字节码的写入操作,将该字节码写入数据存储空间中。
需要说明的是,在智能合约的字节码生成之后,该字节码就不会再改变。因此,在将字节码写入数据存储空间后,可将字节码缓存至缓存空间。
当运行智能合约后,需要将智能合约状态数据写入数据存储空间。智能合约状态数据在智能合约运行过程中,可能会频繁改变,每个智能合约状态数据都对应着唯一的标识key。需要说明的是,智能合约状态数据的操作类型比较复杂,不恰当的缓存策略可能会导致错误的运算结果。因此,可根据区块链节点对应的业务规则确定某个智能合约或者某个智能合约状态数据可以被缓存。
索引数据中存储的是区块链节点的区块高度和区块hash,以及交易和交易所在区块链节点的对应关系。索引数据是由区块链节点在新区块生成时产生,索引数据生成之后就不会改变,因此,可通过索引数据的标识key来判断索引数据是否存在数据存储空间中。
本实施例通过将区块链节点对应的共享数据写入数据存储空间中,提高了区块链节点数据的写性能。
进一步地,提出本发明区块链数据访问方法第四实施例。
所述区块链数据访问方法第四实施例与所述区块链数据访问方法第二实施例的区别在于,所述区块链数据访问方法还包括:
步骤h,判断所述区块链节点中是否缓存有待读取共享数据;
步骤i,若所述区块链节点中未缓存所述待读取共享数据,则执行所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作的步骤。
在数据存储空间中读取待读取共享数据之前,先在缓存空间中进行检索,根据检索所得的检索结果判断区块链节点中是否已缓存有待读取共享数据。若区块链节点的缓存空间中已缓存待读取共享数据,则不执行通过数据访问接口在数据存储空间中执行共享数据的读取操作,即不在数据存储空间中读取待读取共享数据;若区块链节点的缓存空间中未缓存待读取共享数据,则执行通过数据访问接口在数据存储空间中执行共享数据的读取操作,在数据存储空间中读取待读取共享数据。可以理解的是,在数据存储空间中读取待读取共享数据的过程中,通过待读取数据的标识key读取待读取共享数据。
需要说明的是,节点独立数据的读取操作和共享数据的读取操作过程相似,在此不再赘述。
进一步地,当在数据存储空间中读取到待读取共享数据后,若根据缓存策略确定所读取的待读取共享数据可被缓存,则将所读取的待读取共享数据缓存至缓存空间中。
当在数据存储空间读取区块数据过程中,可使用区块高度读取区块数据。在使用区块高度读取区块数据过程中,将区块hash作为标识key读取区块数据。在使用交易hash在数据存储空间中查询交易数据时,先查询交易的索引信息,通过交易索引信息查找到区块hash和交易在区块里的位置,把交易所在的区块先读取出来,再在区块的交易列表里读取交易数据。在读取智能合约的字节码过程中,根据智能合约的hash值作为标识key在数据存储空间中读取字节码。在读取智能合约状态数据过程中,根据智能合约状态数据的标识key在数据存储空间中读取智能合约状态数据。
本实施例通过在数据存储空间读取数据中,提高了区块链节点数据的°性能。
本发明进一步提供一种区块链数据访问装置。
参照图3,图3为本发明区块链数据访问装置的较佳实施例的功能模块示意图。
需要强调的是,对本领域的技术人员来说,图3所示模块图仅仅是一个较佳实施例的示例图,本领域的技术人员围绕图3所示的区块链数据访问装置的模块,可轻易进行新的模块的补充;各模块的名称是自定义名称,仅用于辅助理解该区块链数据访问装置的各个程序功能块,不用于限定本发明的技术方案,本发明技术方案的核心是,各自定义名称的模块所要达成的功能。
在本实施例中,所述区块链数据访问装置包括:
获取模块10,用于当侦测到执行区块链实例的执行指令时,获取执行所述执行指令的区块链节点;
在本发明实施例中,区块链节点存在对等网络中。在对等网络中,区块链节点之间可以互相通信,构成一个对等的网状结构,以减少中心网络的开销;当一个区块链节点产生数据时,可以同时向对等网络中的其它区块链节点发送广播,区块链节点也可以在其它任意区块链节点中查询和获取数据。区块链节点是指参与到区块链网络里,进行交易和数据交换的网络节点,每个独立机构可以拥有一个或者多个交易节点,每个交易节点是一组物理网络、计算机、区块链应用软件以及数据库的组合。在区块链节点中,可以执行区块链业务逻辑,如执行交易验证、共识计算等。
当侦测到执行区块链实例的执行指令时,获取执行该执行指令的区块链节点。需要说明的是,在一个机构中,每个业务使用不同的区块链实例,一个业务(一个区块链实例)可对应着一个或者多个区块链节点。
配置模块20,用于将所述区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的所述区块链节点对应着同一份共享数据;
当确定执行该执行指令的区块链节点时,将区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的区块链节点对应着同一份共享数据。需要说明的是,若一个区块链实例对应着至少两个区块链节点,则在将区块链节点配置到预设的区块链分组的过程中,要将同一个区块链实例对应着的至少两个区块链节点配置到同一区块链分组中。共享数据包括但不限于区块数据、智能合约数据和索引数据。区块数据为区块链节点运行时所需数据,包括区块头;智能合约数据包括智能合约代码和智能合约状态数据。
进一步地,对于同一区块链分组内的各个区块链节点,可以重复写入共享数据,可以读取共享数据,以及同时写入相同的共享数据。
设置模块30,用于设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据。
设置与区块链分组对应数据存储空间,以使同一区块链分组内的区块链节点,在数据存储空间中访问同一份共享数据。可以理解的是,不同机构之间的区块链节点不允许访问同一份共享数据,不同区块链分组的区块链节点也不允许访问同一份共享数据,不同区块链分组的区块链节点也不能访问其它区块链分组中的其它数据,如不能访问其它区块链分组中的节点独立数据。
进一步地,同一区块链分组内的任一区块链节点分别对应着一份节点独立数据。
同一区块链分组内的任一区块链节点都分别对应着一份节点独立数据。其中,同一区块链分组内的各个区块链节点的节点独立数据是互相隔离的。需要说明的是,节点独立数据是和区块链节点属性相关的数据,每个区块链节点都有其对应的节点独立数据,不允许其它区块链节点读取不属于它的节点独立数据。隔离节点独立数据的方法包括但不限于物理隔离、权限隔离和访问标识隔离。
需要说明的是,为了防止在数据存储空间读取和写入数据过程中,出现节点独立数据被错误覆盖的情况,在数据存储空间中,节点独立数据和共享数据是隔离存储的,即节点独立数据和共享数据所在的存储区域是不一样。
进一步地,所述获取模块10还用于获取所述数据存储空间所存储的数据量,以及所述数据存储空间的访问性能;
所述区块链数据访问装置还包括:
扩容模块,用于根据所述数据量和所述访问性能对所述数据存储空间进行扩容;
备份模块,用于在间隔预设时间对所述数据存储空间所存储的所述节点独立数据和所述共享数据进行备份。
进一步地,获取数据存储空间所存储的数据量、以及数据存储空间的访问性能,根据所获取的数据量和访问性能对数据存储空间进行扩容,并在间隔预设时间对数据存储空间所存储的节点独立数据和共享数据进行备份。其中,访问性能可以理解为数据存储空间可同时接收多少个区块链节点的访问请求。预设时间可根据具体需要而设置,如可设置间隔10天对数据存储空间所存储的节点独立数据和共享数据进行备份。
本实施例通过当侦测到执行区块链实例的执行指令时,获取执行所述执行指令的区块链节点;将所述区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的所述区块链节点对应着同一份共享数据;设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据。在区块链节点数据已经分布式存储的基础上,对区块链节点进行分组,使同一区块链分组内的区块链节点共同访问同一份共享数据,实现了区块链节点之间数据的共享。
进一步地,提出本发明区块链数据访问装置第二实施例。
所述区块链数据访问装置第二实施例与所述区块链数据访问装置第一实施例的区别在于,参照图4,所述区块链数据访问装置还包括:
定义模块40,用于采用跨进程访问技术定义所述区块链节点的数据访问接口;
执行模块50,用于通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作或写入操作。
采用跨进程访问技术定义区块链节点的数据访问接口,通过数据访问接口在数据存储空间中执行共享数据的读取操作或写入操作。需要说明的是,区块链节点和数据存储空间可能不在同一个进程里面,或者不在同一台物理服务器上。因此,需要通过跨进程访问技术实现不同的区块链节点访问同一个数据存储空间。跨进程访问技术包括但不限于IPC(Inter-Process Communication,进程间通信)技术、socket网络编程技术和数据序列化协议技术。
在区块链节点在数据存储空间中执行共享数据和节点独立数据的读取操作或写入操作过程中,需要调用数据访问接口。在对数据存储空间所存储的数据进行的读取操作分为单个共享数据或单个节点独立数据的读取,以及批量共享数据或批量节点独立数据的读取。
单个共享数据或或者节点独立数据的读取过程可为:result=get(key,value,useindex=false,cachepolicy=cached)。即获取待读取数据的标识key,从数据缓存空间中获取与key对应的待读取数据的value值,并将读取是否成功的标志位添加至result里,其中,待读取数据可为共享数据或节点独立数据。result是根据操作结果来确定,如0表示待读取数据读取失败,1表示待读取数据读取成功。当useindex取值为false时,key为直接指向数据;当useindex取值为true时,key为索引数据的标识,此时,区块链节点先在数据存储空间中的数据索引区域检索key所对应的值datakey,再用datakey去数据存储空间获取真正的待读取数据。当cachepolicy取值为cached时,从区块链节点的缓存空间中读取待读取数据;当cachepolicy取值为nocache时,直接从数据存储空间中读取待读取数据。
在本实施例中,区块链节点可分为业务逻辑层和缓存层,即区块链节点包括业务逻辑层和缓存层,缓存层即为本发明实施例中所提及的缓存空间。
批量共享数据或批量节点独立数据的读取过程可为:successcount=getbatch(list[key,useindex],valuelist[values],cachepolicy=cached)。即获取一个或多个待读取数据的key,根据所获取的key从数据存储空间里获取对应的待读取数据的value值,将所获取的value值存入valuelist里。需要说明的是,在进行多个待读取数据的读取过程中,可能一部分的待读取数据会处于错误或缺失状态,此时,区块链节点的业务逻辑层需要对所读取的待读取数据的完整性,有效性进行检查。在进行完整性检查过程中,当所获取的key的个数和所获取的value值的个数不一致时,确定所读取的待读取数据不完整;当所获取的key的个数和所获取的value值的个数一致时,确定所读取的待读取数据完整。在进行有效性检查过程中,可通过检查所读取的待读取数据的格式来确定有效性,如通过检查待读取数据字符串长度、以及对应的变量范围等确定有效性。useindex,以及cachepolicy与单个共享数据或单个节点独立数据的读取过程中的useindex以及cachepolicy相同,在此不再赘述。
单个共享数据或单个节点独立数据的写入过程可为:put(key,value,cachepolicy=cached)。在写入待写入数据的过程中,设置待写入数据的标识key和对应的value值,然后将key和value值关联写入数据缓存空间中。其中,待写入数据为共享数据或节点独立数据。在将待写入数据写入数据存储空间的过程中,可先判断数据缓存空间中是否已存在与key对应的待写入数据,即判断数据缓存空间中是否已存在与key对应的value值。若数据缓存空间中已存在与key对应的数据并且value值不同时,则可覆盖写入待写入数据;若数据存储空间中未存在与key对应的数据,则在数据存储空间中建立一个新的数据存储项,在所建立的数据存储项中写入待写入数据。当待写入数据为共享数据时,将待写入数据写入共享数据所在的存储区域;当待写入数据为节点独立数据时,将待写入数据写入节点属性数据所在的存储的区域。需要说明的是,put操作可以进行队列缓存,在批量写入待写入数据时,不用每次发生put操作时都调用数据存储空间,而是在待写入数据的批量写入操作完成时一次提交到数据存储空间即可。当cachepolicy取值为cached时,在区块链节点的缓存空间中写入待写入数据;当cachepolicy取值为no cache时,直接在数据存储空间中写入待写入数据。
在批量写入共享数据或节点独立数据过程中,将发生变化的待写入数据批量提交给缓存空间和数据存储空间。在批量写入待写入数据过程中,要保证待写入数据是全部写入成功,或者全部写入不成功。当待写入数据部分写入成功,部分写入失败时,会将写入成功的待写入数据返回至未写入缓存空间或数据存储空间前的状态。
进一步地,所述执行模块50包括:
获取单元,用于当通过所述数据访问接口侦测到所述写入操作对应的写入请求时,获取所述待写入共享数据的标识;
写入单元,用于根据所述标识将所述待写入共享数据写入所述数据存储空间中。
进一步地,当通过数据访问接口侦测到写入操作对应的写入请求时,获取待写入共享数据的标识,根据待写入共享数据的标识将待写入共享数据写入数据存储空间中。
当通过数据访问接口侦测到读取操作对应的读取请求时,获取读取待读取共享数据的标识,根据待读取共享数据的标识从数据存储空间中读取待读取共享数据。
需要说明的是,将待写入共享数据写入缓存空间,以及从缓存空间读取待读取共享数据的过程中,都需要通过共享数据的标识来完成写入操作和读取操作。节点独立数据的读取操作和写入操作过程与共享数据的读取操作和写入操作过程相似,在此不再赘述。节点独立数据的读取操作和写入操作所用的标识是由所操作的数据标识和区块链节点标识组成,而共享数据的读取操作和写入操作所用的标识不包括区块链节点标识,只是所操作数据的数据标识。
进一步地,,所述区块链数据访问装置还包括:
缓存模块,用于若根据在所述数据访问接口中设置的缓存策略确定所写入或所读取的共享数据可被缓存,则在所述区块链节点的缓存空间中缓存所写入或所读取的共享数据。
进一步地,当定义数据访问接口后,可在数据访问接口中设置缓存策略。缓存策略可为:当生成区块数据后,将区块数据写入缓存空间中(区块数据生成之后就不会再改变);由于一部分智能合约状态数据在智能合约运行过程中会被改变,而另一部分的智能合约状态数据不一定会被改变,因此,可将智能合约状态数据设置为可缓存数据等。需要说明的是,在智能合约状态数据更新时,应同时更新区块链节点缓存空间中的智能合约状态数据。在本发明实施例中,缓存算法为LRU(Least Recently Used,近期最少使用算法),在根据LRU缓存数据过程中,可根据缓存空间中数据量的增长和使用情况,调整LRU缓存的大小。
在执行共享数据的写入操作或读取操作过程中,若根据在数据访问接口中设置的缓存策略确定所写入或读取的共享数据可被缓存,则在区块链节点的缓存空间中缓存所写入或所读取的共享数据。
需要说明的是,缓存空间是负载共享数据和节点独立数据的落盘存储。在缓存空间中,包括物理数据服务器、存储设备、操作装置和数据库软件等组件,缓存空间支持key-value格式的存储。
需要说明的是,节点独立数据的缓存过程与共享数据的缓存过程相似,在此不再赘述。
本实施例通过采用跨进程访问技术定义区块链节点的数据访问接口,提高了区块链节点数据的读写性能。
进一步地,提出本发明区块链数据访问装置第三实施例。
所述区块链数据访问装置第三实施例与所述区块链数据访问装置第二实施例的区别在于,参照图5,所述区块链数据访问装置还包括:
第一判断模块60,用于判断所述区块链节点是否已缓存待写入共享数据;
所述执行模块50还用于若所述区块链节点未缓存所述待写入共享数据,或所述区块链节点中已缓存所述待写入共享数据,但所述待写入共享数据对应的值需要更新,则通过所述数据访问接口在所述数据存储空间中执行所述共享数据的写入操作。
将共享数据写入区块链节点对应的数据存储空间的具体过程为:判断区块链节点的缓存空间是否缓存有待写入共享数据。若区块链节点的缓存空间未缓存待写入共享数据,则通过数据访问接口在数据存储空间中执行共享数据的写入操作,将待写入共享数据写入数据存储空间中;若区块链节点的缓存空间已缓存待写入共享数据,则判断缓存空间已缓存的待写入共享数据对应的值是否需要更新。若缓存空间中已缓存的待写入共享数据对应的值需要更新,则通过数据访问接口在数据存储空间中执行共享数据的写入操作,将待写入共享数据写入数据存储空间中;若缓存空间中已缓存的待写入节点共享户数对应的值不需要更新,则不执行共享数据的写入操作,即不将待写入共享数据写入数据存储空间中。
可以理解的是,可通过判断缓存空间所缓存的待写入共享数据对应的值与需要写入的待写入共享数据对应的值是否一致,来确定缓存空间已缓存的待写入共享数据对应的值是否需要更新。当缓存空间所缓存的待写入共享数据对应的值与需要写入的待写入共享数据对应的值一致时,缓存空间已缓存的待写入共享数据对应的值不需要更新;当缓存空间所缓存的待写入共享数据对应的值与需要写入的待写入共享数据对应的值不一致时,缓存空间已缓存的待写入共享数据对应的值需要更新。
进一步地,通过数据访问接口分离数据存储空间和缓存空间,即通过数据访问接口实现区块链节点和数据存储空间的分离部署。
进一步地,在将节点独立数据中的节点属性数据写入数据存储空间过程中,需要将节点属性数据写入数据存储空间中的节点独立数据存储区域。在通过数据访问接口将节点属性数据写入数据存储空间过程中,可在数据访问接口中,在节点属性数据中添加区块链节点标识,以保证该节点属性数据在数据存储空间的节点独立数据存储区域中不会被其它区块链节点的节点属性数据覆盖。在本发明实施例中,区块链节点标识是区块链节点的私钥。区块链节点标识用于区分不同区块链节点的节点属性数据,数据标识用于标识不同的区块链节点数据,即用于标识共享数据和节点独立数据。通过数据标识可以找到对应的共享数据或节点独立数据。
需要说明的是,节点属性数据包括但不限于区块链节点的名称、区块链节点的配置信息、区块链节点的运行状态信息和统计信息。节点属性数据的写入操作是由节点属性数据所在的区块链节点触发的,其它区块链节点不能触发不属于它自己的节点属性数据的写入操作,因此,在将节点属性数据写入数据存储空间后,可将该节点属性数据缓存至对应的缓存空间中。
在将区块数据写入数据存储空间的过程中,区块数据的标识key是区块数据的hash值,区块数据的hash值是区块数据值的体现。在将区块数据写入数据存储空间的过程中,可通过区块数据的hash值来判断数据存储空间是否已存在该区块数据。可以理解的是,当数据存储空间中已存在与该区块数据对应的hash值,则确认数据存储空间中已存在该区块数据,且在该区块数据对应的值不需要更新时,不执行区块数据的写入操作。当数据存储空间中未存在与该区块数据对应的hash值,则确认数据存储空间中未存在该区块数据。当数据存储空间中未存在该区块数据,或数据存储空间中的该区块数据对应的值需要更新时,执行区块数据的写入操作,将该区块数据写入数据存储空间中。由于将区块数据写入数据存储空间后,就不会再改变,因此可将写入数据储存空间的区块数据缓存至缓存空间中。
在区块链节点部署智能合约后,需要将智能合约的字节码写入数据存储空间。可以理解的是,智能合约的字节码属于智能合约代码。在将智能合约的字节码写入数据存储空间过程中,字节码的标识key是智能合约数据的hash值,可以根据智能合约数据的hash值判断该字节码是否已存在数据存储空间中。具体地,当数据存储空间中已存在该字节码对应的hash值时,确认数据存储空间中已存在该字节码,且当该字节码对应的值不需要更新时,不执行字节码的写入操作;当数据存储空间中未存在该字节码对应的hash值,或数据存储空间中存在该字节码对应的hash值,但该字节码对应的值需要更新时,执行字节码的写入操作,将该字节码写入数据存储空间中。
需要说明的是,在智能合约的字节码生成之后,该字节码就不会再改变。因此,在将字节码写入数据存储空间后,可将字节码缓存至缓存空间。
当运行智能合约后,需要将智能合约状态数据写入数据存储空间。智能合约状态数据在智能合约运行过程中,可能会频繁改变,每个智能合约状态数据都对应着唯一的标识key。需要说明的是,智能合约状态数据的操作类型比较复杂,不恰当的缓存策略可能会导致错误的运算结果。因此,可根据区块链节点对应的业务规则确定某个智能合约或者某个智能合约状态数据可以被缓存。
索引数据中存储的是区块链节点的区块高度和区块hash,以及交易和交易所在区块链节点的对应关系。索引数据是由区块链节点在新区块生成时产生,索引数据生成之后就不会改变,因此,可通过索引数据的标识key来判断索引数据是否存在数据存储空间中。
本实施例通过将区块链节点对应的共享数据写入数据存储空间中,提高了区块链节点数据的写性能。
进一步地,提出本发明区块链数据访问装置第四实施例。
所述区块链数据访问装置第四实施例与所述区块链数据访问装置第二实施例的区别在于,参照图6,所述区块链数据访问装置还包括:
第二判断模块70,还用于判断所述区块链节点中是否缓存有待读取共享数据;
所述执行模块50还用于若所述区块链节点中未缓存所述待读取共享数据,则通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作。
在数据存储空间中读取待读取共享数据之前,先在缓存空间中进行检索,根据检索所得的检索结果判断区块链节点中是否已缓存有待读取共享数据。若区块链节点的缓存空间中已缓存待读取共享数据,则不执行通过数据访问接口在数据存储空间中执行共享数据的读取操作,即不在数据存储空间中读取待读取共享数据;若区块链节点的缓存空间中未缓存待读取共享数据,则执行通过数据访问接口在数据存储空间中执行共享数据的读取操作,在数据存储空间中读取待读取共享数据。可以理解的是,在数据存储空间中读取待读取共享数据的过程中,通过待读取数据的标识key读取待读取共享数据。
需要说明的是,节点独立数据的读取操作和共享数据的读取操作过程相似,在此不再赘述。
进一步地,当在数据存储空间中读取到待读取共享数据后,若根据缓存策略确定所读取的待读取共享数据可被缓存,则将所读取的待读取共享数据缓存至缓存空间中。
当在数据存储空间读取区块数据过程中,可使用区块高度读取区块数据。在使用区块高度读取区块数据过程中,将区块hash作为标识key读取区块数据。在使用交易hash在数据存储空间中查询交易数据时,先查询交易的索引信息,通过交易索引信息查找到区块hash和交易在区块里的位置,把交易所在的区块先读取出来,再在区块的交易列表里读取交易数据。在读取智能合约的字节码过程中,根据智能合约的hash值作为标识key在数据存储空间中读取字节码。在读取智能合约状态数据过程中,根据智能合约状态数据的标识key在数据存储空间中读取智能合约状态数据。
本实施例通过在数据存储空间读取数据中,提高了区块链节点数据的°性能。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (16)
1.一种区块链数据访问方法,其特征在于,所述区块链数据访问方法包括以下步骤:
当侦测到执行区块链实例的执行指令时,获取执行所述执行指令的区块链节点;
将所述区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的所述区块链节点对应着同一份共享数据;
设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据。
2.如权利要求1所述的区块链数据访问方法,其特征在于,所述设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据的步骤之后,还包括:
采用跨进程访问技术定义所述区块链节点的数据访问接口;
通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作或写入操作。
3.如权利要求2所述的区块链数据访问方法,其特征在于,所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的写入操作的步骤之前,还包括:
判断所述区块链节点是否已缓存待写入共享数据;
若所述区块链节点未缓存所述待写入共享数据,或所述区块链节点中已缓存所述待写入共享数据,但所述待写入共享数据对应的值需要更新,则执行所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的写入操作的步骤。
4.如权利要求3所述的区块链数据访问方法,其特征在于,所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的写入操作的步骤包括:
当通过所述数据访问接口侦测到所述写入操作对应的写入请求时,获取所述待写入共享数据的标识;
根据所述标识将所述待写入共享数据写入所述数据存储空间中。
5.如权利要求2所述的区块链数据访问方法,其特征在于,所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作的步骤之前,还包括:
判断所述区块链节点中是否缓存有待读取共享数据;
若所述区块链节点中未缓存所述待读取共享数据,则执行所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作的步骤。
6.如权利要求2所述的区块链数据访问方法,其特征在于,所述通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作或写入操作的步骤之后,还包括:
若根据在所述数据访问接口中设置的缓存策略确定所写入或所读取的共享数据可被缓存,则在所述区块链节点的缓存空间中缓存所写入或所读取的共享数据。
7.如权利要求1至6任一项所述的区块链数据访问方法,其特征在于,所述区块链数据访问方法还包括:同一区块链分组内的任一区块链节点分别对应着一份节点独立数据。
8.如权利要求7所述的区块链数据访问方法,其特征在于,所述区块链数据访问方法还包括:
获取所述数据存储空间所存储的数据量,以及所述数据存储空间的访问性能;
根据所述数据量和所述访问性能对所述数据存储空间进行扩容,并在间隔预设时间对所述数据存储空间所存储的所述节点独立数据和所述共享数据进行备份。
9.一种区块链数据访问装置,其特征在于,所述区块链数据访问装置包括:
获取模块,用于当侦测到执行区块链实例的执行指令时,获取执行所述执行指令的区块链节点;
配置模块,用于将所述区块链节点配置到预设的区块链分组中,其中,同一区块链分组内的所述区块链节点对应着同一份共享数据;
设置模块,用于设置与所述区块链分组对应的数据存储空间,以使同一区块链分组内的所述区块链节点,在所述数据存储空间中访问同一份共享数据。
10.如权利要求9所述的区块链数据访问装置,其特征在于,所述区块链数据访问装置还包括:
定义模块,用于采用跨进程访问技术定义所述区块链节点的数据访问接口;
执行模块,用于通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作或写入操作。
11.如权利要求10所述的区块链数据访问装置,其特征在于,所述区块链数据访问装置还包括:
第一判断模块,用于判断所述区块链节点是否已缓存待写入共享数据;
所述执行模块还用于若所述区块链节点未缓存所述待写入共享数据,或所述区块链节点中已缓存所述待写入共享数据,但所述待写入共享数据对应的值需要更新,则通过所述数据访问接口在所述数据存储空间中执行所述共享数据的写入操作。
12.如权利要求11所述的区块链数据访问装置,其特征在于,所述执行模块包括:
获取单元,用于当通过所述数据访问接口侦测到所述写入操作对应的写入请求时,获取所述待写入共享数据的标识;
写入单元,用于根据所述标识将所述待写入共享数据写入所述数据存储空间中。
13.如权利要求10所述的区块链数据访问装置,其特征在于,所述区块链数据访问装置还包括:
第二判断模块,还用于判断所述区块链节点中是否缓存有待读取共享数据;
所述执行模块还用于若所述区块链节点中未缓存所述待读取共享数据,则通过所述数据访问接口在所述数据存储空间中执行所述共享数据的读取操作。
14.如权利要求10所述的区块链数据访问装置,其特征在于,所述区块链数据访问装置还包括:
缓存模块,用于若根据在所述数据访问接口中设置的缓存策略确定所写入或所读取的共享数据可被缓存,则在所述区块链节点的缓存空间中缓存所写入或所读取的共享数据。
15.如权利要求9至14任一项所述的区块链数据访问装置,其特征在于,同一区块链分组内的任一区块链节点分别对应着一份节点独立数据。
16.如权利要求15所述的区块链数据访问装置,其特征在于,所述获取模块还用于获取所述数据存储空间所存储的数据量,以及所述数据存储空间的访问性能;
所述区块链数据访问装置还包括:
扩容模块,用于根据所述数据量和所述访问性能对所述数据存储空间进行扩容;
备份模块,用于在间隔预设时间对所述数据存储空间所存储的所述节点独立数据和所述共享数据进行备份。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710402043.6A CN107273455B (zh) | 2017-05-31 | 2017-05-31 | 区块链数据访问方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710402043.6A CN107273455B (zh) | 2017-05-31 | 2017-05-31 | 区块链数据访问方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107273455A CN107273455A (zh) | 2017-10-20 |
CN107273455B true CN107273455B (zh) | 2020-12-18 |
Family
ID=60065042
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710402043.6A Active CN107273455B (zh) | 2017-05-31 | 2017-05-31 | 区块链数据访问方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107273455B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3844654A4 (en) * | 2020-06-08 | 2021-08-25 | Alipay Labs (Singapore) Pte. Ltd. | BLOCKCHAIN-BASED DOCUMENT REGISTRATION FOR CUSTOMS CLEARANCE |
EP3837617A4 (en) * | 2020-06-08 | 2021-09-08 | Alipay Labs (Singapore) Pte. Ltd. | DISTRIBUTED STORAGE OF CUSTOMS CLEARANCE DATA |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109819003A (zh) * | 2017-11-22 | 2019-05-28 | 南京理工大学 | 一种区块链的分层共识方法和系统 |
CN107886006B (zh) * | 2017-11-28 | 2020-06-02 | 北京博晨技术有限公司 | 数据操作方法、装置及电子设备 |
CN108628942B (zh) * | 2018-03-27 | 2020-07-31 | 深圳市网心科技有限公司 | 区块链节点设备、分布式数据库的数据读取及写入方法 |
CN108664216B (zh) * | 2018-04-04 | 2021-06-04 | 北京小米移动软件有限公司 | 数据存储方法及装置 |
WO2019211225A1 (en) * | 2018-05-01 | 2019-11-07 | International Business Machines Corporation | Blockchain implementing cross-chain transactions |
CN108647101A (zh) * | 2018-05-09 | 2018-10-12 | 深圳壹账通智能科技有限公司 | 区块链上用户通信方法、装置、终端设备及存储介质 |
CN109005208B (zh) * | 2018-06-11 | 2021-03-30 | 北京京东尚科信息技术有限公司 | 用于推送信息的方法和装置 |
CN109150972B (zh) * | 2018-07-17 | 2021-07-23 | 湖南宸瀚信息科技有限责任公司 | 一种双层分片的高效区块链的共识机制的工作方法 |
CN108959654A (zh) * | 2018-08-06 | 2018-12-07 | 安徽笛申科技有限公司 | 一种基于区块链智能合约节点和存储的数据管理系统 |
CN109522729B (zh) * | 2018-11-02 | 2020-12-11 | 中链科技有限公司 | 智能合约状态变更方法及装置 |
CN109615518A (zh) * | 2018-12-11 | 2019-04-12 | 北京瑞卓喜投科技发展有限公司 | 一种智能合约系统的构建方法和智能合约系统 |
CN109669986A (zh) * | 2018-12-12 | 2019-04-23 | 深圳乐信软件技术有限公司 | 基于区块链的黑名单共享方法、装置、设备和存储介质 |
CN110009316A (zh) * | 2018-12-14 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 基于区块链的事件处理方法及装置、电子设备 |
CN109711193B (zh) * | 2018-12-24 | 2021-03-19 | 杭州达现科技有限公司 | 一种存储空间的共享方法和装置 |
JP7071938B2 (ja) * | 2019-01-23 | 2022-05-19 | 株式会社日立製作所 | データベース管理サービス提供システム |
CN109981750B (zh) | 2019-03-06 | 2021-09-17 | 北京百度网讯科技有限公司 | 业务流程系统、业务数据处理方法和装置 |
CN110196881B (zh) * | 2019-04-22 | 2021-03-26 | 华中科技大学 | 一种基于区块链的数据读写方法及区块链网络结构 |
CN110175918B (zh) * | 2019-05-17 | 2023-03-28 | 东南大学 | 一种区块链服务结构及快速部署方法 |
CN110275892B (zh) * | 2019-05-22 | 2022-08-19 | 深圳壹账通智能科技有限公司 | 面向区块链的数据管理方法、装置、设备及存储介质 |
CN110224814B (zh) * | 2019-06-27 | 2022-01-14 | 深圳前海微众银行股份有限公司 | 一种区块链数据共享方法及装置 |
CN111602166B (zh) * | 2019-08-30 | 2023-08-22 | 创新先进技术有限公司 | 在区块链上提供可遍历键值数据存储的方法和设备 |
CN110989934B (zh) * | 2019-12-05 | 2023-08-25 | 达闼机器人股份有限公司 | 区块链节点数据存储方法、区块链系统及区块链节点 |
EP3844699A4 (en) | 2020-06-08 | 2021-08-18 | Alipay Labs (Singapore) Pte. Ltd. | BLOCKCHAIN-BASED PROCESSING OF IMPORT CLEARANCE DATA |
EP3844655B1 (en) | 2020-06-08 | 2023-05-03 | Alipay Labs (Singapore) Pte. Ltd. | Managing user authorizations for blockchain-based custom clearance services |
CN111989663A (zh) | 2020-06-08 | 2020-11-24 | 支付宝实验室(新加坡)有限公司 | 基于区块链的智能合约池 |
CN114930330A (zh) | 2020-06-08 | 2022-08-19 | 支付宝实验室(新加坡)有限公司 | 基于区块链的海关清关服务平台的用户管理 |
CN113612761B (zh) * | 2021-07-30 | 2022-03-22 | 立信(重庆)数据科技股份有限公司 | 一种基于区块链的调研数据上链方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106452785A (zh) * | 2016-09-29 | 2017-02-22 | 财付通支付科技有限公司 | 区块链网络、分支节点及区块链网络应用方法 |
CN106534273A (zh) * | 2016-10-31 | 2017-03-22 | 中金云金融(北京)大数据科技股份有限公司 | 区块链元数据存储系统及其存储方法与检索方法 |
CN106598490A (zh) * | 2016-11-25 | 2017-04-26 | 深圳前海微众银行股份有限公司 | 区块链数据的访问方法和区块链管理系统 |
CN106656974A (zh) * | 2016-10-17 | 2017-05-10 | 江苏通付盾科技有限公司 | 区块链的分组共识方法及系统 |
WO2017083565A1 (en) * | 2015-11-11 | 2017-05-18 | Bank Of America Corporation | Block chain alias person-to person payments |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9871775B2 (en) * | 2015-08-10 | 2018-01-16 | Cisco Technology, Inc. | Group membership block chain |
US20170134161A1 (en) * | 2015-11-06 | 2017-05-11 | Cable Television Laboratories, Inc | Blockchaining for media distribution |
US20170140375A1 (en) * | 2015-11-15 | 2017-05-18 | Michael Kunstel | System and Method for Permissioned Distributed Block Chain |
CN106055993A (zh) * | 2016-08-13 | 2016-10-26 | 深圳市樊溪电子有限公司 | 一种用于区块链的加密存储系统及其使用方法 |
CN106534085B (zh) * | 2016-10-25 | 2019-09-06 | 杭州云象网络技术有限公司 | 一种基于区块链技术的隐私保护方法 |
CN106534317B (zh) * | 2016-11-17 | 2019-09-03 | 杭州云象网络技术有限公司 | 一种基于区块链技术的灾备云存储系统构建方法 |
CN106651346A (zh) * | 2016-11-28 | 2017-05-10 | 上海凯岸信息科技有限公司 | 基于区块链的征信数据共享与交易系统 |
CN109165957A (zh) * | 2018-08-14 | 2019-01-08 | 海南高灯科技有限公司 | 基于区块链的发票数据报销方法、系统及相关设备 |
-
2017
- 2017-05-31 CN CN201710402043.6A patent/CN107273455B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017083565A1 (en) * | 2015-11-11 | 2017-05-18 | Bank Of America Corporation | Block chain alias person-to person payments |
CN106452785A (zh) * | 2016-09-29 | 2017-02-22 | 财付通支付科技有限公司 | 区块链网络、分支节点及区块链网络应用方法 |
CN106656974A (zh) * | 2016-10-17 | 2017-05-10 | 江苏通付盾科技有限公司 | 区块链的分组共识方法及系统 |
CN106534273A (zh) * | 2016-10-31 | 2017-03-22 | 中金云金融(北京)大数据科技股份有限公司 | 区块链元数据存储系统及其存储方法与检索方法 |
CN106598490A (zh) * | 2016-11-25 | 2017-04-26 | 深圳前海微众银行股份有限公司 | 区块链数据的访问方法和区块链管理系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3844654A4 (en) * | 2020-06-08 | 2021-08-25 | Alipay Labs (Singapore) Pte. Ltd. | BLOCKCHAIN-BASED DOCUMENT REGISTRATION FOR CUSTOMS CLEARANCE |
EP3837617A4 (en) * | 2020-06-08 | 2021-09-08 | Alipay Labs (Singapore) Pte. Ltd. | DISTRIBUTED STORAGE OF CUSTOMS CLEARANCE DATA |
Also Published As
Publication number | Publication date |
---|---|
CN107273455A (zh) | 2017-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107273455B (zh) | 区块链数据访问方法和装置 | |
JP4117265B2 (ja) | ファイルシステムのバージョンを管理する方法およびシステム | |
CN106339254B (zh) | 一种虚拟机快速启动方法、装置及管理节点 | |
JP5733124B2 (ja) | データ管理装置、データ管理システム、データ管理方法、及びプログラム | |
US6449615B1 (en) | Method and system for maintaining the integrity of links in a computer network | |
CN111190928A (zh) | 缓存处理方法、装置、计算机设备以及存储介质 | |
CN112039979A (zh) | 分布式数据缓存管理方法、装置、设备及存储介质 | |
CN109445902B (zh) | 一种数据操作方法和系统 | |
CN112579606A (zh) | 工作流数据处理方法、装置、计算机设备及存储介质 | |
EP2336901B1 (en) | Online access to database snapshots | |
US11249946B2 (en) | Path name cache for notifications of file changes | |
CN111475519B (zh) | 数据缓存方法及装置 | |
US20220092050A1 (en) | Concurrent transaction processing in a database system | |
CN113220669B (zh) | 业务数据的处理方法、装置及电子设备 | |
CN114936188A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN112860953A (zh) | 图数据库的数据导入方法、装置、设备及存储介质 | |
US8554889B2 (en) | Method, system and apparatus for managing computer identity | |
CN106326014A (zh) | 一种资源访问方法及装置 | |
CN110245129B (zh) | 一种分布式全局数据去重方法和装置 | |
CN112445783A (zh) | 一种用于数据库更新的方法、装置和服务器 | |
CN116578746A (zh) | 对象去重方法及装置 | |
JP6418419B2 (ja) | ハードディスクがアプリケーションコードを実行するための方法および装置 | |
US20030154221A1 (en) | System and method for accessing file system entities | |
CN111209304B (zh) | 数据处理方法、装置及系统 | |
CN113285933A (zh) | 用户访问控制方法、装置、电子设备与存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |