CN116126429A - 一种非数据类型对象的引用持久化及其恢复的方法 - Google Patents

一种非数据类型对象的引用持久化及其恢复的方法 Download PDF

Info

Publication number
CN116126429A
CN116126429A CN202211558458.XA CN202211558458A CN116126429A CN 116126429 A CN116126429 A CN 116126429A CN 202211558458 A CN202211558458 A CN 202211558458A CN 116126429 A CN116126429 A CN 116126429A
Authority
CN
China
Prior art keywords
data
serialization
type
persistence
information
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
Application number
CN202211558458.XA
Other languages
English (en)
Other versions
CN116126429B (zh
Inventor
韩春林
沈兵
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Gudou Technology Shanghai Co ltd
Original Assignee
Gudou Technology Shanghai Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Gudou Technology Shanghai Co ltd filed Critical Gudou Technology Shanghai Co ltd
Priority to CN202211558458.XA priority Critical patent/CN116126429B/zh
Publication of CN116126429A publication Critical patent/CN116126429A/zh
Application granted granted Critical
Publication of CN116126429B publication Critical patent/CN116126429B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4493Object persistence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2474Sequence data queries, e.g. querying versioned data
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种非数据类型对象的引用持久化及其恢复的方法,属于互联网技术,该技术包括数据的序列化和反序列化两个部分。该方法在序列化时对数据进行标记,并分离成为数据元信息和数据进行存储;在反序列化时依次读取数据入口,并根据数据类型重建原有数据引用体系。本发明可以无视任何引用结构进行序列化并在序列化后进行恢复,且有效的减小了序列化后的数据大小。

Description

一种非数据类型对象的引用持久化及其恢复的方法
技术领域
本发明属于互联网技术领域,涉及数据序列化与反序列化,具体是一种复杂条件下的实例构造技术与非数据类型对象数据之间保持同一引用的解决方案。
背景技术
在当前的语言开发中,对无状态的数据已经存在诸多非常成熟的解决方案,如JSON(JavaScript Object Notation,JS对象简谱)、ProtoBuf(Protocol Buffers)、XML(Extensible Markup Language,可扩展标记语言)等。
JSON是一种轻量级的数据交换格式。它基于ECMAScript(European ComputerManufacturers Association,欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON化数据是将内存中的数据对象编码为对应的字节形式,并可以在需要时进行反序列化使用。JSON采用了无状态的数据序列化方法,只有7种数据类型:数字,字符串,对象,数组,null,true,false。该方式可以方便的在各种语言之间进行通信传递。
ProtoBuf是谷歌开发的一款无关平台,无关语言,可扩展,轻量级高效的序列化结构的数据格式,用于将自定义数据结构序列化成字节流,和将字节流反序列化为数据结构。适合做数据存储和为不同语言、不同应用之间互相通信的数据交换格式,只要实现相同的协议格式,即后缀为proto文件被编译成不同的语言版本,加入各自的项目中,这样不同的语言可以解析其它语言通过Protobuf序列化的数据。ProtoBuf为了进一步减小序列化后的数据大小,进行了额外的元数据提取,以及特殊的内容编码。
JSON化数据在当前已经能处理大部分的情况,但在指定场景下,还有部分问题需要解决。如:(1)不能处理对象关系:数据本身具有无状态的特征,所有的内存对象都被作为数据处理,因此对象恢复的时候要求对象值相等,而不强制要求对象值为同一个。在对象关系复杂的场景中,两个对象的相互引用会引发错误,无法成功进行序列化,因为同一引用和数值相等最大的区别在于,如果引用是用一个数据对象,当修改该数据时,会影响到所有引用该数据的其他地方;如果是值对象,一般是不可更改的,并且改动也仅仅引用当前使用点,这一现象,会在序列化和反序列化后发生。(2)有限制的反序列化规范:在常规JSON框架下,对数据的写法以及反序列化时的函数成员有一定的要求,在部分的情况下需要提供特定的构造函数。(3)数据内容比较大:JSON本身产生的数据中,需要记录大量的“键-值对”,这也使得大部分情况下,JSON序列化的字节内容并不小。ProtoBuf在JSON的数据基础上做出了一些针对性改进,其提取了数据的键以减少数据量,一定程度上解决了数据内容较大的问题,但其它问题仍然存在。
发明内容
为了解决现有技术的不足,本发明提出一种非数据类型对象的引用持久化及其恢复的方法,在处理非数据类型对象数据的对象关系上,能够在固定作用域下,解决数据引用的恢复与持久化问题,保证恢复前后,原有数据引用保持不变。
本发明要解决的技术问题是通过以下技术方案实现的:
一种非数据类型对象的引用持久化及其恢复的方法,包括数据的序列化和反序列化两个部分:
数据序列化时,检测当前数据入口是否存在,其中序列化的第一个成员总是会被指定为数据入口,如果不存在则将其指定为数据入口,随后提取当前数据中的所有成员,提取需要存储的成员并识别出对应的引用类型数据:对于数据类型成员,根据其序列化程序进行数据序列化,然后输出到指定的写出器;对于引用类型成员,为其生成唯一的引用编号并与当前数据类型映射保存,随后对该引用对象递归触发重复本序列化步骤,直到所有数据处理完成,输出的数据内容总是与其唯一编号保持关联;
数据反序列化时,从数据中读取数据入口,读取数据入口的类型成员信息,使用该信息基于内存重建该数据实例,并将该数据实例根据其引用编号保存至当前上下文,此时,该数据是一个无效的数据,需要接下来进行两种数据的装填:对于值类型数据,直接反序列化即可;对于在序列化过程中被标记为引用类型数据的,需要检测该数据是够已经处于反序列化过程,只要上下文中存在该数据类型即被认定,如果存在反序列化过程,则直接从上下文中获取并设置,否则,递归从内存中构造一个实例并重复上述步骤。
在本发明中,在数据序列化和反序列化的过程中,如果出现堆栈读取过大的情况,改变程序参数调大堆栈,或者将递归式的引用类型序列化改为循环式,可以使用大的堆内存进行处理。
在本发明中,在数据序列化和反序列化的过程中,序列化产生的数据应跟引用编号关联起来,以便在需要处理数据时进行快速查询;如果数据之间的关系是处于统一等级,需要遍历反序列化数据直至读取完成并返回。一般情况下,数据入口应该只有一个对象,如果是多个数据,使用数组处理也可以完成。
在本发明中,在数据序列化的过程中,数据的字段信息和其内容数据文件分开存储,字端信息中只需要包含:字段名称、字段类型,该字段信息主要用于与实际类型之间做校验使用,称之为数据元信息;数据文件是保存后按照头文件中字段顺序排列的数据值,因此数据文件与数据元信息文件应配合读取。
进一步的,在数据的存储过程中,使用特定的数据标记来存储数据的一些额外信息,如数据为null的标志等。
与现有技术相比,本发明具有以下优点:
(1)本发明进行的数据处理,可以无视任何引用进行序列化并在序列化后进行恢复,将纵向数据进行横向数据存储,恢复时再将横向数据转换为纵向数据,恢复前后,原有数据引用保持不变;
(2)本发明的反序列化过程中,基于内存重建数据类型,不受数据原有实例化过程影响,因此对数据本身的写法基本无要求,可以在内存的基准上进行直接操作和关联,从而获得一定的性能提升,数据的类型还可以在后续基础上逐渐添加以提高兼容;
(3)本发明使用数据元信息与数据文件分离的方式进行存储,能够将大量重复的数据抽离,最大程度减少数据大小,实际数据生成大小约为JSON数据的1/2,与ProtoBuf数据大小相当。
附图说明
图1为本发明的数据序列化环节中生成的数据元信息内部格式元数据结构示意图;
图2为本发明的数据反序列化环节中引用类型标记结构示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
本发明以Java环境为例,实现本发明的序列化与反序列化逻辑,并将其存储到文件系统中。
在序列化时,标记数据入口文件,并采用其identityHashCode作为文件标记,该标记由JVM(Java Virtual Machine,Java虚拟机)提供并保证在该对象声明周期全局唯一,然后按照类型生成各自的类型的数据元信息,比如:com_test_model_User.meta,该文件以meta结尾,其内部格式如图1中元数据所示。
数据文件可以通过后缀文件与其元数据建立关联,比如:56562556.com_test_model_User(该名称前一部分为当前数据的identity,其后缀为当前类型的文件名变体)。
在反序列化文件时,在特定数据的上下文中读取数据入口,需要使用特殊技术手段,使用Unsafe在内存中直接进行实例初始化,Unsafe是一种底层API(ApplicationProgramming Interface,应用程序编程接口),其在操作时只会进行少量的必要校验检查,其他正确性需要由逻辑保证,因此具有极高的自由度和性能。由Unsafe新建的对象此时只占用内存,其所有属性均为待处理的占位值。然后需要将值类型变量使用Unsafe重新赋值回去。对于引用类型需要使用上下文的形式进行标记,其结构如图2所示。
每一个数据都总是被分为数据元信息和数据文件两部分,当所有的实例都创建完成之后,只需要回头替换掉所有的占用数据,根据引用情况,从上下文中找到该数据并赋值到实例数据中,即完成了数据的存储。
本发明并不限于上文讨论的实施方式。以上对具体实施方式的描述旨在于为了描述和说明本发明涉及的技术方案,基于本发明启示的显而易见的变换或替代也应当被认为落入本发明的保护范围。

Claims (5)

1.一种非数据类型对象的引用持久化及其恢复的方法,其内容包括数据的序列化和反序列化两个部分。其主要工作逻辑如下:
在进行数据序列化时,系统总是会尝试建立第一个序列化入口,一般情况下序列化的第一个成员总是会被指定为数据入口,随后提取当前数据中的所有成员,提取需要存储的成员并识别出对应的数据类型并分类处理:对于数据类型成员,根据其类型进行常规序列化程序进行数据序列化,然后输出到指定的写出器;对于引用类型成员,需要按照在规则为其生成唯一的引用编号并与当前数据类型映射保存,随后对该引用对象递归触发重复本序列化步骤,直到所有数据处理完成,输出的数据内容总是与其唯一编号保持关联。
数据反序列化时,从数据中读取数据入口,读取数据入口的类型成员信息,使用该信息基于内存重建该数据实例,并将该数据实例根据其引用编号保存至当前反序列化上下文,此时,该数据是一个未完成的数据,其内存已经被分配,需要接下来对两种数据的装填:对于值类型数据,直接反序列化即可;对于在序列化过程中被标记为引用类型数据的,需要检测该数据是够已经处于反序列化过程,只要上下文中存在该数据类型即被认定,如果存在反序列化过程,则直接从上下文中获取并设置,否则,递归从内存中构造一个实例并重复上述步骤。
2.根据权利要求1所述的引用持久化及其恢复的方法,其特征在于:在数据序列化的过程中,数据的字段信息和其内容数据文件分开存储,字段信息中只需要包含:字段名称、字段类型,该字段信息主要用于与实际类型之间做校验使用,称之为数据元信息;数据文件是保存后按照头文件中字段顺序排列的数据值,因此数据文件与数据元信息文件应配合读取。
3.根据权利要求2所述的引用持久化及其恢复的方法,其特征在于:在数据的存储过程中,使用特定的数据标记来存储数据的一些额外信息。
4.根据权利要求1所述的引用持久化及其恢复的方法,其特征在于:在数据序列化和反序列化的过程中,如果出现堆栈读取过大的情况,改变程序参数调大线程堆栈,或者将递归式的引用类型序列化改为循环式,可以使用大的堆内存进行处理。
5.根据权利要求1所述的引用持久化及其恢复的方法,其特征在于:在数据序列化和反序列化的过程中,序列化产生的数据应跟引用编号关联起来,以便在需要处理数据时进行快速查询;如果数据之间的关系是处于统一等级,需要遍历反序列化数据直至读取完成并返回。
CN202211558458.XA 2022-12-06 2022-12-06 一种非数据类型对象的引用持久化及其恢复的方法 Active CN116126429B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211558458.XA CN116126429B (zh) 2022-12-06 2022-12-06 一种非数据类型对象的引用持久化及其恢复的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211558458.XA CN116126429B (zh) 2022-12-06 2022-12-06 一种非数据类型对象的引用持久化及其恢复的方法

Publications (2)

Publication Number Publication Date
CN116126429A true CN116126429A (zh) 2023-05-16
CN116126429B CN116126429B (zh) 2023-11-17

Family

ID=86299919

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211558458.XA Active CN116126429B (zh) 2022-12-06 2022-12-06 一种非数据类型对象的引用持久化及其恢复的方法

Country Status (1)

Country Link
CN (1) CN116126429B (zh)

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6928488B1 (en) * 2001-06-27 2005-08-09 Microsoft Corporation Architecture and method for serialization and deserialization of objects
CN101963944A (zh) * 2010-09-30 2011-02-02 用友软件股份有限公司 对象存储方法和系统
CN102043657A (zh) * 2011-02-01 2011-05-04 苏州同元软控信息技术有限公司 物理建模语言Modelica的模型库文件序列化方法
US20130007027A1 (en) * 2011-01-05 2013-01-03 Hazel Thomas M In-situ serialization system using meta object models and methods thereof
CN103019689A (zh) * 2012-11-21 2013-04-03 上海富欣智能交通控制有限公司 通用的对象序列化的实现方法
CN105335156A (zh) * 2015-10-22 2016-02-17 福建星网锐捷通讯股份有限公司 一种java对象序列化的方法以及系统
CN105787128A (zh) * 2016-03-29 2016-07-20 四川秘无痕信息安全技术有限责任公司 一种恢复Java序列化文件数据的方法
CN106155630A (zh) * 2015-04-14 2016-11-23 阿里巴巴集团控股有限公司 序列化方法、反序列化方法、序列化装置及反序列化装置
CN106502635A (zh) * 2015-09-08 2017-03-15 北京国双科技有限公司 数据处理方法和装置
CN107463668A (zh) * 2017-08-02 2017-12-12 湖南新航动力信息科技有限公司 序列化和反序列化的方法及装置、计算机设备及存储介质
CN108399068A (zh) * 2018-03-02 2018-08-14 上海赞控网络科技有限公司 函数程序持久化的方法、电子设备及存储介质
CN109343836A (zh) * 2018-08-31 2019-02-15 阿里巴巴集团控股有限公司 数据序列化、数据反序列方法、装置及设备
CN111930362A (zh) * 2020-07-23 2020-11-13 上海珀立信息科技有限公司 一种基于UE4平台的Prefab开发系统及创建方法
CN114385146A (zh) * 2022-01-05 2022-04-22 武汉物易云通网络科技有限公司 一种简约的对象传输序列化方法及装置

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6928488B1 (en) * 2001-06-27 2005-08-09 Microsoft Corporation Architecture and method for serialization and deserialization of objects
CN101963944A (zh) * 2010-09-30 2011-02-02 用友软件股份有限公司 对象存储方法和系统
US20130007027A1 (en) * 2011-01-05 2013-01-03 Hazel Thomas M In-situ serialization system using meta object models and methods thereof
CN102043657A (zh) * 2011-02-01 2011-05-04 苏州同元软控信息技术有限公司 物理建模语言Modelica的模型库文件序列化方法
CN103019689A (zh) * 2012-11-21 2013-04-03 上海富欣智能交通控制有限公司 通用的对象序列化的实现方法
CN106155630A (zh) * 2015-04-14 2016-11-23 阿里巴巴集团控股有限公司 序列化方法、反序列化方法、序列化装置及反序列化装置
CN106502635A (zh) * 2015-09-08 2017-03-15 北京国双科技有限公司 数据处理方法和装置
CN105335156A (zh) * 2015-10-22 2016-02-17 福建星网锐捷通讯股份有限公司 一种java对象序列化的方法以及系统
CN105787128A (zh) * 2016-03-29 2016-07-20 四川秘无痕信息安全技术有限责任公司 一种恢复Java序列化文件数据的方法
CN107463668A (zh) * 2017-08-02 2017-12-12 湖南新航动力信息科技有限公司 序列化和反序列化的方法及装置、计算机设备及存储介质
CN108399068A (zh) * 2018-03-02 2018-08-14 上海赞控网络科技有限公司 函数程序持久化的方法、电子设备及存储介质
CN109343836A (zh) * 2018-08-31 2019-02-15 阿里巴巴集团控股有限公司 数据序列化、数据反序列方法、装置及设备
CN111930362A (zh) * 2020-07-23 2020-11-13 上海珀立信息科技有限公司 一种基于UE4平台的Prefab开发系统及创建方法
CN114385146A (zh) * 2022-01-05 2022-04-22 武汉物易云通网络科技有限公司 一种简约的对象传输序列化方法及装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
LITONG YOU 等: "JDap: Supporting in-memory data persistence in javascript using Intel’s PMDK", 《JOURNAL OF SYSTEMS ARCHITECTURE》, vol. 101, pages 1 *
徐昊: "面向非易失性内存的高级编程语言对象持久化方法研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 6, pages 137 - 22 *
杨健: "J2EE平台上对象间关系持久化的研究", 《中国水运(理论版)》, no. 2, pages 39 - 41 *
高立群 等: ".NET Framework中序列化与反序列化方法的分析与应用", 《微计算机应用》, no. 11, pages 1178 - 1182 *

Also Published As

Publication number Publication date
CN116126429B (zh) 2023-11-17

Similar Documents

Publication Publication Date Title
CN106570018B (zh) 序列化与反序列化的方法、装置、系统以及电子设备
US9892144B2 (en) Methods for in-place access of serialized data
CN111124551B (zh) 数据序列化、数据反序列化方法、装置和计算机设备
US8443155B2 (en) Lock-free concurrent object dictionary
KR20040007442A (ko) 구조화된 문서를 압축/복원하기 위한 방법
CN107451237B (zh) 序列化与反序列化方法、装置及设备
CN109460220A (zh) 报文预定义代码生成方法、装置、电子设备和存储介质
US9292549B2 (en) Method and system for index serialization
CN113485915A (zh) 一种基于协议建模和约束覆盖的接口测试数据自动生成方法和装置
CN114490853A (zh) 数据处理方法、装置、设备、存储介质及程序产品
US8396904B2 (en) Utilizing information from garbage collector in serialization of large cyclic data structures
CN114595199B (zh) 文件解析方法、装置、计算机设备和存储介质
CN112084032A (zh) 一种写优化的持久性内存堆管理方法
CN114385186A (zh) 数据类型转换方法、装置、设备及存储介质
US20110022611A1 (en) Computer object conversion using an intermediate object
CN112230873B (zh) 一种基于dsp的显示处理方法
CN116701325B (zh) 基于二进制文件缓存加载xbrl分类标准的方法
CN116126429B (zh) 一种非数据类型对象的引用持久化及其恢复的方法
CN113138755A (zh) 一种json序列化和反序列化的优化方法及系统
CN112000589A (zh) 一种数据写入方法、数据读取方法、装置及电子设备
CN108073709B (zh) 一种数据记录的操作方法、装置、设备和存储介质
CN111752954B (zh) 一种大规模特征数据存储的方法及装置
WO2023093761A1 (zh) 处理数据的方法和相关装置
WO2021097785A1 (zh) 数据序列化、数据反序列化方法、装置和计算机设备
US20210004243A1 (en) Deserialization method and apparatus, and computing device

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