CN110955658A - 一种基于Java智能合约的数据组织和存储方法 - Google Patents
一种基于Java智能合约的数据组织和存储方法 Download PDFInfo
- Publication number
- CN110955658A CN110955658A CN201911134271.5A CN201911134271A CN110955658A CN 110955658 A CN110955658 A CN 110955658A CN 201911134271 A CN201911134271 A CN 201911134271A CN 110955658 A CN110955658 A CN 110955658A
- Authority
- CN
- China
- Prior art keywords
- data
- column
- name
- key
- row
- 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
- 238000000034 method Methods 0.000 title claims abstract description 17
- 230000008520 organization Effects 0.000 title claims abstract description 14
- 238000013507 mapping Methods 0.000 claims abstract description 7
- 230000007246 mechanism Effects 0.000 claims description 5
- 238000012217 deletion Methods 0.000 claims description 3
- 230000037430 deletion Effects 0.000 claims description 3
- 238000012800 visualization Methods 0.000 abstract description 7
- 230000009286 beneficial effect Effects 0.000 abstract description 3
- 230000008901 benefit Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000012790 confirmation Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000014616 translation Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- 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
- G06F16/24552—Database cache management
-
- 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/26—Visual data mining; Browsing structured data
-
- 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
- G06Q50/00—Information and communication technology [ICT] specially adapted for implementation of business processes of specific business sectors, e.g. utilities or tourism
- G06Q50/10—Services
- G06Q50/18—Legal services
- G06Q50/188—Electronic negotiation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Data Mining & Analysis (AREA)
- Tourism & Hospitality (AREA)
- Strategic Management (AREA)
- Primary Health Care (AREA)
- Marketing (AREA)
- General Business, Economics & Management (AREA)
- Human Resources & Organizations (AREA)
- General Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Economics (AREA)
- Health & Medical Sciences (AREA)
- Technology Law (AREA)
- Computational Linguistics (AREA)
- Devices For Executing Special Programs (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种基于Java智能合约的数据组织和存储方法,该方法基于一种新的数据组织结构列簇表来实现数据组织和存储方法,通过将入复杂的映射、集合嵌套结构转换为列簇表,避免了序列化反序列化过慢的问题,提升了合约执行速度,增强了数据存取的原子性,有利于可视化。
Description
技术领域
本发明涉及区块链数据的存储领域,具体涉及一种基于Java智能合约的数据组织和存储方法。
背景技术
区块链是一种新型去中心化的分布式存储技术,能安全地存储数字货币交易或其他需要存证的信息数据,且能保证信息的不可伪造,防止被篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,公共账本位于存储区块上任何节点可见。
智能合约这个术语是跨领域法律学者尼克·萨博提出来的,他对智能合约的定义是“一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议”,换句话说,智能合约就是一个在计算机系统上,当一定条件被满足后,可以被自动执行的合约,它也是区块链的系统参与者,对接收到的信息进行处理,可以进行计算或处理等操作,也可以向外发送信息和价值。通常人们会使用更高级的语言来编写智能合约,再由区块链平台编译成字节码解释执行。目前最常见的用于智能合约的语言包括Solidty、Java等,本数据组织方式是针对Java智能合约的应用场景而发明。
目前Java智能合约的数据结构不够丰富,主要仅有List和Map两种接口,这使得Java智能合约在应对大量业务场景时无法有效存储数据,经常需要使用多重的嵌套结构去存储,这一方式既增加智能合约的使用难度,不利于业务场景的拓展,又降低了数据存储的性能。
再加上,区块链技术在底层的存储开发都会为底层数据库建立一套缓存机制,如果使用原生的Java集合和映射,由于Java集合、映射是内存中工作,所以将数据全部加载到内存中是不可行的,而一般开发者使用懒加载的方式去改进又会多引入一层完善的缓存机制,在许多场景下这是不必要的。
发明内容
针对现有技术的不足,本发明提出一种基于Java智能合约的数据组织和存储方法,既保证了与区块链账本直接交互,避免了缓存一致性带来的许多隐患和存储的原子性问题,解决了序列化反序列化造成的性能瓶颈,并且利于实际场景的后续可视化操作。
本发明的目的通过如下的技术方案来实现:
一种基于Java智能合约的数据组织和存储方法,其特征在于,该方法包括如下步骤:
S1:将嵌套的集合或映射数据解耦为列簇表形式,所述的列簇表中,每一列均为对象的每个元字段,具有关联或相似关系的列集成为一个列簇,每一行的数据对应一整个对象,每行的每个单元格为所述的一整个对象的每个元字段的属性值;
S2:擦除对象的类型信息,将对象的每个元字段的属性值用字符串替代,并对每个元字段的属性值、行、列簇、列分别做安全检查,判断行名、列簇名、列名是否为为空指针、空字符串,若是,抛出异常,拒绝存储;若不是,则进入下一步;
S3:判断行名、列簇名、列名含有@符号,若是,抛出异常,拒绝存储;若不是,则进入下一步;
S4:判断该操作,如果为插入新数据或修改数据,则继续检查元数据是否为空,若为空,则抛出异常,拒绝存储;若不为空,则进入下一步;如果是删除数据,则直接进入下一步;
S5:将S4得到的数据的行名、列簇名、列名拼接成字符串,拼接规则为:行名@列簇名@列名,将拼接好的字符串作为Key,元数据作为Value得到键值对<Key,Value>;
S6:调用平台接口存储该键值对<Key,Value>到区块链底层的缓存中,如果是删除数据,Value为空;在Java智能合约最终执行完成之后,将所有缓存的数据都写入区块链账本中,保证数据的原子性。
进一步地,当查询数据时,也需要先拼接行名、列簇名、列名,得到想要查询的键值对的Key,拼接规则为:行名@列簇名@列名。
进一步地,所述的S6中,读取数据时也先尝试从缓存中获取,如果查不到则直接从账本进行查询,若账本仍没有,则返回空;所述的缓存与账本接口使用同样的语言实现,重用缓存,使得对多种智能合约执行引擎可以执行同一套缓存机制。
本发明的有益效果如下:
本发明基于联盟链背景下的区块链Java智能合约引擎,引入了列簇表的思想,既保证解决了复杂集合、映射嵌套的问题,也解决了账本数据存储原子性问题,且绕过序列化提高了智能合约的执行效率,并且解决了使用复杂嵌套数据结构存储复杂对象时难以可视化的问题。
附图说明
图1为本发明的基于Java智能合约的数据组织和存储方法的流程图。
具体实施方式
下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明的基于Java智能合约的数据组织和存储方法包括如下步骤:
S1:将嵌套的集合或映射数据解耦为列簇表形式,所述的列簇表中,每一列均为对象的每个元字段,具有关联或相似关系的列集成为一个列簇,每一行的数据对应一整个对象,每行的每个单元格为所述的一整个对象的每个元字段的属性值;
S2:擦除对象的类型信息,将对象的每个元字段的属性值用字符串替代,并对每个元字段的属性值、行、列簇、列分别做安全检查,判断行名、列簇名、列名是否为为空指针、空字符串,若是,抛出异常,拒绝存储;若不是,则进入下一步;
S3:判断行名、列簇名、列名含有@符号,若是,抛出异常,拒绝存储;若不是,则进入下一步;
S4:判断该操作,如果为插入新数据或修改数据,则继续检查元数据是否为空,若为空,则抛出异常,拒绝存储;若不为空,则进入下一步;如果是删除数据,则直接进入下一步;
S5:将S4得到的数据的行名、列簇名、列名拼接成字符串,拼接规则为:行名@列簇名@列名,将拼接好的字符串作为Key,元数据作为Value得到键值对<Key,Value>;
S6:调用平台接口存储该键值对<Key,Value>到区块链底层的缓存中,如果是删除数据,Value为空;在Java智能合约最终执行完成之后,将所有缓存的数据都写入区块链账本中,保证数据的原子性。
本发明通过列簇表的方式进行数据组织和存储具有如下优点:
(1)避免了复杂的嵌套及类声明,且列簇表每个列簇对应的列数不固定,可以根据需要自由改变表结构,增加列簇或减少列簇,增加列或者减少列,可以轻松应对业务场景的变化,更符合实际场景的需求。
(2)避免了序列化产生的开销。如果使用传统的映射嵌套,在实际数据存入账本时,会有大量的序列化开销(大部分情况下区块链的底层数据库使用的都是LevelDB等KV型数据库),而在序列化过程中会产生许多不可控的隐患,如序列化的引号问题和空属性问题,经过序列化后用户无法判断“null”表示的是实际为空还是存入的值为null,另外,序列化使用的库本身可能存在一些漏洞容易被攻击,这是应用方无法避免的,但本发明的方法由于避免了序列化,将嵌套映射结构解耦出来成为一个个字符串,完美避免了这个问题,在突破序列化性能瓶颈的同时也加强了数据安全性。
(3)利于可视化。对于嵌套映射Map和嵌套集合List的可视化表一直是个难题,在可视化过程中需要考虑嵌套数据的结构,且当数据库的键值都是对象时如何制作一张交互性好、阅读性强的可视化表就是一个非常麻烦的问题。但本发明的列簇表本身就具有行、列簇、列的概念,从原生角度就考虑了可视化的问题,这对整个系统应用和推广具有非常大的优势。
(4)在使用集合和映射时,由于List和Map的数据都要加载到内存中,在区块链这种大数据的场景下(且数据会随着时间递增量级)是完全不可行的,且无法保证数据和账本交互的原子性,因此缓存的存在是必须的,但在哪一层设置缓存是个难题,HyperList和HyperMap在Java的数据结构层设计了缓存,这使得其他语言的智能合约由于无法直接与Java智能合约通信,需要另外设计缓存。而本发明将缓存建立在底层账本接口层,由于无序列化的影响,其更新速度快。这种设计既利用了缓存运行快的优势,又使得其他类型的智能合约都可以使用这一缓存机制,提升了拓展性。
本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。
Claims (3)
1.一种基于Java智能合约的数据组织和存储方法,其特征在于,该方法包括如下步骤:
S1:将嵌套的集合或映射数据解耦为列簇表形式,所述的列簇表中,每一列均为对象的每个元字段,具有关联或相似关系的列集成为一个列簇,每一行的数据对应一整个对象,每行的每个单元格为所述的一整个对象的每个元字段的属性值。
S2:擦除对象的类型信息,将对象的每个元字段的属性值用字符串替代,并对每个元字段的属性值、行、列簇、列分别做安全检查,判断行名、列簇名、列名是否为为空指针、空字符串,若是,抛出异常,拒绝存储;若不是,则进入下一步。
S3:判断行名、列簇名、列名含有@符号,若是,抛出异常,拒绝存储;若不是,则进入下一步。
S4:判断该操作,如果为插入新数据或修改数据,则继续检查元数据是否为空,若为空,则抛出异常,拒绝存储;若不为空,则进入下一步;如果是删除数据,则直接进入下一步。
S5:将S4得到的数据的行名、列簇名、列名拼接成字符串,拼接规则为:行名@列簇名@列名,将拼接好的字符串作为Key,元数据作为Value得到键值对<Key,Value>。
S6:调用平台接口存储该键值对<Key,Value>到区块链底层的缓存中,如果是删除数据,Value为空;在Java智能合约最终执行完成之后,将所有缓存的数据都写入区块链账本中,保证数据的原子性。
2.根据权利要求1所述的基于Java智能合约的数据组织和存储方法,其特征在于,当查询数据时,也需要先拼接行名、列簇名、列名,得到想要查询的键值对的Key,拼接规则为:行名@列簇名@列名。
3.根据权利要求1所述的基于Java智能合约的数据组织和存储方法,其特征在于,所述的S6中,读取数据时也先尝试从缓存中获取,如果查不到则直接从账本进行查询,若账本仍没有,则返回空;所述的缓存与账本接口使用同样的语言实现,重用缓存,使得对多种智能合约执行引擎可以执行同一套缓存机制。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911134271.5A CN110955658B (zh) | 2019-11-19 | 2019-11-19 | 一种基于Java智能合约的数据组织和存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911134271.5A CN110955658B (zh) | 2019-11-19 | 2019-11-19 | 一种基于Java智能合约的数据组织和存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110955658A true CN110955658A (zh) | 2020-04-03 |
CN110955658B CN110955658B (zh) | 2022-11-18 |
Family
ID=69977692
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911134271.5A Active CN110955658B (zh) | 2019-11-19 | 2019-11-19 | 一种基于Java智能合约的数据组织和存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110955658B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022105601A1 (zh) * | 2020-11-18 | 2022-05-27 | 易保网络技术(上海)有限公司 | 数据聚类方法和系统、数据存储方法和系统以及存储介质 |
CN115374301A (zh) * | 2022-10-24 | 2022-11-22 | 杭州欧若数网科技有限公司 | 缓存结构、基于缓存结构实现图查询的方法和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8788701B1 (en) * | 2006-08-25 | 2014-07-22 | Fair Isaac Corporation | Systems and methods for real-time determination of the semantics of a data stream |
CN104573022A (zh) * | 2015-01-12 | 2015-04-29 | 浪潮软件股份有限公司 | 一种HBase的数据查询方法及装置 |
CN108647361A (zh) * | 2018-05-21 | 2018-10-12 | 中国工商银行股份有限公司 | 一种基于区块链的数据存储方法、装置及系统 |
-
2019
- 2019-11-19 CN CN201911134271.5A patent/CN110955658B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8788701B1 (en) * | 2006-08-25 | 2014-07-22 | Fair Isaac Corporation | Systems and methods for real-time determination of the semantics of a data stream |
CN104573022A (zh) * | 2015-01-12 | 2015-04-29 | 浪潮软件股份有限公司 | 一种HBase的数据查询方法及装置 |
CN108647361A (zh) * | 2018-05-21 | 2018-10-12 | 中国工商银行股份有限公司 | 一种基于区块链的数据存储方法、装置及系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022105601A1 (zh) * | 2020-11-18 | 2022-05-27 | 易保网络技术(上海)有限公司 | 数据聚类方法和系统、数据存储方法和系统以及存储介质 |
CN115374301A (zh) * | 2022-10-24 | 2022-11-22 | 杭州欧若数网科技有限公司 | 缓存结构、基于缓存结构实现图查询的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110955658B (zh) | 2022-11-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107402992B (zh) | 一种分布式NewSQL数据库系统和全文检索建立方法 | |
US6240422B1 (en) | Object to relational database mapping infrastructure in a customer care and billing system | |
US6240418B1 (en) | Database apparatus | |
CN111898139B (zh) | 数据读写方法及装置、电子设备 | |
US11294875B2 (en) | Data storage on tree nodes | |
CN111506621B (zh) | 一种数据统计方法及装置 | |
KR20170019352A (ko) | 데이터 질의 방법 및 장치 | |
CN105447051A (zh) | 一种数据库操作的方法和装置 | |
CN101739436A (zh) | 基于xml的柔性数据迁移方法 | |
CN110955658B (zh) | 一种基于Java智能合约的数据组织和存储方法 | |
US8015195B2 (en) | Modifying entry names in directory server | |
US9128946B2 (en) | Systems and methods for platform-independent data file transfers | |
US11995059B2 (en) | Database index and database query processing method, apparatus, and device | |
CN110134681A (zh) | 数据存储与查询方法、装置、计算机设备及存储介质 | |
CN104166649B (zh) | 一种用于搜索引擎的缓存方法和设备 | |
US20060190476A1 (en) | Database storage system and associated method | |
US7139690B2 (en) | Object-level conflict detection in an object-relational database system | |
CN116049193A (zh) | 数据存储方法及装置 | |
JPH08235040A (ja) | データファイル管理システム | |
CN113703777A (zh) | 基于数据库表的代码生成方法、装置、存储介质和设备 | |
US20110137959A1 (en) | Representing relational schema information using generic meta schemas | |
US11681705B2 (en) | Trie data structure with subtrie data structures | |
CN112035485A (zh) | 基于分布式架构实现信用信息数据高效查询方法及其系统 | |
US7720904B2 (en) | Entity projection | |
CN115587100A (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 |