一种SSTable文件数据处理方法及其系统技术方案

技术编号:8959417 阅读:126 留言:0更新日期:2013-07-25 18:58
本申请公开了一种SSTable文件数据处理方法及其系统,其中,SSTable文件中设置有架构表,其中定义有所述SSTable文件行数据的列顺序和列属性信息,该方法包括:读取待写入到SSTable文件的行数据;在SSTable文件中写入行主键,并根据所述SSTable文件的架构表中定义的行数据的列顺序和列属性信息,对应所述行主键写入读取到的行数据的各列数据。采用本申请在对SSTable文件进行数据处理时,根据该架构表进行数据读写处理,从而实现了行数据的存储只需存储行主键和列值,列值按照架构表中规定的顺序进行存放,不必存储列名或列ID等信息,减少了存储数据量。

【技术实现步骤摘要】

本申请涉及通信
,特别是涉及一种SSTable文件数据处理方法及其系统
技术介绍
SSTable (Sorted String Table,排序字符串表),其本质上是一种文件格式,用于存储有序的Key-Value数据到磁盘上,每个SSTable文件由多个块组成,一旦完成写入,不能修改,只能读取。目前在分布式数据库中常用SSTable的格式存储有序的Key-Value数据,Key-Value数据都以字符串形式存储,每个SSTable中包含许多行,一定数量的行构成一个块,每行包含一个主键(RowKey)和行数据,行数据一般包含若干列,每列以列名为主键Key,列值为Value。图1示出了一种SSTable文件的行数据存储格式。SSTable文件一般只支持稀疏存储格式。向SSTable文件写入行数据时,首先写入行主键,然后写入该行中列值不为空的列,列值为空的列不写入,不占用存储空间。这种稀疏存储方式,每行中包含的列数量不确定,并且相同的列名在不同的行中反复被存储多次,造成存储空间的浪费,特别是对行中列数量确定,且每行中大多数的列都不为空的应用。
技术实现思路
本申请实施例提供了一种基于SSTable文件格式的数据处理方法及其系统,用以解决现有SSTable文件数据存储机制浪费存储空间的问题。本申请实施例提供的一种SSTable文件数据处理方法中,SSTable文件中设置有架构表,其中定义有所述SSTable文件行数据的列顺序和列属性信息,该方法包括:读取待写入到SSTable文件的行数据;在SSTable文件中写入行主键,并根据所述SSTable文件的架构表中定义的行数据的列顺序和列属性信息,对应所述行主键写入读取到的行数据的各列数据。本申请实施例提供的另一种SSTable文件数据处理方法中,SSTable文件中设置有架构表,其中定义有所述SSTable文件行数据的列顺序和列属性信息,该方法包括:接收对SSTable文件的数据查询请求;根据所述SSTable文件中的架构表,查询所请求查询的列数据;返回查询响应,其中携带有查询到的列数据。本申请实施例提供的一种SSTable文件数据处理系统中,SSTable文件中设置有架构表,其中定义有所述SSTable文件行数据的列顺序和列属性信息,该系统包括:读取模块,用于读取待写入到SSTable文件的行数据;存储模块,用于在SSTable文件中写入行主键,并根据所述SSTable文件的架构表中定义的行数据的列顺序和列属性信息,对应所述行主键写入读取到的行数据的各列数据。本申请实施例提供的一种SSTable文件数据处理系统中,SSTable文件中设置有架构表,其中定义有所述SSTable文件行数据的列顺序和列属性信息,该系统包括:接收模块,用于接收对SSTable文件的数据查询请求;查询模块,用于根据所述SSTable文件中的架构表,查询所请求查询的列数据;返回模块,用于返回查询响应,其中携带有查询到的列数据。本申请的上述实施例中,由于SSTable文件中设置有架构表,其中定义有所述SSTable文件行数据的列顺序和列属性信息,在对SSTable文件进行数据处理时,根据该架构表进行数据读写处理,从而实现了行数据的存储只需存储行主键和列值,列值按照架构表中规定的顺序进行存放,不必存储列名或列ID等信息,减少了存储数据量。附图说明图1为现有技术中SSTable文件的行数据存储格式示意图;图2为本申请实施例提供的SSTable文件数据存储格式示意图;图3为本申请实施例提供的结构表的存储格式示意图;图4为本申请实施例提供的向SSTable文件写入数据的流程示意图;图5为本申请实施例提供的从SSTable文件读取数据的流程示意图;图6为本申请实施例提供的SSTable文件数据处理系统结构图之一;图7为本申请实施例提供的SSTable文件数据处理系统结构图之二 ;图8为本申请实施例提供的SSTable文件数据处理系统结构图之三。具体实施例方式现有SSTable文件只支持稀疏格式存储,但许多情况下,业务数据其实是稠密的结构化数据,需要稠密格式存储。所谓稠密格式存储是指:存储行数据时,行中不为空的列存储该列值,为空的列,用空值对象填充,即行中的每列都要存储一个列值。比如,从数据库MySql或Oracle迁移过来的业务数据,每张表的列数量确定,列变更不频繁,表中大多数列都不为空,并且业务经常对整行进行读写。对于这种应用,采用现有SSTable文件的稀疏格式存储方式,将造成比较大的空间浪费,并且读写效率不高。为解决上述问题,本申请实施例对SSTable文件所使用的存储格式进行了改进,并相应改进了数据存储流程和数据查询流程。具体的,本申请实施例的SSTable文件存储格式中增加了结构表,用于描述行数据所包含的列,即,该结构表用于定义SSTable文件中行数据中各列的列顺序并进一步定义列属性信息。该结构表中可定义SSTable文件数据表的相关信息以及数据表中的行数据所包含的列的相关信息。如,结构表定义了表名、表ID,以及表中行数据所包含的列、列的顺序、每列的列名、列ID、列值的数据类型等。其中,列的顺序可用序列号标识出,也可通过结构表中各列的相关信息的排列顺序表不。参见图2,为本申请实施例提供的一种支持稠密存储方式的SSTable文件存储格式示意图。其中,SSTable文件使用块保存有序的Key-Value数据,每个块的大小可以配置,一般每个块的大小在8KB 64KB之间。整个SSTable文件按主键Key有序存储Key-Value数据,其中,Key为行主键,Value为行数据。行数据的存储支持稠密格式:行主键Key+列值数组。其中,行主键Key由行主键长度+行主键字符串组成,列值数组为该行全部列的值(value),其数量、顺序和数据类型由SSTable文件的结构表定义,包括空值对象,但不包含列名或列ID等列属性信息。对于为空的列值,以空值对象填充,从而保证每行中的列顺序和列数据与结构表中的定义保持一致。结构表头部保存了整个结构表中列的数量,结构表主要定义每行的列顺序和列的一些属性,比如表ID、列ID、列值的数据类型(如整型、字符串型)等,每行中存储的列数据与结构表中定义的列顺序和列的其它属性保持一致。结构表的存储格式的参考实现可如图3所示。其中,结构表头部(结构表Header)记录了整个结构表中列的数量;结构表中存储了多个表信息,Column Definition定义了列所属的表ID,以及列ID和列值类型,列值类型包括数值、字符串、时间等;所有表的结构表存储在一起,整个Column Definition数组按(表ID,列ID)顺序存储。优选的,每个块内还可以建立行索引,行索引记录了每行在块中的起始位置。行索引可以是一个包含了(行数量+1)个元素的数组,每个元素是一个int型(整型)数值,记录了每行行首相对于所在块起始点的相对偏移值。最后一个元素指向最后一行的尾部,由于没有保存每行的长度,需要相邻的行的起始位置相减来获得行长度,这样设计是为了节省存储空间。当然,行索引的形式并不仅限于此,凡是能够标识行数据在其所在块中的位置,能够索引到行数据的索引数据形式,都应包含在本申请的保本文档来自技高网...

