一种数据存储方法及读取还原方法与流程

文档序号:17149743发布日期:2019-03-19 23:18阅读:269来源:国知局
一种数据存储方法及读取还原方法与流程

本发明涉及一种数据存储方法及读取还原方法,特别是涉及一种适用于软件版本更迭的数据存储方法及读取还原方法。



背景技术:

软件版本更迭过程中会涉及存储信息的结构变化,从而使得软件的新旧版本数据结构存在差异,但是旧版本产生数据往往是有意义的,需要使得新版本软件可能正常读取使用旧的数据,这就要求有一套可以保证数据可以被兼容的方法。

目前广泛采用的数据兼容方法主要以不同版本数据直接转换和采用特定的序列化存储方法,但在实际使用过程中存在以下方面问题:

1、采用不同版本数据直接转化的方法存在大量的维护工作,N个版本数据会存在2N种转换方法,复杂且容易出错;

2、采用特定的序列化存储方法可以避免第1点问题,但是在数据使用是往往需要花费较多的时间在数据反序列化还原上,极其影响分析性能。



技术实现要素:

本发明要解决的技术问题是提供一种无版本依赖、维护简单并且具有极高的数据还原性能的数据存储方法及读取还原方法。

一种数据存储方法,具体方法为:

在存储数据前,将需要存储的数据信息分解为一条一条不可再分割的基本元数据,同时,为每一条元数据分配一个序列号ID,序列号ID从0开始依次递增;定义一条数据信息包括有N条元数据,所述N为大于等于1的自然数;

在存储数据时,先将数据写入到一段连续的内存空间中,再写入磁盘或者其他介质中;

内存空间的具体写入方法为:将数据信息分为元数据部分和ID位置部分两部分,元数据部分为将数据信息所分解成的N个元数据,ID位置部分的每个ID位置与元数据部分的每个元数据为一一顺序对应关系;元数据部分位于ID位置部分之后;每个ID位置写入一个偏移值作为其对应的元数据在其写入的内存空间中的实际偏移值。

所述元数据为不可再分割的,如整数、字符串等数据;每个元数据的ID号都是唯一的,由系统自动分配。读取数据内容时,由于每一个元数据都是独立的,只需要知道元数据的ID值就可以读取出元数据的内容。在实际应用中,如果需要对用户信息下的某些数据做过滤操作,那么只需要还原出需要的信息,并不需要还原出完整的用户数据,具有极高的性能。

元数据的内容按照写入的顺序依次写入到元数据部分。元数据部分由被分割成的一条一条元数据组成,顺序依次对应被分割的需要存储的数据信息。

所述每个偏移值由2个字节组成,也就是说ID位置部分包括N*2个字节。ID位置部分用户存放元数据的实际偏移值,每个元数据对应一个ID位置,每个ID位置存放一个偏移值,每个偏移值由两个字节组成,也就是说每个ID位置由两个字节组成。

定义第一个元数据的实际偏移值为0。每一个元数据的实际偏移值为上一个元数据的实际偏移值+上一个元数据类型固定长度。

存储数据在内存空间的具体写入方法步骤为:

S1、在连续的内存空间开始位置分配N个单元的数组空间;

S2、获取数据空间之后的第一个空闲位置的偏移值,将第一个元数据的内容写入到该空闲位置上,并将其偏移值写入其对应的ID位置;

S3、计算和更新当前写入的元数据内容及空闲位置的新的偏移值,将第二个元数据的内容写到该空闲位置上,并将其偏移值写入其对应的ID位置;

以此类推,将元数据依次写入连续的内存空间中的数组空间之后,每个元数据在写入之前或之时或之后都获得其偏移值并将其偏移值写入其对应的ID位置。

所述N个单元,每个单元包含2个字节。

基于上述数据存储方法的数据读取还原方法,具体方法为:

还原一条元数据时,根据元数据的ID值,读取其偏移值;根据元数据的类型,确定要读取的固定字节长度,从其偏移值位置开始读取所述固定字节长度的字节,完成对一个元数据内容的读取;依次读取数据信息中包含的所有元数据内容,完成一个完整的数据信息的还原。

与现有技术相比,本发明的有益效果是:读取数据内容时,由于每一个元数据都是独立的,只需要知道元数据的ID值就可以读取出元数据的内容,这种数据存储方法,无版本依赖,维护简单并且具有极高的数据还原性,能够支持快速过滤的数据兼容存储。

附图说明

