首页 / 专利库 / 银行与财务事项 / 智能合约 / 一种基于Java智能合约的数据组织和存储方法

一种基于Java智能合约的数据组织和存储方法

阅读:1029发布:2020-05-23

专利汇可以提供一种基于Java智能合约的数据组织和存储方法专利检索,专利查询,专利分析的服务。并且本 发明 公开一种基于Java 智能合约 的数据组织和存储方法,该方法基于一种新的数据组织结构列簇表来实现数据组织和存储方法,通过将入复杂的映射、集合嵌套结构转换为列簇表,避免了序列化反序列化过慢的问题,提升了合约执行速度,增强了数据存取的 原子 性,有利于 可视化 。,下面是一种基于Java智能合约的数据组织和存储方法专利的具体信息内容。

1.一种基于Java智能合约的数据组织和存储方法,其特征在于,该方法包括如下步骤:
S1:将嵌套的集合或映射数据解耦为列簇表形式,所述的列簇表中,每一列均为对象的每个元字段,具有关联或相似关系的列集成为一个列簇,每一行的数据对应一整个对象,每行的每个单元格为所述的一整个对象的每个元字段的属性值。
S2:擦除对象的类型信息,将对象的每个元字段的属性值用字符串替代,并对每个元字段的属性值、行、列簇、列分别做安全检查,判断行名、列簇名、列名是否为为空指针、空字符串,若是,抛出异常,拒绝存储;若不是,则进入下一步。
S3:判断行名、列簇名、列名含有@符号,若是,抛出异常,拒绝存储;若不是,则进入下一步。
S4:判断该操作,如果为插入新数据或修改数据,则继续检查元数据是否为空,若为空,则抛出异常,拒绝存储;若不为空,则进入下一步;如果是删除数据,则直接进入下一步。
S5:将S4得到的数据的行名、列簇名、列名拼接成字符串,拼接规则为:行名@列簇名@列名,将拼接好的字符串作为Key,元数据作为Value得到键值对
S6:调用平台接口存储该键值对链底层的缓存中,如果是删除数据,Value为空;在Java智能合约最终执行完成之后,将所有缓存的数据都写入区块链账本中,保证数据的原子性。
2.根据权利要求1所述的基于Java智能合约的数据组织和存储方法,其特征在于,当查询数据时,也需要先拼接行名、列簇名、列名,得到想要查询的键值对的Key,拼接规则为:行名@列簇名@列名。
3.根据权利要求1所述的基于Java智能合约的数据组织和存储方法,其特征在于,所述的S6中,读取数据时也先尝试从缓存中获取,如果查不到则直接从账本进行查询,若账本仍没有,则返回空;所述的缓存与账本接口使用同样的语言实现,重用缓存,使得对多种智能合约执行引擎可以执行同一套缓存机制。

说明书全文

一种基于Java智能合约的数据组织和存储方法

技术领域

[0001] 本发明涉及链数据的存储领域,具体涉及一种基于Java智能合约的数据组织和存储方法。

背景技术

[0002] 区块链是一种新型去中心化的分布式存储技术,能安全地存储数字货币交易或其他需要存证的信息数据,且能保证信息的不可伪造,防止被篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,公共账本位于存储区块上任何节点可见。
[0003] 智能合约这个术语是跨领域法律学者尼克·萨博提出来的,他对智能合约的定义是“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议”,换句话说,智能合约就是一个在计算机系统上,当一定条件被满足后,可以被自动执行的合约,它也是区块链的系统参与者,对接收到的信息进行处理,可以进行计算或处理等操作,也可以向外发送信息和价值。通常人们会使用更高级的语言来编写智能合约,再由区块链平台编译成字节码解释执行。目前最常见的用于智能合约的语言包括Solidty、Java等,本数据组织方式是针对Java智能合约的应用场景而发明。
[0004] 目前Java智能合约的数据结构不够丰富,主要仅有List和Map两种接口,这使得Java智能合约在应对大量业务场景时无法有效存储数据,经常需要使用多重的嵌套结构去存储,这一方式既增加智能合约的使用难度,不利于业务场景的拓展,又降低了数据存储的性能。
[0005] 再加上,区块链技术在底层的存储开发都会为底层数据库建立一套缓存机制,如果使用原生的Java集合和映射,由于Java集合、映射是内存中工作,所以将数据全部加载到内存中是不可行的,而一般开发者使用懒加载的方式去改进又会多引入一层完善的缓存机制,在许多场景下这是不必要的。

发明内容