【技术保护点】
一种排序字符串表SSTable文件数据处理方法,其特征在于,SSTable文件中设置有架构表,其中定义有所述SSTable文件行数据的列顺序和列属性信息,该方法包括:读取待写入到SSTable文件的行数据;在SSTable文件中写入行主键,并根据所述SSTable文件的架构表中定义的行数据的列顺序和列属性信息,对应所述行主键写入读取到的行数据的各列数据。

【技术特征摘要】
1.一种排序字符串表SSTable文件数据处理方法,其特征在于,SSTable文件中设置有架构表,其中定义有所述SSTable文件行数据的列顺序和列属性信息,该方法包括: 读取待写入到SSTable文件的行数据; 在SSTable文件中写入行主键,并根据所述SSTable文件的架构表中定义的行数据的列顺序和列属性信息,对应所述行主键写入读取到的行数据的各列数据。2.如权利要求1所述的方法,其特征在于,所述根据SSTable文件的架构表中定义的行数据的列顺序和列属性信息,对应所述行主键写入读取到的行数据的各列数据,包括: 对应所述行主键,按照SSTable文件的架构表中定义的所述SSTable文件行数据的列顺序,写入读取到的行数据的各列数据;其中,若待写入的列数据的列属性与所述架构表中定义的相应列的列属性不一 致,则当前行数据写入失败。3.如权利要求1所述的方法,其特征在于,在写入读取到的行数据的各列数据的过程中,对于为空的列,写入空值对象。4.如权利要求1所述的方法,其特征在于,写入行数据后还包括: 针对所述行数据所在的块,创建所述行数据的行索引,所述行索引用于标识所述行数据在该块中的位置。5.一种排序字符串表SSTable文件数据处理方法,其特征在于,SSTable文件中设置有架构表,其中定义有所述SSTable文件行数据的列顺序和列属性信息,该方法包括: 接收对SSTable文件的数据查询请求; 根据所述SSTable文件中的架构表,查询所请求查询的列数据; 返回查询响应,其中携带有查询到的列数据。6.如权利要求5所述的方法,其特征在于,所述根据SSTable文件中的架构表,查询所请求查询的列数据,包括...

【专利技术属性】
技术研发人员:庄明强
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1