CN113312344A - 数据序列化、反序列化方法、设备、系统、介质及产品 - Google Patents
数据序列化、反序列化方法、设备、系统、介质及产品 Download PDFInfo
- Publication number
- CN113312344A CN113312344A CN202110854592.3A CN202110854592A CN113312344A CN 113312344 A CN113312344 A CN 113312344A CN 202110854592 A CN202110854592 A CN 202110854592A CN 113312344 A CN113312344 A CN 113312344A
- Authority
- CN
- China
- Prior art keywords
- data
- result
- column
- serialization
- values
- 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/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- 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/2282—Tablespace storage structures; Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供一种数据序列化、反序列化方法、设备、系统、介质及产品。该数据序列化方法包括:确定待序列化的多行数据,将多行数据序列化为包含元数据部分和数据部分的行组数据,元数据部分用于描述多行数据对应的表结构,数据部分用于描述所述多行数据中的值。该方法消除了列名和数据类型的冗余,从而减少了对数据库数据进行序列化时的数据冗余,提高了数据交互效率,降低了网络带宽的消耗。
Description
技术领域
本申请涉及数据库技术领域,尤其涉及一种数据序列化、反序列化方法、设备、系统、介质及产品。
背景技术
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。数据库可以包括关系型数据库和非关系型数据库(NoSQL数据库)。
通常,在生产环境中需要实时订阅数据库的变更消息,用于流计算、缓存更新、事件通知等场景。为了解耦需要定义数据库变更消息格式,常用的数据库变更消息格式是JS对象简谱(JavaScript Object Notation,JSON)格式,即第一计算机设备将待序列化的数据库数据序列化为JSON格式数据,并将JSON格式数据发送至第二计算机设备,第二计算机设备将JSON格式数据进行反序列化得到数据库数据。其中,在使用JSON格式时,每个数据库数据都是采用“列名+数据类型+值”的三元组方式进行表示,在需要交互大量数据的场景下,采用JSON格式存在大量的数据冗余,数据交互效率较低。
因此,在大数据场景下,如何减小对数据库数据进行序列化时的数据冗余,提高数据交互效率成为目前亟待解决的问题。
发明内容
本申请实施例提供一种数据序列化、反序列化方法、设备、系统、介质及产品,用以解决现有技术中在大数据场景下,如何减小对数据库数据进行序列化时的数据冗余,提高数据交互效率的问题。
第一方面,本申请实施例提供一种数据序列化方法,包括:
确定待序列化的多行数据,每行数据对应多个列;
将所述多行数据序列化为包含元数据部分和数据部分的行组数据,所述元数据部分用于描述所述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值。
第二方面,本申请实施例提供一种数据反序列化方法,包括:
获取待反序列化的行组数据,所述行组数据包含元数据部分和数据部分,所述元数据部分用于描述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值;
对所述元数据部分进行反序列化,以生成所述表结构;
根据生成的所述表结构对所述数据部分进行解析,以确定所述数据部分所描述的值在所述表结构中的行列位置,并根据所述行列位置对所述数据部分所描述的至少部分值进行反序列化。
第三方面,本申请实施例提供一种数据序列化装置,包括:
确定模块,用于确定待序列化的多行数据;
序列化模块,用于将所述多行数据序列化为包含元数据部分和数据部分的行组数据,所述元数据部分用于描述所述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值。
第四方面,本申请实施例提供一种数据反序列化装置,包括:
获取模块,用于获取待反序列化的行组数据,所述行组数据包含元数据部分和数据部分,所述元数据部分用于描述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值;
元数据反序列化模块,用于对所述元数据部分进行反序列化,以生成所述表结构;
数据反序列化模块,用于根据生成的所述表结构对所述数据部分进行解析,以确定所述数据部分所描述的值在所述表结构中的行列位置,并根据所述行列位置对所述数据部分所描述的至少部分值进行反序列化。
第五方面,本申请实施例提供一种计算机设备,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现如第一方面任一项所述的方法。
第六方面,本申请实施例提供一种计算机设备,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现如第二方面任一项所述的方法。
第七方面,本申请实施例提供一种数据交互系统,包括第一计算机设备和第二计算机设备,所述第一计算机设备用于第一方面中任一项所述的方法,所述第二计算机设备用于执行第二方面中任一项所述的方法。
第八方面,本申请实施例提供一种计算机程序产品,包含计算机程序指令,当所述指令由处理器执行时,实现如第一方面中任一项所述的方法。
第九方面,本申请实施例提供一种计算机程序产品,包含计算机程序指令,当所述指令由处理器执行时,实现如第二方面中任一项所述的方法。
第十方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序被执行时,实现如第一方面任一项所述的方法。
第十一方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序被执行时,实现如第二方面任一项所述的方法。
在本申请实施例中,是以不同于JSON格式数据的行组数据(RowGroup)为数据交互的最小单元,一个行组数据中包含了多行数据,行组数据是自解释的,携带了多行数据的表结构(Schema)定义,具体的,行组数据包含了元数据和数据两部分,元数据部分用于描述多行数据对应的表结构,数据部分用于描述多行数据中的值,通过在序列化时对多行数据中的元数据与数据进行解耦,消除了列名和数据类型的冗余,从而减少了对数据库数据进行序列化时的数据冗余,提高了数据交互效率,降低了网络带宽的消耗。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例的应用场景示意图;
图2为本申请一实施例提供的数据序列化方法的流程示意图;
图3为本申请一实施例提供的元数据部分的示意图;
图4为本申请一实施例提供的数据部分的示意图;
图5为本申请一实施例提供的对多行数据进行序列化的示意图;
图6为图5中行组数据中的元数据部分的示意图;
图7为图5中行组数据中的数据部分的示意图;
图8为本申请一实施例提供的数据反序列化方法的流程示意图;
图9为本申请一实施例提供的数据序列化装置的结构示意图;
图10为本申请一实施例提供的计算机设备的结构示意图;
图11为本申请一实施例提供的数据反序列化装置的结构示意图;
图12为本申请另一实施例提供的计算机设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种,但是不排除包含至少一种的情况。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
为了方便本领域技术人员理解本申请实施例提供的技术方案,下面先对技术方案实现的技术环境进行说明。
相关技术中比较常用的对数据库数据进行序列化的方法,主要包括将待序列化的数据库数据序列化为JSON格式数据,在需要交互大量数据的场景下,采用JSON格式存在大量的数据冗余,因此相关技术中亟需一种在大数据场景下,减小对数据库数据进行序列化时的数据冗余,提高数据交互效率的数据序列化方法。
基于类似于上文所述的实际技术需求,本申请提供的数据序列化方法可以利用技术化的手段在大数据场景下,减小对数据库数据进行序列化时的数据冗余,提高数据交互效率。
下面通过一个示例性的应用场景具体说明本申请各个实施例提供的方法。
图1为本申请实施例的应用场景示意图,如图1所示,该应用场景中可以包括数据库系统11、第一计算机设备12和第二计算机设备13。其中,数据库系统11可以是关系型数据库系统,也可以是非关系型数据库系统,数据库系统11运行的过程中可以透出日志数据,日志数据可以用于确定需要进行序列化的数据库数据。第一计算机设备12可以采用本申请实施例提供的数据序列化方法,对需要进行序列化的数据库数据进行序列化。第二计算机设备13可以采用本申请实施例提供的数据反序列化方法,对获取到的经第一计算机设备12序列化的数据库数据进行反序列化,得到数据库数据。
需要说明的是,图1中第一计算机设备12作为发送端,第二计算机设备13作为接收端为例。
需要说明的是,本申请实施例提供的方法可以应用于任何需要交互数据库数据的场景中,例如数据库订阅场景、数据库推送场景等。
通常,第一计算机设备12是将数据库数据序列化为JSON格式数据,具体的,每个数据库数据都是采用“列名+数据类型+值”的三元组方式进行表示,在需要交互大量数据的场景下,相同的列名和数据类型在JSON格式数据中会被重复很多次,导致存在大量的数据冗余,数据交互效率较低。以需要将如下表1所示的多行数据序列化为JSON格式数据为例,对存在的数据冗余进行具体说明。
表1
rowkey | C1 | C2 | C3 |
row1 | a | b | c |
row2 | x | y | |
row3 | z | ||
row4 | m | n |
其中,rowkey、C1、C2和C3是列名,row1、row2、row3、row4、a、b、c、x、y、z、m和n是值。需要说明的是,表1中的未填充值的位置其值为空值(NULL)。
如果第一计算机设备12将表1所示的数据库数据序列化为JSON格式数据,则表1中的第一列的列名rowkey和第一列的数据类型需要被包含四次,即“rowkey+数据类型+row1”一次、“rowkey+数据类型+row2”一次、“rowkey+数据类型+row3”一次、“rowkey+数据类型+row4”一次;表1中的第二列的列名C1和第二列的数据类型至少需要被包含两次,即“C1+数据类型+a”一次,“C1+数据类型+x”一次;表1中的第三列的列名C2和第三列的数据类型至少需要被包含三次,即“C2+数据类型+b”一次,“C2+数据类型+y”一次,“C2+数据类型+m”一次;表1中的第四列的列名C3和第四列的数据类型至少需要被包含三次,即“C3+数据类型+c”一次,“C3+数据类型+z”一次,“C3+数据类型+n”一次。
可以看出,在将表1所示的数据库数据序列化为JSON格式数据时,列名rowkey+数据类型需要被重复包含三次,列名C1+数据类型需要被重复包含一次,列名C2+数据类型需要被重复包含两次,列名C3+数据类型需要被重复包含两次,存在较大冗余。并且,在行数越过时,冗余会越大,从而导致大数据场景下存在大量的数据冗余,数据交互效率较低。
另外,第二计算机设备13在获取到JSON格式数据后,受限于JSON语言本身,第二计算机设备13需要对获取到的JSON格式数据中全部值的序列化结果进行反序列化,由此第二计算机设备13需要创建出很多小对象,例如表1中的一个值就要创建一个对象,并且还需要大量的复制(copy)操作,以从获取到的JSON格式数据中拷贝数据到所创建的对象中,导致对第二计算机设备13的CPU资源消耗严重。
为了解决大数据场景下,将数据库数据序列化为JSON格式数据时,存在大量的数据冗余,数据交互效率较低的技术问题,在图1中的第一计算机设备12是以不同于JSON格式数据的行组数据(RowGroup)为数据交互的最小单元,一个行组数据中包含了多行数据,行组数据是自解释的,携带了多行数据的表结构(Schema)定义,具体的,行组数据包含了元数据和数据两部分,元数据部分用于描述多行数据对应的表结构,数据部分用于描述多行数据中的值,通过在序列化时对多行数据中的元数据与数据进行解耦,消除了列名和数据类型的冗余,从而减少了对数据库数据进行序列化时的数据冗余,提高了数据交互效率,降低了网络带宽的消耗。
基于上述,在图1所示的应用场景中,第一计算机设备12确定待序列化的多行数据,每行数据对应多个列,将多行数据序列化为包含元数据部分和数据部分的行组数据,元数据部分用于描述多行数据对应的表结构,数据部分用于描述多行数据中的值。
假设待序列化的多行数据为表1所示的多行数据,则采用本申请实施例提供的数据序列化方法,可以将表1所示的多行数据序列化为包括元数据部分和数据部分的行组数据,其中,行组数据中的元数据部分可以用于描述表1所示的多行数据对应的表结构,行组数据中的数据部分可以用于描述表1所示的多行数据中的值。
另外,针对于第一计算机设备12序列化得到的行组数据,第二计算机设备13可以有选择对行组数据中部分值的序列化结果进行反序列化,能够减少需要创建的对象的数量,并由此减少需要拷贝的数据,从而能够减少了第二计算机设备13对于CPU资源的消耗。
下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
图2为本申请一实施例提供的数据序列化方法的流程示意图,本实施例的执行主体可以为图1中的第一计算机设备12。如图2所示,本实施例的方法可以包括:
步骤21,确定待序列化的多行数据,每行数据对应多个列;
步骤22,将所述多行数据序列化为包含元数据部分和数据部分的行组数据,所述元数据部分用于描述所述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值。
例如,数据库系统11的内核可以透出日志数据,第一计算机设备可以获取(例如采集)日志数据,并根据日志数据确定待序列化的多行数据。当然,在其他实施例中,第一计算机设备也可以通过其他方式确定待序列化的多行数据,本申请对此不做限定。
其中,多行数据中的每行数据对应多个列。多行数据例如可以为如表1所示的多行数据,每行数据可以对应rowkey、C1、C2和C4四个列。
本申请实施例中,在确定待序列化的多行数据后,可以将多行数据序列化为包含元数据部分和数据部分的行组数据,其中,元数据部分用于描述多行数据对应的表结构,数据部分用于描述多行数据中的值。
其中,多行数据对应的表结构中可以包括多个列的列信息,例如rowkey、C1、C2和C4这四个列的列信息。在此情况下,步骤22具体可以包括如下步骤a1和步骤a2。
步骤a1,对所述表结构中的多个列信息进行序列化,为每个列信息的序列化结果拼接相应的长度数据,并使得每个列信息的序列化结果的拼接结果按序排列,以得到行组数据中的元数据部分。
一个实施例中,列信息可以包括列名和列的数据类型。基于此,某一列的列信息包括该列的列名和该列的数据类型,该列信息的序列化结果可以包括该列的数据类型的序列化结果和该列的列名的序列化结果,进一步的,为该列信息的序列化结果拼接相应的长度数据后,该列信息的序列化结果的拼接结果可以包括该列的数据类型的序列化结果、该列的列名的序列化结果的长度以及该列的列名的序列化结果。
需要说明的是,对于使得每个列信息的序列化结果的拼接结果按序排列的具体方式,本申请不做限定。例如,可以通过按序拼接每个列信息的序列化结果的拼接结果的方式,或者,可以通过按序存储每个列信息的序列化结果的拼接结果的方式,使得每个列信息的序列化结果的拼接结果按序排列。
需要说明的是,元数据部分中多个列信息的序列化结果的拼接结果的排列顺序,可以灵活实现,每个列信息的序列化结果的拼接结果在元数据部分中的排列位置,能够表征该列信息具体是表结构中哪个列的列信息。示例性的,多个列信息的序列化结果的拼接结果可以按照列的顺序排列。
一个实施例中,在多行数据对应的数据库表为关系型数据库表时,多行数据对应的表结构还可以包括列数。在此情况下,前述序列化得到元数据部分的过程还可以包括:对表结构中的列数进行序列化,并使得列数的序列化结果和列信息的序列化结果的拼接结果一起按序排列。
另一个实施例中,在多行数据对应的数据库表为非关系型数据库表时,多行数据对应的表结构还可以包括主键列的列数和非主键列的列数。在此情况下,前述序列化得到元数据部分的过程,还可以包括:对表结构中的主键列的列数和非主键列的列数进行序列化,并使得主键列的列数的序列化结果、非主键列的列数的序列化结果和列信息的序列化结果的拼接结果一起按序排列。
需要说明的是,元数据部分中两个列数的序列化结果的排列顺序,可以灵活实现,每个列数的序列化结果的拼接结果在元数据部分中的排列位置,能够表征该列数具体是表结构中主键列的列数还是非主键列的列数。
例如,如图3所示,元数据部分中的排列顺序可以为:先是主键列的列数的序列化结果,再是主键列1的序列化结果的拼接结果,然后是主键列2的序列化结果的拼接结果,……,之后是非主键列的列数的序列化结果,之后是非主键列1的序列化结果的拼接结果,之后是非主键列2的序列化结果的拼接结果,……。
需要说明的是,图3所示的排列顺序仅为举例,图3中“数据类型”是表示数据类型的序列化结果,“列名长度”是表示列名长度的序列化结果的长度,“列名”是表示列名的序列化结果,“主键列数”是表示主键列的列数的序列化结果,“非主键列数”是表示非主键列的列数的序列化结果。
可选的,元数据部分还可以用于描述多行数据对应的标签,标签用于附加属性,例如表名、任务名等。基于此,序列化得到元数据部分的过程还可以包括:对多行数据所对应标签的标签信息进行序列化,为标签信息的序列化结果拼接相应的长度数据,并使得标签信息的序列化结果的拼接结果和列信息的序列化结果的拼接结果一起按序排列。
示例性的,某一个标签的标签信息可以包括该标签的标签名和标签值,该标签信息的序列化结果可以包括该标签的标签名的序列化结果和该标签的标签值的序列化结果,进一步的,为该标签信息的序列化结果拼接相应的长度数据后,该标签信息的序列化结果的拼接结果可以包括该标签的标签名的序列化结果、该标签的标签值的序列化结果的长度以及该标签的标签值的序列化结果。
其中,标签的数量可以是一个或多个,且标签的数量可以是可变的或固定的。在标签的数量是可变的时,前述序列化得到元数据部分的过程还可以包括:对标签的数量进行序列化,并使得标签的数量的序列化结果和标签信息的序列化结果一起按序排列。
需要说明的是,元数据部分中标签信息的序列化结果的拼接结果的排列位置,可以灵活实现。例如,如图3所示,可以在最后一个非主键列的序列化结果的拼接结果之后,依次排列标签的数量的序列化结果、标签1的序列化结果、……。需要说明的是,图3中“标签数量”是表示标签的数量的序列化结果,“标签名”是表示标签名的序列化结果,“标签长度”是指标签值的序列化结果的长度,“标签值”是指标签值的序列化结果。
步骤a2,对所述多行数据中的值进行序列化,为每个值的序列化结果拼接相应的长度数据,并使得每个值的序列化结果的拼接结果按序排列,以得到行组数据中的数据部分。
其中,为某一值的序列化结果拼接相应的长度数据后,值的序列化结果的拼接结果可以包括该值的序列化结果的长度以及该值的序列化结果。
需要说明的是,对于使得每个值的序列化结果的拼接结果按序排列的具体方式,本申请不做限定。例如,可以通过按序拼接每个值的序列化结果的拼接结果的方式,或者,可以通过按序存储每个值的序列化结果的拼接结果的方式,使得每个值的序列化结果的拼接结果按序排列。
需要说明的是,数据部分中多个值的序列化结果的拼接结果的排列顺序,可以灵活实现,每个值的序列化结果的拼接结果在数据部分中的排列位置,能够表征该值具体是表结构中哪个行列位置的值。
本申请实施例中,在多行数据对应的数据库表为非关系型数据库表时,多行数据中的值可以包括多行数据中主键列的多个值(记为第一值)和非主键列的多个值(记为第二值)。
需要说明的是,第一值和第二值的序列化结果的拼接结果的排列顺序可以灵活实现。一个实施例中,第一值和第二值的序列化结果的拼接结果,可以按照先第一值后第二值的顺序,或者,先第二值后第一值的顺序排列。从而使得主键列的值的序列化结果的拼接结果,与非主键列的值的序列化结果的拼接结果能够按照列式存储。
在此基础上,本申请实施例提供的方法还可以包括:采用不同的数据压缩算法,分别对第一值的序列化结果的拼接结果和第二值的序列化结果的拼接结果进行数据压缩。从而实现对主键列和非主键列的值的序列化结果的拼接结果采用不同的压缩算法进行压缩,有利于进一步降低网络带宽消耗。
需要说明的是,多个第一值的序列化结果的拼接结果的排列顺序,可以灵活实现。一个实施例中,多个第一值的序列化结果的拼接结果,可以按照先行后列的顺序排列。
可选的,多个第二值可以包括多行数据中非主键列中的多个非空值以及多行数据中非主键列中的空值(NULL)。
或者可选的,多个第二值可以包括多行数据中非主键列中的多个非空值,而不包括多行数据中非主键列中的空值(NULL)。在此情况下,本申请实施例提供的方法还可以包括:生成用于描述多行数据中非主键列中的非空值的位置的位图(bitmap),对位图进行序列化,并使得位图的序列化结果和值的序列化结果一起按序排列。从而使得无需在元数据部分使用NULL,由于NULL会使得反序列化过程中存在if-else,产生的CPU分支预测将影响CPU的流水线,降低CPU的利用率,因此通过非空值+位图的方式,有利于利用CPU的流水线特性提高CPU的利用率。
其中,位图的数量可以为一个或多个,位图的数量可以是可变的或固定的。在位图的数量为多个时,一个实施例中,一个位图可以对应多行数据中的一行数据,或者,另一个实施例中,一个位图可以对应多行数据中的一列数据。
在位图的数量为多个,一个位图对应多行数据中的一行数据且位图的数量可变时,序列化得到数据部分的过程还可以包括:对位图大小(bitmap size)和行数进行序列化,并使得位图大小的序列化结果、行数的序列化结果和值的序列化结果的拼接结果一起按序排列。
示例性的,如图4所示,数据部分中的排列顺序可以为:先是行数的序列化结果,再是位图大小的序列化结果,然后是位图1的序列化结果,之后是位图2的序列化结果……,之后是主键列值1的序列化结果,之后是主键列值2的序列化结果,……,之后是非主键列值1的序列化结果,之后是非主键列值2的序列化结果,……。
需要说明的是,图4所示的排列顺序仅为举例,图4中“行数”表示行数的序列化结果,“位图大小”是表示位图大小的序列化结果,位图大小的单位可以为字节(byte),“位图1”是表示位图1的序列化结果,“位图2”是表示位图2的序列化结果,“主键列值1”是表示主键列的值1的序列化结果,“主键列值2”是表示主键列的值2的序列化结果,“非主键列值1”是表示非主键列的非空值1的序列化结果,“非主键列值2”是表示非主键列的非空值2的序列化结果。
需要说明的是,非空值的序列化结果的拼接结果与位图的序列化结果的排列顺序,可以灵活实现。一个实施例中,非空值的序列化结果的拼接结果和位图的序列化结果,可以按照先非空值后位图的顺序,或者,先位图后非空值的顺序排列。从而使得非主键列的非空值的序列化结果的拼接结果,与位图的序列化结果能够按照列式存储。
在此基础上,本申请实施例提供的方法还可以包括:采用不同的数据压缩算法,分别对非空值的序列化结果的拼接结果和位图的序列化结果进行数据压缩。从而实现对位图的序列化结果和非主键列的非空值的序列化结果的拼接结果采用不同的压缩算法进行压缩,有利于进一步降低网络带宽消耗。
需要说明的是,数据部分中多个非空值的序列化结果的拼接结果的排列顺序,可以灵活实现,每个非空值的序列化结果的拼接结果在数据部分汇总的排列位置,能够表征该非空值具体是与位图中的哪个目标比特值(例如1)对应。一个实施例中,多个非空值的序列化结果的拼接结果,可以按照先行后列的顺序排列。通过多个非空值的序列化结果的拼接结果,按照先行后列的顺序排列,有利于第二计算机设备按行消费数据。
以下,参考图5至图7,对表1所示的多行数据进行序列化的过程进行举例说明。
参考图5,对于表1所示的多行数据,可以根据多行数据对应的表结构包括的多个列的列信息,序列化得到行组数据中的元数据部分,元数据部分可以位于行组数据的头部。具体的,如图6所示,图5所示行组数据中元数据部分的排列顺序可以为:先是图5所示的多行数据(也是表1所示的多行数据)中主键列的列数(即1)的序列化结果,再是图5所示的表结构中rowkey列的列信息的序列化结果的拼接结果,然后是图5所示的多行数据中非主键列的列数(即3)的序列化结果,之后是图5所示的表结构中C1列的列信息的序列化结果的拼接结果,之后是图5所示的表结构中C2列的列信息的序列化结果的拼接结果,最后是图5所示的表结构中C3列的列信息的序列化结果的拼接结果。
继续参考图5,对于前述表1所示的多行数据,可以根据多行数据中的值,序列化得到行组数据中的数据部分,数据部分可以位于元数据部分之后。并且,如图5所示,位图的序列化结果、主键列的值的序列化结果的拼接结果以及非主键列的非空值的序列化结果的拼接结果,可以按照先位图再主键列之后非空值的顺序排列。
其中,参考图7,图5所示行组数据中关于位图的排列顺序可以为:先是图5所示的四个位图中由上至下的第一个位图(即二进制数111,其与图5中多行数据中的第一行数据对应)的序列化结果,再是图5中第二个位图(即二进制数110,其与图5中多行数据中的第二行数据对应)的序列化结果,之后是图5中第三个位图(即二进制数011,其与图5中多行数据中的第三行数据对应)的序列化结果,最后是与图5中第四个位图(即二进制数011,其与图5中多行数据中的第四行数据对应)的序列化结果。
接着参考图7,图5所示行组数据中关于主键列的值的排列顺序可以为:先是图5所示的四行“主键列的值”中第一行的值(即row1)的序列化结果的拼接结果,再是图5所示的四行“主键列的值”中第二行的值(即row2)的序列化结果的拼接结果,然后是图5所示的四行“主键列的值”第三行的值(即row3)的序列化结果的拼接结果,最后是图5所示的四行“主键列的值”中第四行的值(即row4)的序列化结果的拼接结果。
继续参考图7,图5所示行组数据中关于非主键列的非空值的排列顺序可以为:先是图5所示的四行“非主键列的值”中第一行的第一个非空值(即a)的序列化结果的拼接结果,再是图5所示的四行“非主键列的值”中第一行的第二个非空值(即b)的序列化结果的拼接结果,然后是图5所示的四行“非主键列的值”中第一行的第三个非空值(即c)的序列化结果的拼接结果,之后是图5所示的四行“非主键列的值”中第二行的第一个非空值(即x)的序列化结果的拼接结果,之后是图5所示的四行“非主键列的值”中第二行的第二个非空值(即y)的序列化结果的拼接结果,之后是图5所示的四行“非主键列的值”中第三行的非空值(即z)的序列化结果的拼接结果,之后是图5所示的四行“非主键列的值”中第四行的第一个非空值(即m)的序列化结果的拼接结果,最后是图5所示的四行“非主键列的值”中第四行的第二个非空值(即n)的序列化结果的拼接结果。
另外,如图7所示,在数据部分的头部还可以包括图5所示多行数据的行数(即4)的序列化结果,以及图5所示位图的位图大小(即1)的序列化结果。
结合图5-图7可以看出,序列化得到的行组数据中消除了列名和数据类型的冗余。
需要说明的是,图6中,“1”表示十进制数1的序列化结果,“3”表示十进制数3的序列化结果,“rowkey”表示rowkey列的列信息的序列化结果的拼接结果,“C1”表示C1列的列信息的序列化结果的拼接结果,“C2”表示C2列的列信息的序列化结果的拼接结果,“C3”表示C3列的列信息的序列化结果的拼接结果。
需要说明的是,图7中,“4”表示十进制数4的序列化结果,“1”表示十进制数1的序列化结果,“111”表示二进制数111的序列化结果,“110”表示二进制数110的序列化结果,“001”表示二进制数001的序列化结果,“011”表示二进制数011的序列化结果,“row1”表示row1的序列化结果的拼接结果,“row2”表示row2的序列化结果的拼接结果,“row3”表示row3的序列化结果的拼接结果,“row4”表示row4的序列化结果的拼接结果,“a”表示a的序列化结果的拼接结果,“b”表示b的序列化结果的拼接结果,“c”表示c的序列化结果的拼接结果,“x”表示x的序列化结果的拼接结果,“y”表示y的序列化结果的拼接结果,“z”表示z的序列化结果的拼接结果,“m”表示m的序列化结果的拼接结果,“n”表示n的序列化结果的拼接结果。
需要说明的是,图6中是以列信息的序列化结果的拼接结果按照列的顺序排列为例。
需要说明的是,图7中是以第一值和第二值的序列化结果的拼接结果按照先第一值再第二值的顺序排列,位图的序列化结果和非空值的序列化结果的拼接结果按照先位图再非空值的顺序排列,多个第一值的序列化结果的拼接结果按照先行后列的顺序排列,且多个非空值的序列化结果的拼接结果按照先行后列的顺序排列为例。
本实施例提供的数据序列化方法,通过将多行数据序列化为包含元数据部分和数据部分的行组数据,元数据部分用于描述多行数据对应的表结构,数据部分用于描述多行数据中的值,实现了在序列化时对多行数据中的元数据与数据进行解耦,消除了列名和数据类型的冗余,从而减少了对数据库数据进行序列化时的数据冗余,提高了数据交互效率,降低了网络带宽的消耗。
图8为本申请一实施例提供的数据反序列化方法的流程示意图,本实施例的执行主体可以为图1中的第二计算机设备13。如图8所示,本实施例的方法可以包括:
步骤81,获取待反序列化的行组数据,所述行组数据包含元数据部分和数据部分,所述元数据部分用于描述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值;
步骤82,对所述元数据部分进行反序列化,以生成所述表结构;
步骤83,根据生成的所述表结构对所述数据部分进行解析,以确定所述数据部分所描述的值在所述表结构中的行列位置,并根据所述行列位置对所述数据部分所描述的至少部分值进行反序列化。
本申请实施例中,第二计算机设备13例如可以接收待反序列化的行组数据,当然,其他实施例中,第二计算设备13还可以通过其他方式获取待反序列化的行组数据,本申请对此不做限定。
需要说明的是,关于行组数据的具体内容可以参见前述图2所示实施例的相关描述,在此不再赘述。
本申请实施例中,在行组数据中的元数据部分包括按序排列的多个列信息的序列化结果的拼接结果时,步骤82具体可以包括如下步骤b1至步骤b4。
步骤b1,对多个列信息的序列化结果的拼接结果进行解析,得到多个列信息的序列化结果。
步骤b2,对多个列信息的序列化结果进行反序列化,得到多个列信息。
步骤b3,根据每个列信息的序列化结果的拼接结果在元数据部分中的排列位置,确定该列信息对应的列号。
步骤b4,根据多个列信息以及多个列信息分别对应的列号,生成表结构。
由于元数据部分中每个列信息的序列化结果的拼接结果在元数据部分中的排列位置,能够表征该列信息具体是表结构中哪个列的列信息,因此在步骤b3中,可以根据每个列信息的序列化结果的拼接结果在元数据部分中的排列位置,确定该列信息对应的行号。
示例性的,在多个列信息的序列化结果的拼接结果按照列的顺序排列时,排在第i个的一列信息的序列化结果的拼接结果,是表结构中第i列的列信息的序列化结果的拼接结果,从而在步骤b3中可以根据该列信息的序列化结果的拼接结果在元数据部分中的排列位置,确定该列信息对应的列号为i。
举例1,由于图6中rowkey列的列信息的序列化结果的拼接结果是排在多个列信息的序列化结果的拼接结果中的第一个,因此根据rowkey列的列信息的序列化结果的拼接结果在元数据部分中的排列位置,可以确定rowkey列对应的列号为1,即确定rowkey列是表结构中的第一列;由于图6中C1列的列信息的序列化结果的拼接结果是排在多个列信息的序列化结果的拼接结果中的第二个,因此根据C1列的列信息的序列化结果的拼接结果在元数据部分中的排列位置,可以确定C1列对应的列号为2,即确定C1列是表结构中的第二列;……,从而生成图5所示的表结构。
本申请实施例中,在行组数据中的元数据部分还包括按序排列的两个列数的序列化结果时,步骤82还可以包括如下步骤b5-步骤b7。
步骤b5,对元数据部分中的两个列数的序列化结果进行反序列化,得到两个列数;
步骤b6,根据每个列数的序列化结果在元数据部分中的排列位置,确定该列数是主键列的列数还是非主键列的列数;
步骤b7,根据确定的主键列的列数和非主键列的列数,设置所生成的表结构中的主键和非主键。
由于元数据部分中每个列数的序列化结果的拼接结果在元数据部分中的排列位置,能够表征该列数具体是表结构中主键列的列数还是非主键列的列数,因此在步骤b6中,可以根据每个列数的序列化结果在元数据部分中的排列位置,确定该列数是主键列的列数还是非主键列的列数。
示例性的,在两个列数的序列化结果按照先主键列再非主键列的顺序排列时,排在第一个的一列数的序列化结果,是表结构中主键列的列数的序列化结果,排在第二个的另一列数的序列化结果,是表结构中非主键列的列数的序列化结果,从而可以根据某一列数的序列化结果的在元数据部分中的排列位置,确定该列数是主键列的列数还是非主键列的列数。
举例2,在例1的基础上,由于图6中1的序列化结果是排在1和3两个列数的序列化结果中的第一个,因此根据1和3两个的序列化结果在元数据部分中的排列位置,可以确定1是主键列的列数,3是非主键列的列数。进一步的,在步骤b7中可以将生成的如图5所示的表结构中的rowkey设置为主键,C1、C2和C3设置为非主键。
本申请实施例中,在行组数据中数据部分包括按序排列的多个值的序列化结果的拼接结果时,步骤83可以包括如下步骤c1和步骤c2。
步骤c1,对多个值的序列化结果的拼接结果进行解析,得到多个值的序列化结果;
步骤c2,根据表结构以及每个值的序列化结果的拼接结果在数据部分中的排列位置,确定该值的序列化结果与表结构中行列位置的对应关系。
由于数据部分中每个值的序列化结果的拼接结果在数据部分中的排列位置,能够表征该值具体是表结构中哪个行列位置的值,因此在步骤c2中,可以根据表结构以及每个值的序列化结果的拼接结果在数据部分中的排列位置,确定该值的序列化结果与表结构中行列位置的对应关系。
一个实施例中,在多个值包括多行数据中主键列的多个第一值和非主键列的多个第二值,且第一值和第二值的序列化结果的拼接结果,按照先第一值后第二值或者先第二值后第一值的顺序排列时,在步骤c2中确定每个第一值的序列化结果与表结构中行列位置的对应关系,具体可以包括:将拼接结果是由前至后排列的多个第一值的序列化结果,按照目标顺序依次对应到表结构的主键列中,以得到每个第一值的序列化结果与表结构中行列位置的对应关系。
可以理解的是,目标顺序与数据部分中多个第一值的序列化结果的拼接结果的排列顺序有关。示例性的,在多个第一值的序列化结果的拼接结果按照先行后列的顺序排列时,目标顺序可以包括先行后列的顺序。
举例3,在例1和例2的基础上,由于所生成的图5所示的表结构中rowkey列为主键列,因此将图6中拼接结果是由前至后排列的row1、row2、row3和row4的序列化结果,按照先行后列的顺序依次对应到表结构的主键列中,可以实现将row1的序列化结果对应到rowkey列中的第一行,将row2的序列化结果对应到rowkey列中的第二行,将row3的序列化结果对应到rowkey列中的第三行,将row4的序列化结果对应到rowkey列中的第四行。
进一步的,在第一值的序列化后结果的拼接结果和第二值的序列化结果的拼接结果,是采用不同的数据压缩算法进行数据压缩时,本申请实施例提供的方法还可以包括:采用不同的数据压缩算法,分别对压缩后的第一值的序列化结果的拼接结果和压缩后的第二值的序列化结果的拼接结果进行数据解压缩。
一个实施例中,多个第二值可以包括多行数据中非主键列中的多个非空值,行组数据中的数据部分还可以包括位图的序列化结果时,在步骤c2中确定每个第二值的序列化结果与表结构中行列位置的对应关系,具体可以包括如下步骤c21至步骤c23。
步骤c21,对位图的序列化结果进行反序列化,得到位图;
步骤c22,根据表结构,确定位图中代表非空值的每个目标比特值与表结构中行列位置的对应关系;
步骤c23,根据每个非空值的序列化结果的拼接结果在数据部分中的排列位置,确定该非空值的序列化结果对应的目标比特值,以得到非空值的序列化结果与表结构中行列位置的对应关系。
示例性的,目标比特值可以为1,例如在图5所示的位图中,是由1代表非空值,并由0代表空值。
由于位图是用于描述多行数据中非主键列的非空值的位置,因此在步骤c22中,可以根据多行数据对应的表结构确定位图中每个目标比特位与表结构中行列位置的对应关系。
进一步的,由于数据部分中每个非空值的序列化结果的拼接结果在数据部分中的排列位置,能够表征该非空值具体是与位图中的哪个目标比特值对应,因此在步骤c23中,可以根据每个非空值的序列化结果的拼接结果在数据部分中的排列位置,确定该非空值的序列化结果对应的目标比特值,并由此得到该非空值的序列化结果与表结构中行列位置的对应关系。
本申请实施例中,非空值的序列化结果的拼接结果和位图的序列化结果,可以按照先非空值后位图的顺序,或者,先位图后非空值的顺序排列。
进一步的,在非空值的序列化结果的拼接结果和位图的序列化结果,是采用不同的数据压缩算法进行数据压缩时,本申请实施例提供的方法还可以包括:采用不同的数据解压缩算法,分别对压缩后的非空值的序列化结果的拼接结果和压缩后的位图的序列化结果进行数据解压缩。
示例性的,在位图的数量为多个,一个位图对应多行数据中的一行数据,且多个位图的序列化结果按照行的顺序排列时,步骤c22具体可以包括如下步骤c221和c222。
步骤c221,将序列化结果是由前至后排列的多个位图,按照行的顺序依次对应到表结构中,以得到每个位图与表结构中行位置的对应关系;
步骤c222,根据每个位图中的比特值排序,确定该位图中目标比特值与表结构中非主键列的对应关系。
举例4,在例1的基础上,将图6所示的序列化结果是由前至后排列的4个位图,按照行的顺序依次对应到表结构的非主键列中,可以实现将二进制数111表示的位图对应到图5所示表结构中的第一行,将二进制数110表示的位图对应到图5所示表结构中的第二行,将二进制数011表示的位图对应到图5所示表结构中的第三行,并将二进制数011表示的位图对应到图5所示表结构中的第四行。
举例5,在例2的基础上,根据二进制数111表示的位图中的比特值排序,可以确定二进制数111中排在第一个的“1”与图5所示表结构中的C1列对应,二进制数111中排在第二个的“1”与图5所示表结构中的C2列对应,二进制数111中排在第三个的“1”与图5所示表结构中的C3列对应。
结合例4和例5可以得到:二进制数111表示的位图中排在第一个的“1”对应表结构中C1列中的第一行;二进制数111表示的位图中排在第二个的“1”对应表结构中C2列中的第一行;二进制数111表示的位图中排在第三个的“1”对应表结构中C3列中的第一行。
可以理解的是,步骤c23确定非空值的序列化结果对应的目标比特值的具体方式,既与单个位图与多行数据的对应关系以及多个位图的序列化结果在数据部分中的排序有关,又与非空值的序列化结果的拼接结果在数据部分中的排序有关。
示例性的,在步骤c221和步骤c222的基础上,当多个非空值的序列化结果的拼接结果,按照先行后列的顺序排列时,步骤c23具体可以包括:将拼接结果是由前至后排列的多个非空值的序列化结果,依次对应到序列化结果是由前至后排列的多个位图中的目标比特值。
举例6,在例4和例5的基础上,将图6中拼接结果是由前至后排列的a、b、c、x、y、z、m和n的序列化结果,依次对应到图6中序列化结果是由前至后排列的多个位图中的目标比特值,可以实现将二进制数111中的第一个“1”与a的序列化结果对应,将二进制数111中的第二个“1”与b的序列化结果对应,将二进制数111中的第三个“1”与c的序列化结果对应,将二进制110中的第一个“1”与x的序列化结果对应,将二进制110中的第二个“1”与y的序列化结果对应,将二进制011中的“1”与z的序列化结果对应,将二进制011中的第一个“1”与m的序列化结果对应,将二进制110中的第二个“1”与n的序列化结果对应。
本申请实施例中,在确定数据部分所描述的值在表结构中的行列位置之后,即在确定数据部分中值的序列化结果与表结构中行列位置的对应关系之后,可以根据行列位置对数据部分所描述的至少部分值进行反序列化。
例如,如果只需要使用图5所示多行数据中的C1列的值时,可以选择根据与a的序列化结果对应的表结构中的行列位置,对a的序列化结果进行反序列化,并根据与x的序列化结果对应的表结构中的行列位置,对x的序列化结果进行反序列化,而无需对b、c、y、z、m和n的序列化结果进行反序列化。通过减少需要序列化的值数量,减少了需要创建的对象的数量以及并复制操作的数量,从而有利于减少对于第二计算机设备的CPU资源的消耗。
本申请实施例提供的反序列化方法,通过对元数据部分进行反序列化,以生成表结构,根据生成的表结构对数据部分进行解析,以确定数据部分所描述的值在表结构中的行列位置,并根据行列位置对数据部分所描述的至少部分值进行反序列化,使得第二计算机设备能够对第一计算机设备序列化得到的行组数据进行反序列化。另外,通过根据行列位置对数据部分所描述的至少部分值进行反序列化,有利于减少对于第二计算机设备的CPU资源的消耗。
图9为本申请一实施例提供的数据序列化装置的结构示意图;参考附图9所示,本实施例提供了一种数据序列化装置,该装置可以执行上述的方法图2所示的数据序列化方法,具体的,该装置可以包括:
确定模块91,用于确定待序列化的多行数据;
序列化模块92,用于将所述多行数据序列化为包含元数据部分和数据部分的行组数据,所述元数据部分用于描述所述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值。
可选的,所述表结构包括所述多个列的列信息,所述序列化模块92具体用于:
对所述表结构中的多个列信息进行序列化,为每个列信息的序列化结果拼接相应的长度数据,并使得每个列信息的序列化结果的拼接结果按序排列,以得到行组数据中的元数据部分;
对所述多行数据中的值进行序列化,为每个值的序列化结果拼接相应的长度数据,并使得每个值的序列化结果的拼接结果按序排列,以得到行组数据中的数据部分。
可选的,所述多行数据对应的数据库表为非关系型数据库表,所述表结构还包括主键列的列数和非主键列的列数;
所述序列化模块92,还用于对所述表结构中的主键列的列数和非主键列的列数进行序列化,并使得所述主键列的列数的序列化结果、所述非主键列的列数的序列化结果和所述列信息的序列化结果的拼接结果一起按序排列。
可选的,所述多行数据中的值包括所述多行数据中主键列的多个第一值和非主键列的多个第二值,且所述第一值和所述第二值的序列化结果的拼接结果,按照先第一值后第二值的顺序,或者,先第二值后第一值的顺序排列。
可选的,所述装置还包括压缩模块,用于采用不同的数据压缩算法,分别对所述第一值的序列化结果的拼接结果和所述第二值的序列化结果的拼接结果进行数据压缩。
可选的,所述多个第一值的序列化结果的拼接结果,按照先行后列的顺序排列。
可选的,所述多个第二值包括所述多行数据中非主键列中的多个非空值;
所述序列化模块92,还用于生成用于描述所述多行数据中非主键列中的非空值的位置的位图,对所述位图进行序列化,并将所述位图的序列化结果和所述列信息的序列化结果的拼接结果一起按序排列。
可选的,所述非空值的序列化结果的拼接结果和所述位图的序列化结果,按照先非空值后位图的顺序,或者,先位图后非空值的顺序排列。
可选的,所述压缩模块,还用于采用不同的数据压缩算法,分别对所述非空值的序列化结果的拼接结果和所述位图的序列化结果进行数据压缩。
可选的,所述多个非空值的序列化结果的拼接结果,按照先行后列的顺序排列。
可选的,所述位图的数量为多个,一个所述位图对应所述多行数据中的一行数据,多个所述位图的序列化结果按照行的顺序排列。
图9所示装置可以执行图2所示实施例的方法,本实施例未详细描述的部分,可参考对图2所示实施例的相关说明。该技术方案的执行过程和技术效果参见图2所示实施例中的描述,在此不再赘述。
在一个可能的实现中,图9所示装置的结构可实现为一计算机设备。如图10所示,该计算机设备可以包括:处理器101和存储器102。其中,存储器102用于存储支持计算机设备执行上述图2所示实施例中提供的方法的程序,处理器101被配置为用于执行存储器102中存储的程序。
程序包括一条或多条计算机指令,其中,一条或多条计算机指令被处理器101执行时能够实现如下步骤:
确定待序列化的多行数据,每行数据对应多个列;
将所述多行数据序列化为包含元数据部分和数据部分的行组数据,所述元数据部分用于描述所述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值。
可选的,处理器101还用于执行前述图2所示实施例中的全部或部分步骤。
其中,计算机设备的结构中还可以包括通信接口103,用于计算机设备与其他设备或通信网络通信。
图11为本申请一实施例提供的数据反序列化装置的结构示意图;参考附图11所示,本实施例提供了一种数据反序列化装置,该装置可以执行上述的方法图8所示的数据反序列化方法,具体的,该装置可以包括:
获取模块111,用于获取待反序列化的行组数据,所述行组数据包含元数据部分和数据部分,所述元数据部分用于描述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值;
元数据反序列化模块112,用于对所述元数据部分进行反序列化,以生成所述表结构;
数据反序列化模块113,用于根据生成的所述表结构对所述数据部分进行解析,以确定所述数据部分所描述的值在所述表结构中的行列位置,并根据所述行列位置对所述数据部分所描述的至少部分值进行反序列化。
可选的,所述元数据部分包括按序排列的多个列信息的序列化结果的拼接结果,所述多个列信息的序列化结果的拼接结果是通过对每个列信息的序列化结果拼接相应的长度数据得到;
所述元数据反序列化模块112具体用于:对所述多个列信息的序列化结果的拼接结果进行解析,得到多个列信息的序列化结果;对所述多个列信息的序列化结果进行反序列化,得到所述多个列信息;根据每个列信息的序列化结果的拼接结果在所述元数据部分中的排列位置,确定所述列信息对应的列号;以及,根据所述多个列信息以及所述多个列信息分别对应的列号,生成所述表结构。
可选的,所述元数据部分还包括按序排列的两个列数的序列化结果;
所述元数据反序列化模块112还用于:对所述元数据部分中的两个列数的序列化结果进行反序列化,得到两个列数;根据每个列数的序列化结果在所述元数据部分中的排列位置,确定所述列数是主键列的列数还是非主键列的列数;以及,根据确定的主键列的列数和非主键列的列数,设置所生成的表结构中的主键和非主键。
可选的,所述数据部分包括按序排列的多个值的序列化结果的拼接结果,所述多个值的序列化结果的拼接结果是通过对每个值的序列化结果拼接相应的长度数据得到;所述数据反序列化模块113用于根据生成的所述表结构对所述数据部分进行解析,以确定所述数据部分所描述的值在所述表结构中的行列位置,具体包括:对所述多个值的序列化结果的拼接结果进行解析,得到所述多个值的序列化结果;以及,根据所述表结构以及每个值的序列化结果的拼接结果在所述数据部分中的排列位置,确定所述值的序列化结果与所述表结构中行列位置的对应关系。
可选的,所述多个值包括所述多行数据中主键列的多个第一值和非主键列的多个第二值,且所述第一值和所述第二值的序列化结果的拼接结果,按照先第一值后第二值的顺序,或者,先第二值后第一值的顺序排列;
所述数据反序列化模块113用于根据所述表结构以及每个第一值的序列化结果的拼接结果在所述数据部分中的排列位置,确定所述第一值的序列化结果与所述表结构中行列位置的对应关系,具体包括:
将拼接结果是由前至后排列的所述多个第一值的序列化结果,按照目标顺序依次对应到所述表结构的主键列中,以得到每个第一值的序列化结果与所述表结构中行列位置的对应关系。
可选的,所述多个第一值的序列化结果的拼接结果按照先行后列的顺序排列,所述目标顺序包括先行后列的顺序。
可选的,所述第一值的序列化后结果的拼接结果和所述第二值的序列化结果的拼接结果,是采用不同的数据压缩算法进行数据压缩;
所述装置还包括解压缩模块,用于采用不同的数据压缩算法,分别对压缩后的所述第一值的序列化结果的拼接结果和压缩后的所述第二值的序列化结果的拼接结果进行数据解压缩。
可选的,所述多个第二值包括所述多行数据中非主键列中的多个非空值,所述数据部分还包括位图的序列化结果,所述位图用于描述所述多行数据中非主键列中的非空值的位置;
所述数据反序列化模块113用于根据所述表结构以及每个第二值的序列化结果的拼接结果在所述数据部分中的排列位置,确定所述第二值的序列化结果与所述表结构中行列位置的对应关系,具体包括:
对所述位图的序列化结果进行反序列化,得到所述位图;根据所述表结构,确定所述位图中代表非空值的每个目标比特值与所述表结构中行列位置的对应关系;以及,根据每个非空值的序列化结果的拼接结果在所述数据部分中的排列位置,确定所述非空值的序列化结果对应的目标比特值,以得到所述非空值的序列化结果与所述表结构中行列位置的对应关系。
可选的,所述非空值的序列化结果的拼接结果和所述位图的序列化结果,按照先非空值后位图的顺序,或者,先位图后非空值的顺序排列。
可选的,所述非空值的序列化结果的拼接结果和所述位图的序列化结果,是采用不同的数据压缩算法进行数据压缩;
所述解压缩模块,还用于采用不同的数据解压缩算法,分别对压缩后的所述非空值的序列化结果的拼接结果和压缩后的所述位图的序列化结果进行数据解压缩。
可选的,所述位图的数量为多个,一个所述位图对应所述多行数据中的一行数据,且多个所述位图的序列化结果按照行的顺序排列;
所述数据反序列化模块113用于根据所述表结构,确定所述位图中代表非空值的每个目标比特值与所述表结构中行列位置的对应关系,具体包括:
将序列化结果是由前至后排列的多个所述位图,按照行的顺序依次对应到所述表结构中,以得到每个位图与所述表结构中行位置的对应关系;以及,根据每个位图中的比特值排序,确定所述位图中目标比特值与所述表结构中非主键列的对应关系。
可选的,所述多个非空值的序列化结果的拼接结果,按照先行后列的顺序排列;所述数据反序列化模块113用于根据每个非空值的序列化结果的拼接结果在所述数据部分中的排列位置,确定所述非空值的序列化结果对应的目标比特位,具体包括:将拼接结果是由前至后排列的所述多个非空值的序列化结果,依次对应到序列化结果是由前至后排列的多个所述位图中的目标比特值。
图11所示装置可以执行图8所示实施例的方法,本实施例未详细描述的部分,可参考对图8所示实施例的相关说明。该技术方案的执行过程和技术效果参见图8所示实施例中的描述,在此不再赘述。
在一个可能的实现中,图11所示装置的结构可实现为一计算机设备。如图12所示,该计算机设备可以包括:处理器121和存储器122。其中,存储器122用于存储支持计算机设备执行上述图8所示实施例中提供的方法的程序,处理器121被配置为用于执行存储器122中存储的程序。
程序包括一条或多条计算机指令,其中,一条或多条计算机指令被处理器121执行时能够实现如下步骤:
获取待反序列化的行组数据,所述行组数据包含元数据部分和数据部分,所述元数据部分用于描述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值;
对所述元数据部分进行反序列化,以生成所述表结构;
根据生成的所述表结构对所述数据部分进行解析,以确定所述数据部分所描述的值在所述表结构中的行列位置,并根据所述行列位置对所述数据部分所描述的至少部分值进行反序列化。
可选的,处理器121还用于执行前述图8所示实施例中的全部或部分步骤。
其中,计算机设备的结构中还可以包括通信接口123,用于计算机设备与其他设备或通信网络通信。
另外,本申请实施例还提供一种计算机存可读储介质,其上存储有计算机程序,当所述计算机程序被执行时,实现如图2所示方法实施例所述的方法。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序被执行时,实现如图8所示方法实施例所述的方法。
本申请实施例还提供一种计算机程序产品,包括计算机程序指令,当所述指令由处理器执行时,实现如图2所示方法实施例所述的方法。
本申请实施例还提供一种计算机程序产品,包括计算机程序指令,当所述指令由处理器执行时,实现如图8所示方法实施例所述的方法。
本申请实施例还提供一种数据交互系统,包括第一计算机设备和第二计算机设备,所述第一计算机设备用于执行图2所示实施例所述的方法,所述第二计算机设备用于执行图8所示实施例所述的方法。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助加必需的通用硬件平台的方式来实现,当然也可以通过硬件和软件结合的方式来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以计算机产品的形式体现出来,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程设备的处理器以产生一个机器,使得通过计算机或其他可编程设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、链表、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器 (CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (14)
1.一种数据序列化方法,包括:
确定待序列化的多行数据,每行数据对应多个列;
将所述多行数据序列化为包含元数据部分和数据部分的行组数据,所述元数据部分用于描述所述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值。
2.根据权利要求1所述的方法,所述表结构包括所述多个列的列信息,所述将所述多行数据序列化为包含元数据部分和数据部分的行组数据,包括:
对所述表结构中的多个列信息进行序列化,为每个列信息的序列化结果拼接相应的长度数据,并使得每个列信息的序列化结果的拼接结果按序排列,以得到行组数据中的元数据部分;
对所述多行数据中的值进行序列化,为每个值的序列化结果拼接相应的长度数据,并使得每个值的序列化结果的拼接结果按序排列,以得到行组数据中的数据部分。
3.根据权利要求2所述的方法,所述多行数据对应的数据库表为非关系型数据库表,所述表结构还包括主键列的列数和非主键列的列数;
序列化得到所述元数据部分的过程,还包括:对所述表结构中的主键列的列数和非主键列的列数进行序列化,并使得所述主键列的列数的序列化结果、所述非主键列的列数的序列化结果和所述列信息的序列化结果的拼接结果一起按序排列。
4.根据权利要求3所述的方法,所述多行数据中的值包括所述多行数据中主键列的多个第一值和非主键列的多个第二值,且所述第一值和所述第二值的序列化结果的拼接结果,按照先第一值后第二值的顺序,或者,先第二值后第一值的顺序排列。
5.根据权利要求4所述的方法,所述多个第二值包括所述多行数据中非主键列中的多个非空值;所述方法还包括:生成用于描述所述多行数据中非主键列中的非空值的位置的位图,对所述位图进行序列化,并将所述位图的序列化结果和所述列信息的序列化结果的拼接结果一起按序排列。
6.一种数据反序列化方法,包括:
获取待反序列化的行组数据,所述行组数据包含元数据部分和数据部分,所述元数据部分用于描述多行数据对应的表结构,所述数据部分用于描述所述多行数据中的值;
对所述元数据部分进行反序列化,以生成所述表结构;
根据生成的所述表结构对所述数据部分进行解析,以确定所述数据部分所描述的值在所述表结构中的行列位置,并根据所述行列位置对所述数据部分所描述的至少部分值进行反序列化。
7.根据权利要求6所述的方法,所述元数据部分包括按序排列的多个列信息的序列化结果的拼接结果,所述多个列信息的序列化结果的拼接结果是通过对每个列信息的序列化结果拼接相应的长度数据得到;
所述对所述元数据部分进行反序列化,以生成所述表结构,包括:
对所述多个列信息的序列化结果的拼接结果进行解析,得到多个列信息的序列化结果;
对所述多个列信息的序列化结果进行反序列化,得到所述多个列信息;
根据每个列信息的序列化结果的拼接结果在所述元数据部分中的排列位置,确定所述列信息对应的列号;
根据所述多个列信息以及所述多个列信息分别对应的列号,生成所述表结构;
所述数据部分包括按序排列的多个值的序列化结果的拼接结果,所述多个值的序列化结果的拼接结果是通过对每个值的序列化结果拼接相应的长度数据得到;
所述根据生成的所述表结构对所述数据部分进行解析,以确定所述数据部分所描述的值在所述表结构中的行列位置,包括:
对所述多个值的序列化结果的拼接结果进行解析,得到所述多个值的序列化结果;
根据所述表结构以及每个值的序列化结果的拼接结果在所述数据部分中的排列位置,确定所述值的序列化结果与所述表结构中行列位置的对应关系。
8.根据权利要求7所述的方法,所述元数据部分还包括按序排列的两个列数的序列化结果;
所述对所述元数据部分进行反序列化,以生成所述表结构,还包括:
对所述元数据部分中的两个列数的序列化结果进行反序列化,得到两个列数;
根据每个列数的序列化结果在所述元数据部分中的排列位置,确定所述列数是主键列的列数还是非主键列的列数;
根据确定的主键列的列数和非主键列的列数,设置所生成的表结构中的主键和非主键。
9.根据权利要求7所述的方法,所述多个值包括所述多行数据中主键列的多个第一值和非主键列的多个第二值,且所述第一值和所述第二值的序列化结果的拼接结果,按照先第一值后第二值的顺序,或者,先第二值后第一值的顺序排列;
根据所述表结构以及每个第一值的序列化结果的拼接结果在所述数据部分中的排列位置,确定所述第一值的序列化结果与所述表结构中行列位置的对应关系,包括:
将拼接结果是由前至后排列的所述多个第一值的序列化结果,按照目标顺序依次对应到所述表结构的主键列中,以得到每个第一值的序列化结果与所述表结构中行列位置的对应关系。
10.根据权利要求9所述的方法,所述多个第二值包括所述多行数据中非主键列中的多个非空值,所述数据部分还包括位图的序列化结果,所述位图用于描述所述多行数据中非主键列中的非空值的位置;
根据所述表结构以及每个第二值的序列化结果的拼接结果在所述数据部分中的排列位置,确定所述第二值的序列化结果与所述表结构中行列位置的对应关系,包括:
对所述位图的序列化结果进行反序列化,得到所述位图;
根据所述表结构,确定所述位图中代表非空值的每个目标比特值与所述表结构中行列位置的对应关系;
根据每个非空值的序列化结果的拼接结果在所述数据部分中的排列位置,确定所述非空值的序列化结果对应的目标比特值,以得到所述非空值的序列化结果与所述表结构中行列位置的对应关系。
11.一种计算机设备,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现如权利要求1至10中任一项所述的方法。
12.一种数据交互系统,包括第一计算机设备和第二计算机设备,所述第一计算机设备用于执行权利要求1至5中任一项所述的方法,所述第二计算机设备用于执行权利要求6至10中任一项所述的方法。
13.一种计算机程序产品,包括计算机程序指令,当所述指令由处理器执行时,实现如权利要求1至10中任一项所述的方法。
14.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序被执行时,实现如权利要求1至10任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110854592.3A CN113312344B (zh) | 2021-07-28 | 2021-07-28 | 数据序列化、反序列化方法、设备、系统、介质及产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110854592.3A CN113312344B (zh) | 2021-07-28 | 2021-07-28 | 数据序列化、反序列化方法、设备、系统、介质及产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113312344A true CN113312344A (zh) | 2021-08-27 |
CN113312344B CN113312344B (zh) | 2022-01-04 |
Family
ID=77381784
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110854592.3A Active CN113312344B (zh) | 2021-07-28 | 2021-07-28 | 数据序列化、反序列化方法、设备、系统、介质及产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113312344B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114500647A (zh) * | 2022-01-18 | 2022-05-13 | 聚好看科技股份有限公司 | 一种数据传输方法及装置 |
CN115563638A (zh) * | 2022-11-15 | 2023-01-03 | 阿里云计算有限公司 | 数据处理方法、系统、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104077335A (zh) * | 2013-05-07 | 2014-10-01 | 腾讯科技(深圳)有限公司 | 一种结构化数据的序列化、反序列化方法、装置和系统 |
CN106326377A (zh) * | 2016-08-15 | 2017-01-11 | 东软集团股份有限公司 | 序列化方法、反序列化方法、装置和系统 |
CN107451237A (zh) * | 2017-07-26 | 2017-12-08 | 阿里巴巴集团控股有限公司 | 序列化与反序列化方法、装置及设备 |
US20190042603A1 (en) * | 2017-08-01 | 2019-02-07 | Sungho Park | Automated Generation of Data Schemata for Application Programming Interfaces |
CN111190896A (zh) * | 2019-08-16 | 2020-05-22 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、存储介质和计算机设备 |
CN111190895A (zh) * | 2018-11-15 | 2020-05-22 | 百度在线网络技术(北京)有限公司 | 列式存储数据的组织方法、装置及存储介质 |
-
2021
- 2021-07-28 CN CN202110854592.3A patent/CN113312344B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104077335A (zh) * | 2013-05-07 | 2014-10-01 | 腾讯科技(深圳)有限公司 | 一种结构化数据的序列化、反序列化方法、装置和系统 |
CN106326377A (zh) * | 2016-08-15 | 2017-01-11 | 东软集团股份有限公司 | 序列化方法、反序列化方法、装置和系统 |
CN107451237A (zh) * | 2017-07-26 | 2017-12-08 | 阿里巴巴集团控股有限公司 | 序列化与反序列化方法、装置及设备 |
US20190042603A1 (en) * | 2017-08-01 | 2019-02-07 | Sungho Park | Automated Generation of Data Schemata for Application Programming Interfaces |
CN111190895A (zh) * | 2018-11-15 | 2020-05-22 | 百度在线网络技术(北京)有限公司 | 列式存储数据的组织方法、装置及存储介质 |
CN111190896A (zh) * | 2019-08-16 | 2020-05-22 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、存储介质和计算机设备 |
Non-Patent Citations (3)
Title |
---|
AFSARI K: "JavaScript Object Notation (JSON) data serialization for IFC schema in web-based BIM data exchange", 《AUTOMATION IN CONSTRUCTION》 * |
大数据技术架构: "再来聊一聊Parquet列式存储格式", 《知乎(HTTPS://ZHUANLAN.ZHIHU.COM/P/141908285)》 * |
李鸯: "嵌套列存数据存储设计及其查询更新优化研究", 《中国优秀博硕士学位论文全文数据库(硕士)》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114500647A (zh) * | 2022-01-18 | 2022-05-13 | 聚好看科技股份有限公司 | 一种数据传输方法及装置 |
CN115563638A (zh) * | 2022-11-15 | 2023-01-03 | 阿里云计算有限公司 | 数据处理方法、系统、设备及存储介质 |
CN115563638B (zh) * | 2022-11-15 | 2023-04-18 | 阿里云计算有限公司 | 数据处理方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113312344B (zh) | 2022-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113312344B (zh) | 数据序列化、反序列化方法、设备、系统、介质及产品 | |
US20220261694A1 (en) | System and Methods for Distributed Machine Learning with Multiple Data Sources, Multiple Programming Languages or Frameworks, and Multiple Devices or Infrastructures | |
US11379499B2 (en) | Method and apparatus for executing distributed computing task | |
CN112559606A (zh) | 用于json格式数据的转换方法及转换装置 | |
CN114416868B (zh) | 一种数据同步方法、装置、设备及存储介质 | |
CN110888972A (zh) | 一种基于Spark Streaming的敏感内容识别方法及装置 | |
CN112612427B (zh) | 一种车辆停靠点数据处理方法、装置、存储介质及终端 | |
CN114647409A (zh) | 大屏可视化应用创建平台、方法、计算设备和存储介质 | |
CN118113766A (zh) | 批量数据处理方法、装置、设备及介质 | |
CN117708164A (zh) | 基于并行处理数据库的数据存储方法、装置和设备 | |
CN117271478A (zh) | 数据迁移方法、装置、存储介质以及电子设备 | |
CN116821533A (zh) | 页面渲染方法、计算机设备和计算机可读存储介质 | |
CN112579676A (zh) | 异构系统间的数据处理方法、装置、存储介质和设备 | |
CN108241624B (zh) | 一种查询脚本的生成方法及装置 | |
RU2715803C2 (ru) | Система компонентно-ориентированного программного обеспечения и способ разработки | |
CN112214497A (zh) | 一种标签的处理方法、装置及计算机系统 | |
CN113312075A (zh) | 配置信息下发方法、装置、存储介质及处理器 | |
CN111723251A (zh) | 一种图数据库数据导入的方法、系统及设备 | |
CN112528593A (zh) | 文档处理方法、装置、电子设备及存储介质 | |
CN117251250B (zh) | 基于云原生平台的容器管理方法及相关设备 | |
CN115686939B (zh) | 数据备份方法、装置、计算机设备和存储介质 | |
CN117369920A (zh) | 文本展示方法、装置、计算机设备、存储介质 | |
WO2023033726A2 (en) | Method and apparatus for processing data, and server and storage medium thereof | |
CN115470278A (zh) | 对账文件导入方法、装置、存储介质及处理器 | |
CN118820229A (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 |