图1为本发明其中一实施例的数据存储原理示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本说明书(包括摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或者具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。

具体实施例1

一种数据存储方法,具体方法为:

在存储数据前,将需要存储的数据信息分解为一条一条不可再分割的基本元数据,同时,为每一条元数据分配一个序列号ID,序列号ID从0开始依次递增;定义一条数据信息包括有N条元数据,所述N为大于等于1的自然数;

在存储数据时,先将数据写入到一段连续的内存空间中,再写入磁盘或者其他介质中;

内存空间的具体写入方法为:将数据信息分为元数据部分和ID位置部分两部分,元数据部分为将数据信息所分解成的N个元数据,ID位置部分的每个ID位置与元数据部分的每个元数据为一一顺序对应关系;元数据部分位于ID位置部分之后;每个ID位置写入一个偏移值作为其对应的元数据在其写入的内存空间中的实际偏移值。

具体实施例2

在具体实施例1的基础上,元数据的内容按照写入的顺序依次写入到元数据部分。

具体实施例3

在具体实施例1或2的基础上,在本具体实施例中,所述每个偏移值由2个字节组成,也就是说ID位置部分包括N*2个字节。

具体实施例4

在具体实施例1到3之一的基础上,定义第一个元数据的实际偏移值为0。

具体实施例5

在具体实施例1到4之一的基础上,存储数据在内存空间的具体写入方法步骤为:

S1、在连续的内存空间开始位置分配N个单元的数组空间;

S2、获取数据空间之后的第一个空闲位置的偏移值,将第一个元数据的内容写入到该空闲位置上,并将其偏移值写入其对应的ID位置;

S3、计算和更新当前写入的元数据内容及空闲位置的新的偏移值,将第二个元数据的内容写到该空闲位置上,并将其偏移值写入其对应的ID位置;

以此类推,将元数据依次写入连续的内存空间中的数组空间之后,每个元数据在写入之前或之时或之后都获得其偏移值并将其偏移值写入其对应的ID位置。

具体实施例6

在具体实施例5的基础上,在本具体实施例中,所述N个单元,每个单元包含2个字节。

具体实施例7

在具体实施例1到6之一的基础上的数据读取还原方法,具体方法为:

还原一条元数据时,根据元数据的ID值,读取其偏移值;根据元数据的类型,确定要读取的固定字节长度,从其偏移值位置开始读取所述固定字节长度的字节,完成对一个元数据内容的读取;依次读取数据信息中包含的所有元数据内容,完成一个完整的数据信息的还原。

具体实施例8

在具体实施例7的基础上,将需要存储的数据信息,分解为一条一条不可再分割的基本元数据,这里的元数据指的是不可再分割的,如整数、字符串等数据,定义一条数据信息包括有N条元数据;所述N为大于等于1的自然数;

为每一条元数据自动分配一个序列号ID,序列号ID是从0开始依次递增的;

在存储数时,先将数据写入到一段连续的内存空间中,然后再写入磁盘或者其它介质中,具体写入方法如下:

在连续内存空间开始位置分配N*2个字节,形成一个由两个字节组成的一个单元,包含N个单元的数组空间,我们称这个数据空间为VTable;如图1所示,Value1_offset到ValueN_offset所占用的空间即为这个数据空间VTable,其中每个Value_offset所占用的位置就是一个ID位置。

元数据的内容,按照写入的顺序依次写入到VTable后面的内存空间中,我们称其为ValueDataArry,VTable空间的尾部即是ValueDataArray空间的起始位置;如图1所示,Value1到ValueN所占用的空间即为ValueDataArray空间,每个Value即为一条元数据。

所述单元每一个单元两个字节,即可以存储一个uint16_t的数据,用于存储元数据在ValueDataArray内存空间中的实际偏移值;

在写入一个元数据时,获取ValueDataArry中第一个空闲位置的偏移值offset,然后将元数据的内容直接写到ValueDataArry的空闲位置上,ValueDataArry本身需要计算和更新当写入元数据内容以及空闲位置的新的偏移值;一个元数据预先分配的一个ID,在VTable数组的ID位置,写入其存储元数据内容的offset值;

在本具体实施例中,假设写入元数据MetaData的ID为Z,内容包含X个字节,ValueDataArry的空闲位置偏移值为Y,那么写入过程如下:

Memcpy(&ValueDataArry[Y],MetaData,X);

*(uint16_t*)&VTable[Z]=Y;

Y+=X;

从存储介质中读取数据,还原成用户能够阅读的信息,其还原方法如下:

还原一条元数据时,根据元数据的ID值,读取VTable[ID]的值ValueOffset,此值是元数据在ValueDataArry数据空间中真正偏移位置;

根据元数据的类型,确定需要读取的长度Length,从ValueDataArry[ValueOffset]位置开始读取Length个字节,即实现了一个元数据内容的读取;

依次读取出用户信息中包含的所有元数据内容,即还原出一条完整的用户数据;

本读取方法的特点是,读取每一个元数据时,都是可以独立的,即只需要知晓元数据的ID值就可以读取出元数据的内容;在实际的应用场景中,如果需要对用户信息下的某些数据做过滤操作,那么只需要还原出需要的信息,并不需要还原出完整的用户数据,具有极高的性能。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1