CN114564500A - 在区块链***中实现结构化数据存储和查询的方法和*** - Google Patents
在区块链***中实现结构化数据存储和查询的方法和*** Download PDFInfo
- Publication number
- CN114564500A CN114564500A CN202210185170.6A CN202210185170A CN114564500A CN 114564500 A CN114564500 A CN 114564500A CN 202210185170 A CN202210185170 A CN 202210185170A CN 114564500 A CN114564500 A CN 114564500A
- Authority
- CN
- China
- Prior art keywords
- transaction
- blockchain
- data
- data storage
- execution
- 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
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例公开了在区块链***中实现结构化数据存储和查询的方法和***。所述方法包括:在交易执行过程中使用关系型数据库进行数据存储和查询。
Description
技术领域
本说明书涉及信息技术领域,特别涉及在区块链***中实现结构化数据存储和查询的方法和***。
背景技术
区块链***中,智能合约是业务逻辑的载体。一些区块链***仅提供k-v(key-value,键值对)查询接口,即在智能合约中仅支持通过提供key来查询与该key关联的value的单一数据查询方式,缺乏更加高效灵活的数据查询方式(如条件查询、范围查询、跨表的联合查询等),导致业务逻辑的开发受到各种限制。
因此,希望提供一种数据查询能力更强的区块链存储方案。
发明内容
本说明书实施例之一提供一种在区块链***中实现结构化数据存储和查询的方法,所述方法包括:在区块链交易执行过程中使用关系型数据库进行数据存储和查询。
本说明书实施例之一提供一种在区块链***中实现结构化数据存储和查询的***,所述实现结构化数据存储和查询的***用于:在区块链交易执行过程中使用关系型数据库进行数据存储和查询。
本说明书实施例之一提供一种在区块链***中实现结构化数据存储和查询的装置。所述装置包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现如本说明书任一实施例所述的在区块链***中实现结构化数据存储和查询的方法。
本说明书实施例之一提供一种区块链交易执行方法。所述方法包括:获取待执行的一个或多个交易;执行所述一个或多个交易,其中,使用关系型数据库对与所述一个或多个交易相关的状态数据进行读写。
本说明书实施例之一提供一种区块链交易执行***。所述***包括:交易获取模块,用于获取待执行的一个或多个交易;交易执行模块,用于执行所述一个或多个交易,其中,使用关系型数据库对与所述一个或多个交易相关的状态数据进行读写。
本说明书实施例之一提供一种区块链交易执行装置。所述装置包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现如本说明书任一实施例所述的区块链交易执行方法。
附图说明
本说明书将以示例性实施例的方式进一步说明,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:
图1是根据本说明书一些实施例所示的区块链***的应用场景示意图;
图2是根据本说明书一些实施例所示的区块链交易执行方法的示例性流程图;
图3是根据本说明书一些实施例所示的区块链交易执行***的示例性模块图;
图4是根据本说明书一些实施例所示的实现结构化数据存储和查询的存储模块的示意图。
具体实施方式
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本说明书的一些示例或实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本说明书应用于其它类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代表相同结构或操作。
应当理解,本文使用的“***”、“装置”、“单元”和/或“模组”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换所述词语。
如本说明书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。
本说明书中使用了流程图用来说明根据本说明书的实施例的***所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
图1是根据本说明书一些实施例所示的区块链***的应用场景示意图。如图1所示,区块链***100可以包括用户端110、区块链网络120和网络130。
用户端110可以是使用区块链服务的终端,其可以通过网络130链接至区块链网络120中的某一节点。用户端110可以发起交易,即生成交易并将生成的交易发送至区块链网络120,以使交易在区块链网络120被广播。
需要说明的是,本说明书中出现的交易特指区块链交易,用于触发区块链***100中的各类事件。例如,事件可以包括新节点的加入、节点的退出、转账、数据存证等中的一种或多种。在一些实施例中,存证的数据可以包括医疗信息、电子合同、电子凭据、电子订单、数字指纹等中的一种或多种。
智能合约(简称合约)是运行在区块链上的模块化、可重用、自动执行的脚本。部署合约时合约代码(如字节码)被存储到各区块链节点,每个(份)合约对应一个合约地址。当预定的条件发生时,可产生一笔交易指向合约地址的交易,区块链网络120中的区块链节点都可执行合约代码,并将执行结果写入区块链数据。即,智能合约中的代码可以通过交易触发执行,也可称作交易的执行。仅作为示例,转账交易可以触发对转账双方的账户余额的更新,数据存证交易可以触发将要存证的数据写入区块链数据,数据查询交易可以触发对区块链数据的读取,等等。
区块链网络120可以包括多个区块链节点,例如,图1中的节点120-1、节点120-2、节点120-3、...、节点120-n。任一区块链节点接收到用户端110发起的交易后,可以将交易转发给其他节点,以使交易在区块链网络120被广播。区块链节点可以收集在区块链网络120中广播的交易并基于一个或多个交易生成区块。其中,生成有效区块的前提条件可以包括:参与共识的区块链节点对生成区块所基于的交易的执行结果达成一致(共识通过)。另外,区块链节点也可以发起交易。
基于共识机制,区块链网络120中各个区块链节点存储的区块链数据可以保持一致。
区块链数据可以包括区块数据和状态数据。
其中,区块数据包括多个区块按产生时间顺序链接而成的数据链(即区块链),区块数据具有不可修改的特性。区块可以包括区块头和区块体两部分,其中,区块头中可写入区块的关键信息(或称为概要信息),区块体中可以写入区块的详细信息。例如,区块头中可以写入区块时间戳、(本区块的)区块哈希值、父区块(前一区块)的区块哈希值、区块高度、默克尔树的根哈希等,其中,区块时间戳可反映区块的产生时间,区块哈希值可基于区块头中的内容计算得到,区块高度可反映本区块是第几个生成的区块。区块体中可以写入交易列表、交易收据列表等,交易列表包括生成区块所基于的一个或多个交易(可统称为区块中的交易),交易收据列表包括区块中的一个或多个交易的收据。
可以将交易以键值对(k-v)形式写入交易列表中,key(键/关键字,可简写为k)为交易ID,value(值,可简写为v)为交易的各个字段。仅作为示例,交易的各个字段可以包括交易发起方的账户地址、交易时间戳、交易发起方愿意为交易支付的金额、调用的智能合约的账户地址、调用的智能合约中的函数的名称、提供给函数的输入等。
状态数据为支持增删查改的区块链数据,可用键值对(k-v)来存储状态数据,k为状态数据的标识(名称/ID),v为状态数据的值(如数值)。例如,状态数据可以包括所有区块链账户的状态(账户状态)组成的世界状态。账户状态可以k-v形式存储,k为账户标识(也可称为账户地址),v为账户状态的值。账户状态可以包括账户余额,对于智能合约关联的合约账户,账户状态还可以包括智能合约代码的哈希值、智能合约的账户存储的状态。
每个智能合约(账户)可具有对应的存储,相应地,状态数据还可以包括智能合约的存储。智能合约的存储可包括合约代码(如字节码)和账户存储两部分。其中,账户存储可保存合约变量。合约变量可以k-v形式存储,k为变量名,v为变量值。具体地,合约变量的k可以是资产账户的名称(地址),合约变量的v可以是资产账户的余额。进一步地,余额可以包括不同资产类型对应的k-v,k可以是资产类型(如,人民币、美元等),v可以是该资产类型的余额。逻辑上,键值对形式的状态数据(多个键值对)可以被组织成默克尔(Merkle)树的形式。底层数据库可基于Merkle树构建,该数据库可称作基于默克尔树的数据库。
默克尔树是一种哈希二叉树,它是一种用于快速归纳和校验大规模数据完整性的数据结构。SPV(Simplified Payment Verification,简单支付验证)充分利用了Merkle树的这个特点,在保存较少的区块链数据的情况下,例如,仅保存区块头而不保存区块体时,区块链网络120中的SPV节点(也称为轻量节点/轻客户端,可以是用户端110)也可以进行相关验证,如验证交易是否存在、交易是否属于某个区块等。
在一些实施例中,用于记录状态数据的默克尔树可以包括状态树、交易树、收据树、存储树等中的一种或多种。其中,状态树用于保存世界状态。每个区块可对应一棵交易树,每个区块的交易树用于保存区块中的所有交易。每个区块可对应一棵收据树,每个区块的收据树用于保存区块中的所有交易的执行结果。每个智能合约可对应一棵存储树,存储树用于保存智能合约的账户存储。
在一些实施例中,用于记录状态数据的默克尔树可以包括MPT(Merkle PatriciaTree)树,MPT树结合了默克尔树(Merkle Tree)和压缩前缀树(Patricia Tree)的特点,可以减小存储开销以及提高查询效率。
默克尔树的根节点的哈希值(简称根哈希)保存于区块(头)中,对默克尔树记录的任意状态数据的改动会引起根哈希的变化,因此默克尔树可以提供数据证明功能(SPV功能)。对于依赖k-v接口进行数据查询的区块链***,基于key获取完整value(即状态数据的所有字段)的单一查询模式仅能实现有限的业务逻辑,(大)部分业务逻辑还需要在链下实现(甚至需要另外考虑可靠性),造成开发困难、链下***不统一、升级困难等问题。
为此,本说明书实施例提供了在区块链***中实现结构化数据存储和查询的方法和***。在交易执行过程中,区块链节点可基于关系型数据进行数据存储和查询。关于交易执行过程以及区块生成过程中涉及的读写细节,可以参考图2及其相关描述,这里不再赘述。
关系型数据库用于存储结构化数据。结构化数据是由二维表结构来逻辑表达和实现的数据。二维表中,每一行可用于存储同一条目的各个字段,每一列可对应一个字段。可以理解,对于可用键值对表示的状态数据,二维表的每一行可对应同一状态数据的key,表中的每一列可对应状态数据的某个字段。以交易为例,关系型数据库可以包括交易表,交易表的每一行可存储同一交易的各个字段,如交易发起方的账户地址、目的合约账户的地址、交易时间戳(指示交易的产生时间)、费用信息等。
结构化的特性使得数据易于存储和查询。关系型数据库能够按照区块链数据的结构规律提供高效的存储。关系型数据库也能通过对区块链数据当中的特定字段建立索引,提供高效灵活的查询功能,例如,通过索引实现针对特定字段的条件查询、范围查询等。仅作为示例,通过对交易时间戳建立索引,智能合约的开发人员可以编写查询产生于特定时间段的交易的语句,进而可在智能合约中实现更丰富的业务逻辑。
在一些实施例中,智能合约与底层的关系型数据库间的交互可通过数据读写的抽象层进行。具体而言,开发人员在编写合约代码时能够以API的方式进行数据存储和查询。如此,为开发人员提供了诸多便利,包括但不限于:开发人员无需担心字符串转义等琐事,交由机器自动处理;编译时检查保证了类型的安全,减少开发人员出错的机会;以白名单的方式暴露接口,避免开发人员错误使用未实现的功能。
在一些实施例中,用户端110/区块链网络120中的节点可以包括各类计算设备,如膝上型计算机、台式计算机、服务器等等。其中,服务器可以是独立的服务器或者服务器组,该服务器组可以是集中式的或者分布式的。在一些实施例中,服务器可以是区域的或者远程的。在一些实施例中,服务器可在云平台上执行。例如,该云平台可包括私有云、公共云、混合云、社区云、分散式云、内部云等中的一种或其任意组合。在一些实施例中,用户端110和区块链节点可以集成于同一计算设备。
网络130连接***的各组成部分,使得各部分之间可以进行通讯。在***中各部分之间的网络可以包括有线网络和/或无线网络。例如,网络130可以包括电缆网络、有线网络、光纤网络、电信网络、内部网络、互联网、局域网络(LAN)、广域网络(WAN)、无线局域网络(WLAN)、城域网(MAN)、公共交换电话网络(PSTN)、蓝牙网络、紫蜂网络(ZigBee)、近场通信(NFC)、设备内总线、设备内线路、线缆连接等或其任意组合。每两个部分之间的网络连接可以是采用上述一种方式,也可以是采取多种方式。可以理解,网络130与区块链网络120不必具有明显的分界,在更一般的应用场景中,区块链节点与普通网络节点可以共同接入同一物理网络中,其中的区块链节点在逻辑上构成区块链网络。
图2是根据本说明书一些实施例所示的区块链交易执行方法的示例性流程图。流程200可以由任一区块链节点执行。流程200可以发生在多个可能的场景下,例如,在基于一个或多个交易生成新区块的场景下,在追赶区块(包含执行生成旧区块所基于的一个或多个交易,以同步区块链数据)的场景下。如图2所示,流程200可以包括:
步骤210,获取待执行的一个或多个交易。
在生成新区块的场景下,区块链节点可以基于一段时间内接收到的一个或多个交易生成新区块,在生成新区块的过程中需要执行所述一个或多个交易。
在追赶区块的场景下,区块链节点也需要执行生成旧区块所基于的一个或多个交易,其中,区块链节点可以从区块链网络120中的其他节点获取旧区块,并基于旧区块获得相关的一个或多个交易。
步骤220,执行所述一个或多个交易,其中,使用关系型数据库对与所述一个或多个交易相关的状态数据进行读写。
可以理解,任一交易的执行可以只包含对相关状态数据的读取(查询)或者只包含写入(新增)相关的状态数据,也可以既包含对相关状态数据的读取(查询)又包含写入(新增/更改)相关的状态数据。其中,因执行同一交易而读取的状态数据和写入的状态树数据可以相同,也可以不相同(仅部分相同或完全没有交集)。另外,任一交易的执行也可以包含从关系型数据库中删除相关的状态数据。
在一些区块链***中,区块链节点会对接收到的多个交易进行模拟执行。模拟执行过程中,区块链节点并发执行所述多个交易,期间生成所述多个交易的读写集,并基于读写集判断不同交易(假设为第一交易和第二交易)之间是否存在读写冲突,若是,则放弃所述第一交易和所述第二交易之一的正式执行。为了便于描述,可以将交易视为读写的执行主体,旨在表明读写因执行何交易而发生。交易的读写集是指执行交易过程中读写存储的数据集合,包括读集和写集。读集可以包含交易读取的状态数据的key,写集可以包含交易写入的状态数据的key及其value,写集还可以包含携带删除标记的key以指示删除该key。读写冲突是指一个交易读取的状态数据与另一个交易写入的数据重叠,可根据两个交易的读写集中的key判断读写冲突是否存在。
用户端110确认发起的交易被放弃(正式)执行后,可以重新发起一个交易(以下简交易重试),这两个交易的部分内容相同(用户可以感知且希望上链成功的内容相同)。可以理解,区块链节点不会在交易的模拟执行过程中更新区块链数据,而是在交易的正式执行过程中(例如,共识通过后)更新区块链数据。模拟执行的机制使得区块链节点无法读取当前区块生成过程中写入的状态数据,只能读取上一区块(共识通过后生成的有效区块)生成过程中提交的状态数据。
相比之下,由于关系型数据库满足事务的ACID特性,使用关系型数据库对与所述一个或多个交易相关的状态数据进行读写,可以保证交易执行的正确性和可靠性。可以理解,一个交易的执行可包含一个负责状态数据的读写的事务。
下面对事务及其ACID特性进行解释。
一个事务由一个或多个操作组成。事务须满足ACID特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
原子性是指:一个事务中的所有操作,要么全部执行要么全部不执行,事务执行过程中若发生错误,数据应当回滚(恢复)到事务执行前的状态,如同这个事务从未发生过一样。为了便于描述,可以将事务作为事务所包含的操作的执行主体。
一致性是指:事务开始前和结束后,对数据的约束不会被破坏,即写入数据库的数据必须符合所有的预设规则,其中可包含数据的精准度、串联性以及后续数据库能自发完成预定工作。例如,要从A账户转100到B账户,必须是从A账户中减去100并往B账户中加100,而不能出现增减数额不相等的问题。
隔离性是指:一个事务在涉及的修改全部完成之前,对其他事务来说是不可见的,即在执行其他事务是无法获知执行该事务过程中的中间状态。
持久性是指:一个事务完成后,事务的执行结果必须是持久化保存的,即使数据库发生崩溃,在数据库回复后,已提交的事务的执行结果仍然不会丢失。
其中,隔离性意味着多个并发操作之间是互相隔离(不不干扰)的。隔离性在数据库操作中至关重要,如果不考虑隔离性,可能会出现脏读、不可重复读、幻读的问题。
脏读是指:事务T1读取了事务T2未提交的数据,结果针对事务T2执行了状态回滚,导致事务T1拿到了脏数据。
不可重复读是指:事务T1读取数据D后,数据D被事务T2更新了,导致执行事务T1过程中再次读取数据D时发现数据前后不一致。
幻读是指:事务A按照一定条件进行数据读取,期间事务B***了满足相同搜索条件的新数据,事务A再次按照该条件进行数据读取时,发现了事务B新***的数据。
针对以上问题,数据库可提供读未提交(Read uncommitted)、读提交(ReadCommitted)、可重复读(Repeated Read)、串行化(Serializable)这四种由低到高的隔离级别。其中,读未提交无法确保任一问题不会出现,读提交(Read Committed)能够确保脏读问题不会出现,可重复读能够确保脏读和不可重复读问题不会出现,串行化能够确保脏、不可重复读和幻读问题不会出现。
在一些实施例中,当所述一个或多个交易包括两个或以上交易时,区块链节点可以并发执行所述两个或以上交易。对于所述两个或以上交易中的不同交易(假设为第一交易和第二交易),区块链节点可以判断第一交易和第二交易是否存在读写冲突。若否,则这两个交易并发执行成功,可以保证交易的高效执行。若是,则针对所述第一交易和所述第二交易之一执行状态回滚,并在另一交易执行完毕后重新执行所述第一交易和所述第二交易之一。即,通过交易串行隔离对相同状态数据的读写。关于交易的读写集以及读写冲突,还可以参考前文的相关描述。
仅作为示例,假设交易A和交易B触发对同一账户余额的更新,该账户的余额用amount(即键/key)表示,在执行交易A和交易B之前amount=100,具体的扣款逻辑是若账户余额充足则扣款60,否则扣款失败。显然,若不考虑隔离性,有可能出现:任一交易扣款前,都发现账户余额充足(即大于60),于是交易A和交易B都从账户余额中减去60,导致账户余额变成负数。若按隔离性要求执行交易A和交易B,则区块链节点可以并发执行交易A和交易B。在发现交易A和交易B都触发对amount的更新后,区块链节点可针对其中一个交易(不妨设为交易A)执行状态回滚,并在交易A执行完毕后再执行一次交易B。如此,再次执行交易B时,区块链节点就会发现账户余额不足,进而扣款失败,不会导致账户余额变成负数。
可以看出,相较于模拟执行,基于事务的隔离性进行交易并发,可以减少交易重试,且可以为Read-Your-Writes语义提供支持。Read-Your-Writes意为“读己之所写”,是指节点更新一个数据(如前述amount)后总是能访问到自身更新过的最新值。
在一些实施例中,若区块链***需要支持SPV功能,则区块链节点在基于关系型数据库对与所述一个或多个交易相关的状态数据进行存储的同时,还可以基于默克尔树的数据库对与所述一个或多个交易进行相关的状态数据进行存储。其中,存储泛指状态数据的新增、删除已有状态数据、修改已有状态数据(修改value)。即,通过关系型数据库以及基于默克尔树的数据库实现状态数据的双写,以在提供强大数据查询能力的同时满足SPV需求。
在生成新区块的场景下,区块链节点还可以对所述一个或多个交易的执行结果进行共识以生成区块。可以理解,共识的目的是生成相同且正确(有效)的区块。共识通过后,各区块链节点可将相同的区块添加入区块链。
在一些实施例中,区块链节点还可以将所述一个或多个交易的读写集写入区块中,例如,写入区块体中。如此,任意的数据篡改都会导致共识无法通过,从而保证了区块链的不可篡改性。
应当注意的是,上述有关流程的描述仅仅是为了示例和说明,而不限定本说明书的适用范围。对于本领域技术人员来说,在本说明书的指导下可以对流程进行各种修正和改变。然而,这些修正和改变仍在本说明书的范围之内。
图3是根据本说明书一些实施例所示的区块链交易执行***的模块图。如图3所示,***300可以包括交易获取模块310和交易执行模块320。
交易获取模块310可以用于获取待执行的一个或多个交易。
交易执行模块320可以用于执行所述一个或多个交易。其中,交易执行模块320可以使用关系型数据库对与所述一个或多个交易相关的状态数据进行读写。
在一些实施例中,***300还可以包括如图4所示的存储模块,该存储模块用于在交易执行过程中使用关系型数据库进行数据存储和查询。即,交易执行模块320在执行交易过程中可以调用存储模块实现对状态数据的读写。存储模块的功能还可以进一步细化,即可将存储模块视为***300中的子***,该子***用于在区块链***100中实现结构化数据存储和查询。
可以理解,***300可以包含在更大的***中,如包含在区块生成***中,该区块生成***还可以包括共识模块,该共识模块用于对所述一个或多个交易的执行结果进行共识以生成区块。
关于***300及其模块的更多细节,可以参考图2及其相关描述。
应当理解,图3所示的***及其模块可以利用各种方式来实现。例如,在一些实施例中,***及其模块可以通过硬件、软件或者软件和硬件的结合来实现。其中,硬件部分可以利用专用逻辑来实现;软件部分则可以存储在存储器中,由适当的指令执行***,例如微处理器或者专用设计硬件来执行。本领域技术人员可以理解上述的方法和***可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本说明书的***及其模块不仅可以有诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用例如由各种类型的处理器所执行的软件实现,还可以由上述硬件电路和软件的结合(例如,固件)来实现。
需要注意的是,以上对于***及其模块的描述,仅为描述方便,并不能把本说明书限制在所举实施例范围之内。可以理解,对于本领域的技术人员来说,在了解***的原理后,可能在不背离这一原理的情况下,对各个模块进行任意组合,或者构成子***与其他模块连接。例如,在一些实施例中,交易获取模块310和交易执行模块320可以是一个***中的不同模块,也可以是一个模块实现这两个模块的功能。诸如此类的变形,均在本说明书的保护范围之内。
本说明书实施例可能带来的有益效果包括但不限于:(1)使用关系型数据库来存储结构化的区块链数据,可以提供高效灵活的数据存储和查询功能;(2)关系型数据库满足事务的ACID特性,可以保证交易执行的正确性和可靠性;(3)基于事务的隔离性进行交易并发,可以减少交易重试,且可以为Read-Your-Writes语义提供支持;(4)通过关系型数据库以及基于默克尔树的数据库实现状态数据的双写,可以在提供强大数据查询能力的同时满足SPV需求。需要说明的是,不同实施例可能产生的有益效果不同,在不同的实施例里,可能产生的有益效果可以是以上任意一种或几种的组合,也可以是其他任何可能获得的有益效果。
上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书实施例的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书实施例进行各种修改、改进和修正。该类修改、改进和修正在本说明书实施例中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。
同时,本说明书使用了特定词语来描述本说明书的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本说明书至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本说明书的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
此外,本领域技术人员可以理解,本说明书实施例的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本说明书实施例的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“***”。此外,本说明书实施例的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。
计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行***、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、RF、或类似介质,或任何上述介质的组合。
本说明书实施例各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB.NET、Python等,常规程序化编程语言如C语言、VisualBasic、Fortran2003、Perl、COBOL2002、PHP、ABAP,动态编程语言如Python、Ruby和Groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或处理设备上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(LAN)或广域网(WAN),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(SaaS)。
此外,除非权利要求中明确说明,本说明书实施例所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本说明书实施例流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的***组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的处理设备或移动设备上安装所描述的***。
同理,应当注意的是,为了简化本说明书实施例披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书实施例对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本说明书权利要求最广范围有限制的文件(当前或之后附加于本说明书中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义、和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。
最后,应当理解的是,本说明书中所述实施例仅用以说明本说明书实施例的原则。其他的变形也可能属于本说明书实施例的范围。因此,作为示例而非限制,本说明书实施例的替代配置可视为与本说明书的教导一致。相应地,本说明书的实施例不仅限于本说明书明确介绍和描述的实施例。
Claims (6)
1.一种在区块链***中实现结构化数据存储和查询的方法,其中,包括:
在区块链交易执行过程中使用关系型数据库进行数据存储和查询。
2.如权利要求1所述的方法,其中,还包括:
在区块生成过程中将区块链交易的读写集写入区块。
3.如权利要求1或2所述的方法,其中,在区块生成过程中还使用基于默克尔树的数据库进行数据存储。
4.如权利要求1所述的方法,其中,所述在区块链交易执行过程中使用关系型数据库进行数据存储和查询,包括:
对于并发执行的两个或以上区块链交易中的第一区块链交易和第二区块链交易,判断所述第一区块链交易和所述第二区块链交易之间是否存在读写冲突,若是,则针对所述第一区块链交易和所述第二区块链交易之一执行状态回滚,并在另一区块链交易执行完毕后重新执行所述第一区块链交易和所述第二区块链交易之一。
5.一种在区块链***中实现结构化数据存储和查询的***,其中,所述实现结构化数据存储和查询的***用于:
在区块链交易执行过程中使用关系型数据库进行数据存储和查询。
6.一种在区块链***中实现结构化数据存储和查询的装置,其中,包括处理器和存储设备,所述存储设备用于存储指令,当所述处理器执行指令时,实现如权利要求1~4中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210185170.6A CN114564500A (zh) | 2022-02-28 | 2022-02-28 | 在区块链***中实现结构化数据存储和查询的方法和*** |
PCT/CN2022/135638 WO2023160095A1 (zh) | 2022-02-28 | 2022-11-30 | 在区块链***中实现结构化数据存储和查询的方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210185170.6A CN114564500A (zh) | 2022-02-28 | 2022-02-28 | 在区块链***中实现结构化数据存储和查询的方法和*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114564500A true CN114564500A (zh) | 2022-05-31 |
Family
ID=81715695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210185170.6A Pending CN114564500A (zh) | 2022-02-28 | 2022-02-28 | 在区块链***中实现结构化数据存储和查询的方法和*** |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114564500A (zh) |
WO (1) | WO2023160095A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023160095A1 (zh) * | 2022-02-28 | 2023-08-31 | 蚂蚁区块链科技(上海)有限公司 | 在区块链***中实现结构化数据存储和查询的方法和*** |
WO2024021411A1 (zh) * | 2022-07-29 | 2024-02-01 | 蚂蚁区块链科技(上海)有限公司 | 区块链***中的交易冲突检测方法及区块链节点 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111241590A (zh) * | 2018-11-29 | 2020-06-05 | 华为技术有限公司 | 一种数据库***、节点和方法 |
US11093495B2 (en) * | 2019-06-25 | 2021-08-17 | International Business Machines Corporation | SQL processing engine for blockchain ledger |
CN110912937B (zh) * | 2019-12-23 | 2021-09-07 | 杭州中科先进技术研究院有限公司 | 一种基于区块链的数字存证平台和存证方法 |
CN111242620A (zh) * | 2020-01-15 | 2020-06-05 | 阳光易购(湖南)科技有限公司 | 区块链交易***的数据缓存及查询方法、终端及存储介质 |
CN113688186B (zh) * | 2021-08-25 | 2022-11-22 | 工银科技有限公司 | 智能合约执行方法、引擎及区块链节点 |
CN113743950B (zh) * | 2021-11-04 | 2022-08-09 | 支付宝(杭州)信息技术有限公司 | 在区块链***中执行交易的方法、节点和区块链*** |
CN114564500A (zh) * | 2022-02-28 | 2022-05-31 | 蚂蚁区块链科技(上海)有限公司 | 在区块链***中实现结构化数据存储和查询的方法和*** |
-
2022
- 2022-02-28 CN CN202210185170.6A patent/CN114564500A/zh active Pending
- 2022-11-30 WO PCT/CN2022/135638 patent/WO2023160095A1/zh unknown
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023160095A1 (zh) * | 2022-02-28 | 2023-08-31 | 蚂蚁区块链科技(上海)有限公司 | 在区块链***中实现结构化数据存储和查询的方法和*** |
WO2024021411A1 (zh) * | 2022-07-29 | 2024-02-01 | 蚂蚁区块链科技(上海)有限公司 | 区块链***中的交易冲突检测方法及区块链节点 |
Also Published As
Publication number | Publication date |
---|---|
WO2023160095A1 (zh) | 2023-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11288243B2 (en) | Systems and methods for assessing data quality | |
CA3121919C (en) | System and method for augmenting database applications with blockchain technology | |
US7921330B2 (en) | Data migration manager | |
US9652519B2 (en) | Replicating data across multiple copies of a table in a database system | |
CN106030533B (zh) | 通过拆分过程执行自动重试事务 | |
US7702698B1 (en) | Database replication across different database platforms | |
US8572056B2 (en) | System with multiple conditional commit databases | |
US8688628B2 (en) | Nested queued transaction manager | |
US7873605B2 (en) | Apparatus to selectively remove the effects of transactions in online database and enable logical recovery | |
CN114564500A (zh) | 在区块链***中实现结构化数据存储和查询的方法和*** | |
CN110555770B (zh) | 一种基于增量哈希的区块链世界状态校验和恢复方法 | |
CN111522631A (zh) | 分布式事务处理方法、装置、服务器及介质 | |
CN108319711A (zh) | 数据库的事务一致性测试方法、装置、存储介质及设备 | |
US9390111B2 (en) | Database insert with deferred materialization | |
CN111984662B (zh) | 批量更新数据库的方法及装置 | |
US12038909B2 (en) | Systems and methods for scalable database technology | |
CN111143463B (zh) | 一种基于主题模型的银行数据仓库的构建方法及装置 | |
WO2023124242A1 (zh) | 事务执行方法、装置、设备和存储介质 | |
CN111240891A (zh) | 基于数据库多表间数据一致性的数据恢复方法及装置 | |
CN109710698A (zh) | 一种数据汇聚方法、装置、电子设备及介质 | |
CN112817931B (zh) | 一种增量版本文件的生成方法及装置 | |
US8326808B2 (en) | Information processing apparatus, and information processing method, program, and recording medium | |
CN116739397B (zh) | 一种新能源指标的动态管理方法 | |
US20230385276A1 (en) | Database object validation for reusing captured query plans | |
CN117149745A (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 |