[0006] 针对现有技术的不足,本发明提出一种基于Java智能合约的数据组织和存储方法,既保证了与区块链账本直接交互,避免了缓存一致性带来的许多隐患和存储的原子性问题,解决了序列化反序列化造成的性能瓶颈,并且利于实际场景的后续可视化操作。
[0007] 本发明的目的通过如下的技术方案来实现:
[0008] 一种基于Java智能合约的数据组织和存储方法,其特征在于,该方法包括如下步骤:
[0009] S1:将嵌套的集合或映射数据解耦为列簇表形式,所述的列簇表中,每一列均为对象的每个元字段,具有关联或相似关系的列集成为一个列簇,每一行的数据对应一整个对象,每行的每个单元格为所述的一整个对象的每个元字段的属性值;
[0010] S2:擦除对象的类型信息,将对象的每个元字段的属性值用字符串替代,并对每个元字段的属性值、行、列簇、列分别做安全检查,判断行名、列簇名、列名是否为为空指针、空字符串,若是,抛出异常,拒绝存储;若不是,则进入下一步;
[0011] S3:判断行名、列簇名、列名含有@符号,若是,抛出异常,拒绝存储;若不是,则进入下一步;
[0012] S4:判断该操作,如果为插入新数据或修改数据,则继续检查元数据是否为空,若为空,则抛出异常,拒绝存储;若不为空,则进入下一步;如果是删除数据,则直接进入下一步;
[0013] S5:将S4得到的数据的行名、列簇名、列名拼接成字符串,拼接规则为:行名@列簇名@列名,将拼接好的字符串作为Key,元数据作为Value得到键值对
[0014] S6:调用平台接口存储该键值对到区块链底层的缓存中,如果是删除数据,Value为空;在Java智能合约最终执行完成之后,将所有缓存的数据都写入区块链账本中,保证数据的原子性。
[0015] 进一步地,当查询数据时,也需要先拼接行名、列簇名、列名,得到想要查询的键值对的Key,拼接规则为:行名@列簇名@列名。
[0016] 进一步地,所述的S6中,读取数据时也先尝试从缓存中获取,如果查不到则直接从账本进行查询,若账本仍没有,则返回空;所述的缓存与账本接口使用同样的语言实现,重用缓存,使得对多种智能合约执行引擎可以执行同一套缓存机制。
[0017] 本发明的有益效果如下:
[0018] 本发明基于联盟链背景下的区块链Java智能合约引擎,引入了列簇表的思想,既保证解决了复杂集合、映射嵌套的问题,也解决了账本数据存储原子性问题,且绕过序列化提高了智能合约的执行效率,并且解决了使用复杂嵌套数据结构存储复杂对象时难以可视化的问题。附图说明
[0019] 图1为本发明的基于Java智能合约的数据组织和存储方法的流程图

具体实施方式

[0020] 下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0021] 如图1所示,本发明的基于Java智能合约的数据组织和存储方法包括如下步骤:
[0022] S1:将嵌套的集合或映射数据解耦为列簇表形式,所述的列簇表中,每一列均为对象的每个元字段,具有关联或相似关系的列集成为一个列簇,每一行的数据对应一整个对象,每行的每个单元格为所述的一整个对象的每个元字段的属性值;
[0023] S2:擦除对象的类型信息,将对象的每个元字段的属性值用字符串替代,并对每个元字段的属性值、行、列簇、列分别做安全检查,判断行名、列簇名、列名是否为为空指针、空字符串,若是,抛出异常,拒绝存储;若不是,则进入下一步;
[0024] S3:判断行名、列簇名、列名含有@符号,若是,抛出异常,拒绝存储;若不是,则进入下一步;
[0025] S4:判断该操作,如果为插入新数据或修改数据,则继续检查元数据是否为空,若为空,则抛出异常,拒绝存储;若不为空,则进入下一步;如果是删除数据,则直接进入下一步;
[0026] S5:将S4得到的数据的行名、列簇名、列名拼接成字符串,拼接规则为:行名@列簇名@列名,将拼接好的字符串作为Key,元数据作为Value得到键值对
[0027] S6:调用平台接口存储该键值对到区块链底层的缓存中,如果是删除数据,Value为空;在Java智能合约最终执行完成之后,将所有缓存的数据都写入区块链账本中,保证数据的原子性。
[0028] 本发明通过列簇表的方式进行数据组织和存储具有如下优点:
[0029] (1)避免了复杂的嵌套及类声明,且列簇表每个列簇对应的列数不固定,可以根据需要自由改变表结构,增加列簇或减少列簇,增加列或者减少列,可以轻松应对业务场景的变化,更符合实际场景的需求。
[0030] (2)避免了序列化产生的开销。如果使用传统的映射嵌套,在实际数据存入账本时,会有大量的序列化开销(大部分情况下区块链的底层数据库使用的都是LevelDB等KV型数据库),而在序列化过程中会产生许多不可控的隐患,如序列化的引号问题和空属性问题,经过序列化后用户无法判断“null”表示的是实际为空还是存入的值为null,另外,序列化使用的库本身可能存在一些漏洞容易被攻击,这是应用方无法避免的,但本发明的方法由于避免了序列化,将嵌套映射结构解耦出来成为一个个字符串,完美避免了这个问题,在突破序列化性能瓶颈的同时也加强了数据安全性。
[0031] (3)利于可视化。对于嵌套映射Map和嵌套集合List的可视化表一直是个难题,在可视化过程中需要考虑嵌套数据的结构,且当数据库的键值都是对象时如何制作一张交互性好、阅读性强的可视化表就是一个非常麻烦的问题。但本发明的列簇表本身就具有行、列簇、列的概念,从原生度就考虑了可视化的问题,这对整个系统应用和推广具有非常大的优势。
[0032] (4)在使用集合和映射时,由于List和Map的数据都要加载到内存中,在区块链这种大数据的场景下(且数据会随着时间递增量级)是完全不可行的,且无法保证数据和账本交互的原子性,因此缓存的存在是必须的,但在哪一层设置缓存是个难题,HyperList和HyperMap在Java的数据结构层设计了缓存,这使得其他语言的智能合约由于无法直接与Java智能合约通信,需要另外设计缓存。而本发明将缓存建立在底层账本接口层,由于无序列化的影响,其更新速度快。这种设计既利用了缓存运行快的优势,又使得其他类型的智能合约都可以使用这一缓存机制,提升了拓展性。
[0033] 本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