CN112507028A - 数据存储方法、装置、设备和存储介质 - Google Patents
数据存储方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN112507028A CN112507028A CN202011501584.2A CN202011501584A CN112507028A CN 112507028 A CN112507028 A CN 112507028A CN 202011501584 A CN202011501584 A CN 202011501584A CN 112507028 A CN112507028 A CN 112507028A
- Authority
- CN
- China
- Prior art keywords
- data
- storage
- storage space
- statistical
- stored
- 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.)
- Granted
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/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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- 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)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Finance (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Accounting & Taxation (AREA)
- Bioethics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
公开了一种数据存储方法、装置、设备和存储介质,属于区块链技术领域。应用于区块链系统,包括:每接收到一条数据存储请求,将数据存储请求携带的原始数据存储至智能合约对应的第一存储空间,之后,根据原始数据获取统计数据,将统计数据存储至智能合约对应的第二存储空间。本申请中每存储一个原始数据到智能合约内部,就对这个原始数据进行计算得到统计数据,并将该统计数据也存储到智能合约内部。如此,实现了在需要在合约层面对大量数据进行计算的场景下,将计算分摊到每次数据存储时进行,从而可以避免大量数据最终同时计算导致性能降低甚至out of gas异常。并且,由于数据计算在合约层面进行,所以可以保证计算过程的公开透明。
Description
技术领域
本申请涉及区块链技术领域,特别涉及一种数据存储方法、装置、设备和存储介质。
背景技术
区块链系统中的每笔交易都会被收取一定数量的燃料(gas)。设置gas的目的是限制交易执行所需的工作量,同时为交易的执行支付费用。
目前,在区块链系统中进行数据计算时,为了防止大量计算耗尽gas后触发out ofgas异常,往往是将大量计算放在业务层面,只用合约来存储数据;或者,仅在合约层面进行少量计算。
然而,在一些特殊场景下,为了保证计算过程的公开透明,要求数据计算在合约层面进行,这就容易导致out of gas异常。
发明内容
本申请实施例提供了一种数据存储方法、装置、设备和存储介质,可以在合约层面进行数据计算,保证计算过程的公开透明。所述技术方案如下:
第一方面,提供了一种数据存储方法,应用于区块链系统,所述方法包括:
每接收到一条数据存储请求,将所述数据存储请求携带的原始数据存储至智能合约对应的第一存储空间;
在将所述原始数据存储至所述第一存储空间后,根据所述原始数据获取统计数据,将所述统计数据存储至所述智能合约对应的第二存储空间。
在本申请中,区块链系统每存储一个原始数据到智能合约内部,就会对这个原始数据进行计算得到统计数据,并将该统计数据也存储到该智能合约内部。如此,可以实现在需要在合约层面对大量数据进行计算的场景下,将计算分摊到每次数据存储时进行,从而可以避免大量数据最终同时计算导致性能降低甚至导致out of gas异常。并且,在此情况下,由于数据计算在合约层面进行,所以可以保证计算过程的公开透明。
可选地,所述将所述数据存储请求携带的原始数据存储至智能合约对应的第一存储空间,包括:
根据所述原始数据调用所述智能合约中的存储方法,以将所述原始数据存储至所述第一存储空间。
可选地,所述在将所述原始数据存储至所述第一存储空间后,根据所述原始数据获取统计数据,将所述统计数据存储至所述智能合约对应的第二存储空间,包括:
在将所述原始数据存储至所述第一存储空间后,根据所述原始数据调用所述智能合约中的统计方法,以根据所述原始数据获取统计数据,并将所述统计数据存储至所述智能合约对应的第二存储空间。
可选地,所述根据所述原始数据获取统计数据,将所述统计数据存储至所述智能合约对应的第二存储空间,包括:
根据预设计算规则,对所述原始数据和所述第二存储空间存储的数据进行计算,得到所述统计数据;
将所述统计数据更新存储至所述第二存储空间。
可选地,所述根据预设计算规则,对所述原始数据和所述第二存储空间存储的数据进行计算,得到所述统计数据之前,还包括:
根据所述数据存储请求的属性获取所述预设计算规则,所述数据存储请求的属性包括所述数据存储请求的发送次数、发送时间、所述数据存储请求携带的参数中的一个或多个。
第二方面,提供了一种数据存储装置,应用于区块链系统,所述装置包括:
第一存储模块,用于每接收到一条数据存储请求,将所述数据存储请求携带的原始数据存储至智能合约对应的第一存储空间;
第二存储模块,用于在将所述原始数据存储至所述第一存储空间后,根据所述原始数据获取统计数据,将所述统计数据存储至所述智能合约对应的第二存储空间。
可选地,所述第一存储模块用于:
根据所述原始数据调用所述智能合约中的存储方法,以将所述原始数据存储至所述第一存储空间。
可选地,所述第二存储模块用于:
在将所述原始数据存储至所述第一存储空间后,根据所述原始数据调用所述智能合约中的统计方法,以根据所述原始数据获取统计数据,并将所述统计数据存储至所述智能合约对应的第二存储空间。
可选地,所述第二存储模块用于:
根据预设计算规则,对所述原始数据和所述第二存储空间存储的数据进行计算,得到所述统计数据;
将所述统计数据更新存储至所述第二存储空间。
可选地,所述装置还包括:
获取模块,用于根据所述数据存储请求的属性获取所述预设计算规则,所述数据存储请求的属性包括所述数据存储请求的发送次数、发送时间、所述数据存储请求携带的参数中的一个或多个。
第三方面,提供了一种计算机设备,所述计算机设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述的数据存储方法。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述的数据存储方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述的数据存储方法的步骤。
可以理解的是,上述第二方面、第三方面、第四方面、第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种区块链系统的结构示意图;
图2是本申请实施例提供的一种区块链的示意图;
图3是本申请实施例提供的一种数据存储系统的示意图;
图4是本申请实施例提供的一种数据存储方法的流程图;
图5是本申请实施例提供的一种数据存储装置的结构示意图;
图6是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
应当理解的是,本申请提及的“多个”是指两个或两个以上。另外,为了便于清楚描述本申请的技术方案,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
在对本申请实施例进行解释说明之前,先对区块链的相关内容予以说明。
图1是本申请实施例提供的一种区块链系统的结构示意图。
参见图1,区块链系统100是指用于进行节点与节点之间数据共享的系统,区块链系统100中可以包括多个节点101,多个节点101可以是指区块链系统100中各个客户端。每个节点101在进行正常工作可以接收到输入信息,并基于接收到的输入信息维护区块链系统100内的共享数据。为了保证区块链系统100内的信息互通,区块链系统100中的每个节点101之间可以存在信息连接,节点101之间可以通过该信息连接进行信息传输。比如,当区块链系统100中的任意节点101接收到输入信息时,区块链系统100中的其他节点101便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得区块链系统100中全部节点101上存储的数据一致。
区块链系统100中的每个节点101均存储一条相同的区块链。参见图2,区块链由多个区块组成,创始块中包括区块头和区块主体,区块头中存储有输入信息特征值、版本号、时间戳和难度值,区块主体中存储有输入信息;创始块的下一区块以创始块为父区块,下一区块中同样包括区块头和区块主体,区块头中存储有当前区块的输入信息特征值、父区块的区块头特征值、版本号、时间戳和难度值,并以此类推,使得区块链中每个区块中存储的区块数据均与父区块中存储的区块数据存在关联,保证了区块中输入信息的安全性。
区块链系统100具有分布式数据存储、点对点传输、共识机制、加密算法等计算机技术。区块链系统100是一个分布式的共享账本和数据库,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。这些特点保证了区块链的共享开放、真实完整和安全可靠。
下面对本申请实施例涉及的系统架构予以说明。
图3是本申请实施例提供的一种数据存储系统的示意图。参见图3,该数据存储系统包括:计算机设备301和区块链系统302。
计算机设备301可以是一个通用计算机设备或一个专用计算机设备。在具体实现中,计算机设备301可以是台式机、便携式电脑、网络服务器、掌上电脑、移动手机、平板电脑、无线终端设备、通信设备或嵌入式设备等,本申请实施例不限定计算机设备301的类型。
区块链系统302可以是上文图1-图2实施例所述的区块链系统100。
计算机设备301与区块链系统302可以通过有线网络或无线网络进行通信。计算机设备301可以生成需要存储的原始数据,并将该原始数据存储至区块链系统302。区块链系统302可以执行下文图4实施例所述的数据存储方法,来实现对该原始数据的存储。
下面对本申请实施例提供的数据存储方法进行详细地解释说明。
图4是本申请实施例提供的一种数据存储方法的流程图。参见图4,该方法应用于区块链系统,该区块链系统可以是上文图1-图2实施例所述的区块链系统100,也可以是上文图3实施例所述的区块链系统302。该方法包括以下步骤。
步骤401:区块链系统每接收到一条数据存储请求,将该数据存储请求携带的原始数据存储至智能合约对应的第一存储空间。
该数据存储请求用于请求将该数据存储请求携带的原始数据存储至区块链系统中的智能合约内部,也即,存储至该智能合约对应的存储空间。
该数据存储请求可以是计算机设备发送的。该计算机设备可以在生成原始数据后,将该原始数据携带于数据存储请求中发送到区块链系统,以指示区块链系统将该原始数据存储至智能合约内部。该原始数据可以是用户输入至该计算机设备中的,也可以是该计算机设备通过其他方式获取到的,本申请实施例对此不作限定。比如,该原始数据可以是用户输入至该计算机设备的考勤数据,包括但不限于出勤人次等。
智能合约是基于区块链可信的不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。在区块链架构中,智能合约以链上代码的形式存在。可以通过调用智能合约来执行特定的操作。
智能合约中可以包括多个方法,该多个方法中的每个方法均是该智能合约里的可执行单元,可以实现相应的操作。对于智能合约中的任意一个方法来说,这个方法可以被该智能合约内部或是外部(即另外一个智能合约)调用。
对于区块链系统来说,区块链系统在部署智能合约后,会创建一个合约账户,这个合约账户里保存着该智能合约的可执行字节码,并且有存储空间,该存储空间可以称为该智能合约对应的存储空间。该智能合约的可执行字节码可以在区块链系统中的虚拟机里执行。通过该智能合约可以在该存储空间中写入数据、从该存储空间中读取数据、或对该存储空间中的数据进行修改。
在本申请实施例中,该智能合约对应两个存储空间,分别为第一存储空间和第二存储空间。第一存储空间和第二存储空间中的数据结构可以不同。
比如,当区块链系统是Hyperchain平台时,智能合约运行在HVM(HyperchainVirtual Machine)中,该智能合约可以称为HVM合约。此时第一存储空间中的数据结构可以是HVM合约中的HyperList、HyperMap、或HyperTable等,第二存储空间中的数据结构可以是HVM合约中的HyperList、HyperMap、或HyperTable等,且第一存储空间和第二存储空间中的数据结构不同。
再比如,该智能合约可以是solidity合约。此时第一存储空间中的数据结构可以是solidity合约中的结构体(Struct)或映射(Mappings)等,第二存储空间中的数据结构可以是solidity合约中的结构体或映射等,且第一存储空间和第二存储空间中的数据结构不同。其中,solidity合约提供结构体来定义自定义类型,结构体中只包含数据类型而不能包含变量和函数。映射是一种键值对的映射关系存储结构,可被视为一个哈希表。
具体地,步骤401的操作可以为:区块链系统每接收到一条数据存储请求,根据该原始数据调用智能合约中的存储方法,以将该原始数据存储至该智能合约对应的第一存储空间。
智能合约中的存储方法用于将某个数据存储至该智能合约对应的第一存储空间。也即,通过调用该智能合约中的存储方法,可以执行合约逻辑,来实现将该原始数据存储至第一存储空间的操作。
步骤402:区块链系统在将该原始数据存储至第一存储空间后,根据该原始数据获取统计数据,将该统计数据存储至该智能合约对应的第二存储空间。
该统计数据可以是对该原始数据计算得到。也即,本申请实施例中,区块链系统每存储一个原始数据到智能合约内部,就会对这个原始数据进行计算得到统计数据,并将该统计数据也存储到该智能合约内部。如此,可以实现在需要在合约层面对大量数据进行计算的场景下,将计算分摊到每次数据存储时进行,从而可以避免大量数据最终同时计算导致性能降低甚至导致out of gas异常。并且,在此情况下,由于数据计算在合约层面进行,所以可以保证计算过程的公开透明。
具体地,步骤402的操作可以为:区块链系统在将该原始数据存储至第一存储空间后,根据该原始数据调用该智能合约中的统计方法,以根据该原始数据获取统计数据,并将该统计数据存储至该智能合约对应的第二存储空间。
智能合约中的统计方法用于对最新存储至第一存储空间的一个原始数据进行计算,并将计算得到的统计数据存储至该智能合约对应的第二存储空间。也即,通过调用该智能合约中的统计方法,可以执行合约逻辑,来实现根据该原始数据获取统计数据,并将该统计数据存储至该智能合约对应的第二存储空间的操作。如此,将核心计算规则放入智能合约内,可以保证计算的公开透明。
该智能合约中可以有多个统计方法,各个统计方法中的计算规则可以不同。具体调用该智能合约中的哪个统计方法,可以根据该数据存储请求的属性确定。也即,该数据存储请求的属性不同时,在根据该数据存储请求携带的原始数据获取统计数据时调用的统计方法不同,相应地,采用的计算规则也就不同。该数据存储请求的属性可以包括该数据存储请求的发送次数、发送时间、该数据存储请求携带的参数中的一个或多个。该数据存储请求携带的参数可以是发送该数据存储请求的计算机设备生成的用于后续原始数据计算的参数,如可以是用户输入至该计算机设备中的用于后续数据计算的参数。
一种可能的方式中,区块链系统根据该原始数据获取统计数据,将该统计数据存储至该智能合约对应的第二存储空间的操作可以为:根据预设计算规则,对该原始数据和该智能合约对应的第二存储空间存储的数据进行计算,得到统计数据,将该统计数据更新存储至第二存储空间。
将该统计数据更新存储至第二存储空间,是指将该统计数据替换掉第二存储空间当前存储的数据。也即,本申请实施例中,是将最新存储至第一存储空间的原始数据和第二存储空间当前存储的数据进行计算,得到统计数据,然后再将该统计数据替换掉第二存储空间当前存储的数据。如此,第二存储空间存储的就一直是最新计算得到的统计数据。
预设计算规则可以预先进行设置。示例地,预设计算规则可以是该智能合约中的统计方法对应的计算规则。
可选地,预设计算规则可以是直接得到最终计算结果的计算规则。比如,预设计算规则可以是每次进行数据存储时都进行平均值计算。这种情况下,每次将一个原始数据存储至智能合约对应的第一存储空间时,将这个原始数据与该智能合约对应的第二存储空间当前存储的数据进行平均值计算,将计算得到的统计数据更新存储至第二存储空间。假设第一次存储至第一存储空间的原始数据为10,则根据预设计算规则计算得到的平均值为10,将10作为统计数据存储至第二存储空间。假设第二次存储至第一存储空间的原始数据为20,则根据预设计算规则计算得到的平均值为(20+10)/2=15,将15作为统计数据更新存储至第二存储空间。假设第三次存储至第一存储空间的原始数据为30,则根据预设计算规则计算得到的平均值为(30+15)/2=22.5,将22.5作为统计数据更新存储至第二存储空间。
可选地,预设计算规则可以是先得到中间计算结果,满足一定条件时再根据该中间计算结果得到最终计算结果的计算规则。比如,预设计算规则可以是前3次进行数据存储时进行数据求和以及次数累计,第4次进行数据存储时进行平均值计算。假设第一次存储至第一存储空间的原始数据为10,则根据预设计算规则计算得到的数据之和为10、次数为1,将10和1均作为统计数据存储至第二存储空间。假设第二次存储至第一存储空间的原始数据为20,则根据预设计算规则计算得到的数据之和为20+10=30、次数为1+1=2,将30和2均作为统计数据更新存储至第二存储空间。假设第三次存储至第一存储空间的原始数据为30,则根据预设计算规则计算得到的数据之和为30+30=60、次数为1+2=3,将60和3均作为统计数据更新存储至第二存储空间。这种情况下,前3次数据存储时计算得到的并存储至第二存储空间的统计数据均为中间计算结果。假设第四次存储至第一存储空间的原始数据为16,则根据预设计算规则计算得到的数据之和为16+60=76、次数为1+3=4、平均值为76/4=19,将19作为统计数据更新存储至第二存储空间,第四次数据存储时计算得到的并存储至第二存储空间的统计数据是最终计算结果。
进一步地,在根据预设计算规则,对该原始数据和该智能合约对应的第二存储空间存储的数据进行计算之前,可以先根据该数据存储请求的属性获取预设计算规则。
该数据存储请求的属性不同时,所采用的预设计算规则可以不同,也即,所调用的统计方法可以不同。
可选地,区块链系统中可以预先存储有请求属性与预设计算规则之间的对应关系。区块链系统接收到一条数据存储请求后,可以从此对应关系中,获取该数据存储请求的属性对应的预设计算规则。
作为一种示例,区块链系统可以根据该数据存储请求的发送时间获取预设计算规则。比如,若该数据存储请求的发送时间不是当月的最后一天,则可以根据第一预设计算规则对该原始数据和第二存储空间存储的数据进行计算,得到统计数据,将该统计数据更新存储至第二存储空间。若该数据存储请求的发送时间是当月的最后一天,则可以根据第二预设计算规则对该原始数据和第二存储空间存储的数据进行计算,得到统计数据,将该统计数据更新存储至第二存储空间。第一预设计算规则与第二预设计算规则不同。
假设需要统计部门内一个月的总出勤人次。部门成员的出勤人次每天统计。部门经理的出勤人次月底统计,且部门经理一周出勤一次,一个月共四次。当月的最后一天统计完部门成员的出勤人次之后再加上部门经理的四次出勤,得到部门的总出勤人次。计算机设备在这个月的每天向区块链系统发送携带部门成员的出勤人次的数据存储请求。
假设这个月的总天数是30天。这种情况下,区块链系统在每次接收到数据存储请求时,可以判断当前是否是当月的最后一天。如果当前不是当月的最后一天,则区块链系统根据第一预设计算规则进行数据计算和存储,具体地,区块链系统将该数据存储请求携带的出勤人次与第二存储空间存储的数据相加,得到出勤统计人次,并将得到的出勤统计人次更新存储至第二存储空间。也即,在这个月的前29天,区块链系统一直都是根据第一预设计算规则进行数据计算和存储。而如果当前是当月的最后一天,则区块链系统根据第二预设计算规则进行数据计算和存储,具体地,区块链系统将该数据存储请求携带的出勤人次与第二存储空间存储的数据相加,得到出勤统计人次,再将该出勤统计人次与预设的出勤人次(即4)相加,得到出勤总人次,并将得到的出勤总人次更新存储至第二存储空间。如此,可以实现分摊计算后的终结计算。
作为另一种示例,区块链系统可以根据该数据存储请求的发送次数获取预设计算规则。比如,若该数据存储请求的发送次数不是预设的次数,则可以根据第三预设计算规则对该原始数据和第二存储空间存储的数据进行计算,得到统计数据,将该统计数据更新存储至第二存储空间。若该数据存储请求的发送次数是预设的次数,则可以根据第四预设计算规则对该原始数据和第二存储空间存储的数据进行计算,得到统计数据,将该统计数据更新存储至第二存储空间。第三预设计算规则与第四预设计算规则不同。
假设需要计算10个数据的平均值,且采用四舍五入的方式去除小数位且保留整数位。计算机设备每次向区块链系统发送的数据存储请求中携带这10个数据中的1个数据。由于如果每次分摊计算时都进行平均值计算,很可能会导致精度损失,因此,可以通过先计算10个数据之和,再进行除法运算的方式,来避免每次分摊计算时产生的精度损失,从而提高计算精度。
这种情况下,区块链系统在每次接收到数据存储请求时,可以判断当前是否是区块链系统第10次接收到数据存储请求,也即数据存储请求当前的发送次数是否为10。如果当前不是第10次接收到数据存储请求,则区块链系统根据第三预设计算规则进行数据计算和存储,具体地,区块链系统将数据存储请求携带的数据与第二存储空间存储的数据相加,得到第一数据,并将得到的第一数据更新存储至第二存储空间。也即,在区块链系统前9次接收到数据存储请求时,一直都是根据第三预设计算规则进行数据计算和存储。而如果当前是区块链系统第10次接收到数据存储请求,则区块链系统根据第四预设计算规则进行数据计算和存储,具体地,区块链系统将数据存储请求携带的数据与第二存储空间存储的数据相加,得到第一数据,再将第一数据除以预设的次数(即10),得到第二数据,并将得到的第二数据更新存储至第二存储空间。
作为又一种示例,区块链系统可以根据该数据存储请求携带的参数获取预设计算规则。比如,若该数据存储请求未携带预设参数,则可以根据第五预设计算规则对该原始数据和第二存储空间存储的数据进行计算,得到统计数据,将该统计数据更新存储至第二存储空间。若该数据存储请求携带有预设参数,则可以根据第六预设计算规则对该原始数据和第二存储空间存储的数据进行计算,得到统计数据,将该统计数据更新存储至第二存储空间。第五预设计算规则与第六预设计算规则不同。
假设需要统计部门内一个月的总出勤人次。部门成员的出勤人次每天统计。部门经理的出勤人次月底统计,且部门经理一周出勤一次,一个月共四次。当月的最后一天统计完部门成员的出勤人次之后再加上部门经理的四次出勤,得到部门的总出勤人次。计算机设备在这个月的每天向区块链系统发送携带部门成员的出勤人次的数据存储请求,且仅在这个月的最后一天在向区块链系统发送的数据存储请求中同时携带部门成员的出勤人次和预设参数,此预设参数为部门经理的出勤人次,即为4。
假设这个月的总天数是30天。这种情况下,计算机设备在这个月的前29天中的每天向区块链系统发送的数据存储请求中携带部门成员的出勤人次,在这个月的最后一天向区块链系统发送的数据存储请求中携带部门成员的出勤人次和预设参数。区块链系统在每次接收到数据存储请求时,可以判断数据存储请求是否携带预设参数。如果数据存储请求未携带预设参数,则区块链系统根据第五预设计算规则进行数据计算和存储,具体地,区块链系统将数据存储请求携带的出勤人次与第二存储空间存储的数据相加,得到出勤统计人次,并将得到的出勤统计人次更新存储至第二存储空间。也即,在这个月的前29天,区块链系统一直都是根据第五预设计算规则进行数据计算和存储。而在这个月的最后一天,计算机设备发送的数据存储请求中携带预设参数,则区块链系统接收到该数据存储请求并确定该数据存储请求中携带预设参数后,根据第六预设计算规则进行数据计算和存储,具体地,区块链系统将该数据存储请求携带的出勤人次与第二存储空间存储的数据相加,得到出勤统计人次,再将该出勤统计人次与预设参数(即4)相加,得到出勤总人次,并将得到的出勤总人次更新存储至第二存储空间。如此,可以实现分摊计算后的终结计算。
值得注意的是,若是在区块链系统存储原始数据的过程中,出现原始数据缺失或原始数据有误的情况,区块链系统还可以对该智能合约对应的第一存储空间中存储的原始数据进行修改,和/或,对该智能合约对应的第二存储空间中存储的统计数据进行修改,以达到补救调整的目的。
一种可能的方式中,计算机设备可以重新生成多个原始数据,该多个原始数据是不存在数据缺失或数据有误的情况的原始数据,然后计算机设备可以根据该多个原始数据获取统计数据,并将该统计数据直接存储至区块链系统中的该智能合约对应的第二存储空间。这种情况下,区块链系统无需再进行数据计算,仅需重新存储正确的统计数据至第二存储空间即可,从而可以减轻区块链系统的计算压力。
另一种可能的方式中,计算机设备可以重新生成多个原始数据,该多个原始数据是不存在数据缺失或数据有误的情况的原始数据,然后计算机设备可以将该多个原始数据发送给区块链系统。区块链系统接收到该多个原始数据之后,将该多个原始数据更新存储至该智能合约对应的第一存储空间,并根据该多个原始数据获取统计数据,将该统计数据存储至该智能合约对应的第二存储空间。这种情况下,区块链系统仅需对存储的统计数据中存在原始数据缺失或原始数据有误的情况的统计数据进行重新计算,而对其他正确的统计数据无需进行重新计算,从而可以在一定程度上减轻区块链系统的计算压力。
在本申请实施例中,区块链系统每存储一个原始数据到智能合约内部,就会对这个原始数据进行计算得到统计数据,并将该统计数据也存储到该智能合约内部。如此,可以实现在需要在合约层面对大量数据进行计算的场景下,将计算分摊到每次数据存储时进行,从而可以避免大量数据最终同时计算导致性能降低甚至导致out of gas异常。并且,在此情况下,由于数据计算在合约层面进行,所以可以保证计算过程的公开透明。
图5是本申请实施例提供的一种数据存储装置的结构示意图,该装置可以应用于区块链系统,该区块链系统可以为上文图1-图2实施例所述的区块链系统100,也可以为上文图3实施例所述的区块链系统302。参见图5,该装置包括:第一存储模块501和第二存储模块502。
第一存储模块501,用于每接收到一条数据存储请求,将数据存储请求携带的原始数据存储至智能合约对应的第一存储空间;
第二存储模块502,用于在将原始数据存储至第一存储空间后,根据原始数据获取统计数据,将统计数据存储至智能合约对应的第二存储空间。
可选地,第一存储模块501用于:
根据原始数据调用智能合约中的存储方法,以将原始数据存储至第一存储空间。
可选地,第二存储模块502用于:
在将原始数据存储至第一存储空间后,根据原始数据调用智能合约中的统计方法,以根据原始数据获取统计数据,并将统计数据存储至智能合约对应的第二存储空间。
可选地,第二存储模块502用于:
根据预设计算规则,对原始数据和第二存储空间存储的数据进行计算,得到统计数据;
将统计数据更新存储至第二存储空间。
可选地,该装置还包括:
获取模块,用于根据数据存储请求的属性获取预设计算规则,数据存储请求的属性包括数据存储请求的发送次数、发送时间、数据存储请求携带的参数中的一个或多个。
在本申请实施例中,区块链系统每存储一个原始数据到智能合约内部,就会对这个原始数据进行计算得到统计数据,并将该统计数据也存储到该智能合约内部。如此,可以实现在需要在合约层面对大量数据进行计算的场景下,将计算分摊到每次数据存储时进行,从而可以避免大量数据最终同时计算导致性能降低甚至导致out of gas异常。并且,在此情况下,由于数据计算在合约层面进行,所以可以保证计算过程的公开透明。
需要说明的是:上述实施例提供的数据存储装置在数据存储时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
上述实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请实施例的保护范围。
上述实施例提供的数据存储装置与数据存储方法实施例属于同一构思,上述实施例中单元、模块的具体工作过程及带来的技术效果,可参见方法实施例部分,此处不再赘述。
图6为本申请实施例提供的一种计算机设备的结构示意图。上文图1-图2实施例所述的区块链系统100,或者上文图3实施例所述的区块链系统302,可以通过计算机设备6实现。如图6所示,计算机设备6包括:处理器60、存储器61以及存储在存储器61中并可在处理器60上运行的计算机程序62,处理器60执行计算机程序62时实现上述实施例中的数据存储方法中的步骤。
计算机设备6可以是通用计算机设备或专用计算机设备。在具体实现中,计算机设备6可以是由多台服务器组成的服务器集群。本领域技术人员可以理解,图6仅仅是计算机设备6的举例,并不构成对计算机设备6的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,比如还可以包括输入输出设备、网络接入设备等。
处理器60可以是中央处理单元(Central Processing Unit,CPU),处理器60还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者也可以是任何常规的处理器。
存储器61在一些实施例中可以是计算机设备6的内部存储单元,比如计算机设备6的硬盘或内存。存储器61在另一些实施例中也可以是计算机设备6的外部存储设备,比如计算机设备6上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器61还可以既包括计算机设备6的内部存储单元也包括外部存储设备。存储器61用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,比如计算机程序的程序代码等。存储器61还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例还提供了一种计算机设备,该计算机设备包括:至少一个处理器、存储器以及存储在该存储器中并可在该至少一个处理器上运行的计算机程序,该处理器执行该计算机程序时实现上述任意各个方法实施例中的步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当其在计算机上运行时,使得计算机执行上述各个方法实施例中的步骤。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述方法实施例中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,该计算机程序包括计算机程序代码,该计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。该计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、CD-ROM(Compact Disc Read-Only Memory,只读光盘)、磁带、软盘和光数据存储设备等。本申请提到的计算机可读存储介质可以为非易失性存储介质,换句话说,可以是非瞬时性存储介质。
应当理解的是,实现上述实施例的全部或部分步骤可以通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。该计算机指令可以存储在上述计算机可读存储介质中。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/计算机设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/计算机设备实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种数据存储方法,其特征在于,应用于区块链系统,所述方法包括:
每接收到一条数据存储请求,将所述数据存储请求携带的原始数据存储至智能合约对应的第一存储空间;
在将所述原始数据存储至所述第一存储空间后,根据所述原始数据获取统计数据,将所述统计数据存储至所述智能合约对应的第二存储空间。
2.如权利要求1所述的方法,其特征在于,所述将所述数据存储请求携带的原始数据存储至智能合约对应的第一存储空间,包括:
根据所述原始数据调用所述智能合约中的存储方法,以将所述原始数据存储至所述第一存储空间。
3.如权利要求2所述的方法,其特征在于,所述在将所述原始数据存储至所述第一存储空间后,根据所述原始数据获取统计数据,将所述统计数据存储至所述智能合约对应的第二存储空间,包括:
在将所述原始数据存储至所述第一存储空间后,根据所述原始数据调用所述智能合约中的统计方法,以根据所述原始数据获取统计数据,并将所述统计数据存储至所述智能合约对应的第二存储空间。
4.如权利要求1-3任一所述的方法,其特征在于,所述根据所述原始数据获取统计数据,将所述统计数据存储至所述智能合约对应的第二存储空间,包括:
根据预设计算规则,对所述原始数据和所述第二存储空间存储的数据进行计算,得到所述统计数据;
将所述统计数据更新存储至所述第二存储空间。
5.如权利要求4所述的方法,其特征在于,所述根据预设计算规则,对所述原始数据和所述第二存储空间存储的数据进行计算,得到所述统计数据之前,还包括:
根据所述数据存储请求的属性获取所述预设计算规则,所述数据存储请求的属性包括所述数据存储请求的发送次数、发送时间、所述数据存储请求携带的参数中的一个或多个。
6.一种数据存储装置,其特征在于,应用于区块链系统,所述装置包括:
第一存储模块,用于每接收到一条数据存储请求,将所述数据存储请求携带的原始数据存储至智能合约对应的第一存储空间;
第二存储模块,用于在将所述原始数据存储至所述第一存储空间后,根据所述原始数据获取统计数据,将所述统计数据存储至所述智能合约对应的第二存储空间。
7.如权利要求6所述的装置,其特征在于,所述第二存储模块用于:
根据预设计算规则,对所述原始数据和所述第二存储空间存储的数据进行计算,得到所述统计数据;
将所述统计数据更新存储至所述第二存储空间。
8.如权利要求7所述的装置,其特征在于,所述装置还包括:
获取模块,用于根据所述数据存储请求的属性获取所述预设计算规则,所述数据存储请求的属性包括所述数据存储请求的发送次数、发送时间、所述数据存储请求携带的参数中的一个或多个。
9.一种计算机设备,其特征在于,所述计算机设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至5任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011501584.2A CN112507028B (zh) | 2020-12-18 | 2020-12-18 | 数据存储方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011501584.2A CN112507028B (zh) | 2020-12-18 | 2020-12-18 | 数据存储方法、装置、设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112507028A true CN112507028A (zh) | 2021-03-16 |
CN112507028B CN112507028B (zh) | 2023-02-21 |
Family
ID=74922434
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011501584.2A Active CN112507028B (zh) | 2020-12-18 | 2020-12-18 | 数据存储方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112507028B (zh) |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108566420A (zh) * | 2018-03-29 | 2018-09-21 | 上海点融信息科技有限责任公司 | 用于区块链的数据处理方法、设备及计算机可读存储介质 |
CN108647966A (zh) * | 2018-05-09 | 2018-10-12 | 深圳市融讯科技有限公司 | 一种基于区块链的数据交互方法及装置 |
CN108665253A (zh) * | 2018-05-18 | 2018-10-16 | 百度在线网络技术(北京)有限公司 | 一种区块链网络的数据处理方法、装置、设备及存储介质 |
CN109272335A (zh) * | 2018-09-17 | 2019-01-25 | 深圳市元征科技股份有限公司 | 一种智能合约管理方法、系统、设备及计算机存储介质 |
CN109684861A (zh) * | 2019-01-11 | 2019-04-26 | 阳光电源股份有限公司 | 基于区块链的能源数据存储方法、系统及数据审核中心 |
CN110275798A (zh) * | 2019-05-08 | 2019-09-24 | 深圳壹账通智能科技有限公司 | 区块链数据处理方法、装置、服务器及存储介质 |
CN110290168A (zh) * | 2019-05-08 | 2019-09-27 | 深圳壹账通智能科技有限公司 | 数据发送方法、装置、服务器及存储介质 |
CN110300170A (zh) * | 2019-06-28 | 2019-10-01 | 杭州复杂美科技有限公司 | 区块链分布式存储下载方法、设备和存储介质 |
US20190370223A1 (en) * | 2018-05-31 | 2019-12-05 | Alibaba Group Holding Limited | Blockchain-based data migration method and apparatus |
US20200117550A1 (en) * | 2018-10-12 | 2020-04-16 | EMC IP Holding Company LLC | Method, device and computer program product for backing up data |
CN111159307A (zh) * | 2020-04-02 | 2020-05-15 | 支付宝(杭州)信息技术有限公司 | 跨链数据订阅方法及装置 |
US20200286090A1 (en) * | 2019-07-31 | 2020-09-10 | Alibaba Group Holding Limited | Blockchain-based reimbursement splitting |
WO2020177481A1 (zh) * | 2019-03-07 | 2020-09-10 | 阿里巴巴集团控股有限公司 | 一种基于区块链的流量统计方法、装置和设备 |
CN111709659A (zh) * | 2020-06-23 | 2020-09-25 | 中国平安财产保险股份有限公司 | 外勤业务员的智能调度方法、装置、设备及存储介质 |
WO2020224253A1 (zh) * | 2019-05-07 | 2020-11-12 | 深圳壹账通智能科技有限公司 | 区块链信息推送方法、装置、计算机设备和存储介质 |
-
2020
- 2020-12-18 CN CN202011501584.2A patent/CN112507028B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108566420A (zh) * | 2018-03-29 | 2018-09-21 | 上海点融信息科技有限责任公司 | 用于区块链的数据处理方法、设备及计算机可读存储介质 |
CN108647966A (zh) * | 2018-05-09 | 2018-10-12 | 深圳市融讯科技有限公司 | 一种基于区块链的数据交互方法及装置 |
CN108665253A (zh) * | 2018-05-18 | 2018-10-16 | 百度在线网络技术(北京)有限公司 | 一种区块链网络的数据处理方法、装置、设备及存储介质 |
US20190370223A1 (en) * | 2018-05-31 | 2019-12-05 | Alibaba Group Holding Limited | Blockchain-based data migration method and apparatus |
CN109272335A (zh) * | 2018-09-17 | 2019-01-25 | 深圳市元征科技股份有限公司 | 一种智能合约管理方法、系统、设备及计算机存储介质 |
US20200117550A1 (en) * | 2018-10-12 | 2020-04-16 | EMC IP Holding Company LLC | Method, device and computer program product for backing up data |
CN109684861A (zh) * | 2019-01-11 | 2019-04-26 | 阳光电源股份有限公司 | 基于区块链的能源数据存储方法、系统及数据审核中心 |
WO2020177481A1 (zh) * | 2019-03-07 | 2020-09-10 | 阿里巴巴集团控股有限公司 | 一种基于区块链的流量统计方法、装置和设备 |
WO2020224253A1 (zh) * | 2019-05-07 | 2020-11-12 | 深圳壹账通智能科技有限公司 | 区块链信息推送方法、装置、计算机设备和存储介质 |
CN110290168A (zh) * | 2019-05-08 | 2019-09-27 | 深圳壹账通智能科技有限公司 | 数据发送方法、装置、服务器及存储介质 |
CN110275798A (zh) * | 2019-05-08 | 2019-09-24 | 深圳壹账通智能科技有限公司 | 区块链数据处理方法、装置、服务器及存储介质 |
CN110300170A (zh) * | 2019-06-28 | 2019-10-01 | 杭州复杂美科技有限公司 | 区块链分布式存储下载方法、设备和存储介质 |
US20200286090A1 (en) * | 2019-07-31 | 2020-09-10 | Alibaba Group Holding Limited | Blockchain-based reimbursement splitting |
CN111159307A (zh) * | 2020-04-02 | 2020-05-15 | 支付宝(杭州)信息技术有限公司 | 跨链数据订阅方法及装置 |
CN111709659A (zh) * | 2020-06-23 | 2020-09-25 | 中国平安财产保险股份有限公司 | 外勤业务员的智能调度方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112507028B (zh) | 2023-02-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107832062B (zh) | 一种程序更新方法及终端设备 | |
CN112286939B (zh) | 块链式账本中全局状态的哈希的生成方法、装置及设备 | |
CN109992285B (zh) | 区块链代码块独立升级方法、装置及电子设备 | |
CN110334153B (zh) | 块链式账本中的授权方法、系统、装置及设备 | |
CN110135993B (zh) | Utxo模型适配智能合约账户模型的方法、设备及存储介质 | |
CN111522784B (zh) | 一种非结构化数据文件的元数据同步方法、装置及设备 | |
CN110474775B (zh) | 一种块链式账本中的用户创建方法、装置及设备 | |
CN111046069B (zh) | 一种块链式账本中的聚合计算方法、装置及设备 | |
US20200364356A1 (en) | Blockchain authorization | |
EP3812917A1 (en) | Data structure reading method and apparatus, data structure updating method and apparatus, and electronic device | |
TW202040477A (zh) | 個人資產變更記錄的儲存方法、系統、裝置及設備 | |
CN112202554A (zh) | 基于信息的属性生成密钥的信息处理方法、装置及设备 | |
CN111444216A (zh) | 一种基于中心化块链式账本的数据块删除方法 | |
CN112598529B (zh) | 数据处理方法及装置、计算机可读存储介质、电子设备 | |
CN115879164A (zh) | 数据校验方法、装置、设备及存储介质 | |
CN112507028B (zh) | 数据存储方法、装置、设备和存储介质 | |
CN110458541B (zh) | 基于区块链的对象置换方法及装置 | |
CN111324645B (zh) | 区块链的数据处理方法及装置 | |
CN111444194B (zh) | 一种块链式账本中索引的清除方法、装置及设备 | |
CN114513469A (zh) | 分布式系统的流量整形方法、装置和存储介质 | |
CN114553859A (zh) | 一种bmc配置管理方法、装置、电子设备及存储介质 | |
CN114297318A (zh) | 数据处理方法及装置 | |
CN110636042B (zh) | 一种服务端已验证块高的更新方法、装置及设备 | |
CN114398376A (zh) | 一种数据处理方法、设备及可读存储介质 | |
CN113434603A (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 |