CN106372002B - 一种数据存储方法及读取还原方法 - Google Patents

一种数据存储方法及读取还原方法 Download PDF

Info

Publication number
CN106372002B
CN106372002B CN201610761787.2A CN201610761787A CN106372002B CN 106372002 B CN106372002 B CN 106372002B CN 201610761787 A CN201610761787 A CN 201610761787A CN 106372002 B CN106372002 B CN 106372002B
Authority
CN
China
Prior art keywords
metadata
data
written
deviant
meta
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.)
Active
Application number
CN201610761787.2A
Other languages
English (en)
Other versions
CN106372002A (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.)
Kelai Network Technology Co.,Ltd.
Original Assignee
CHENGDU COLASOFT 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 CHENGDU COLASOFT Co Ltd filed Critical CHENGDU COLASOFT Co Ltd
Priority to CN201610761787.2A priority Critical patent/CN106372002B/zh
Publication of CN106372002A publication Critical patent/CN106372002A/zh
Application granted granted Critical
Publication of CN106372002B publication Critical patent/CN106372002B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management

Abstract

本发明提供了一种数据存储方法及读取还原方法。将需要存储的数据信息分解为一条一条不可再分割的基本元数据,同时,为每一条元数据分配一个序列号ID;一条数据信息包括有N条元数据;在存储数据时,先将数据写入到一段连续的内存空间中,再写入磁盘或者其他介质中;将数据信息分为元数据部分和ID位置部分两部分,元数据部分为将数据信息所分解成的N个元数据,ID位置部分的每个ID位置与元数据部分的每个元数据为一一顺序对应关系;元数据部分位于ID位置部分之后;每个ID位置写入一个偏移值作为其对应的元数据在其写入的内存空间中的实际偏移值。无版本依赖,维护简单并且具有极高的数据还原性,能够支持快速过滤的数据兼容存储。

Description

一种数据存储方法及读取还原方法
技术领域
本发明涉及一种数据存储方法及读取还原方法,特别是涉及一种适用于软件版本更迭的数据存储方法及读取还原方法。
背景技术
软件版本更迭过程中会涉及存储信息的结构变化,从而使得软件的新旧版本数据结构存在差异,但是旧版本产生数据往往是有意义的,需要使得新版本软件可能正常读取使用旧的数据,这就要求有一套可以保证数据可以被兼容的方法。
目前广泛采用的数据兼容方法主要以不同版本数据直接转换和采用特定的序列化存储方法,但在实际使用过程中存在以下方面问题:
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值就可以读取出元数据的内容;在实际的应用场景中,如果需要对用户信息下的某些数据做过滤操作,那么只需要还原出需要的信息,并不需要还原出完整的用户数据,具有极高的性能。

Claims (6)

1.一种数据存储方法,其特征在于,具体方法为:
在存储数据前,将需要存储的数据信息分解为一条一条不可再分割的基本元数据,同时,为每一条元数据分配一个序列号ID,序列号ID从0开始依次递增;定义一条数据信息包括有N条元数据,所述N为大于等于1的自然数;
在存储数据时,先将数据写入到一段连续的内存空间中,再写入磁盘或者其他介质中;
内存空间的具体写入方法为:将数据信息分为元数据部分和ID位置部分两部分,元数据部分为将数据信息所分解成的N个元数据,ID位置部分的每个ID位置与元数据部分的每个元数据为一一顺序对应关系;元数据部分位于ID位置部分之后;每个ID位置写入一个偏移值作为其对应的元数据在其写入的内存空间中的实际偏移值;
存储数据在内存空间的具体写入方法步骤为:
S1、在连续的内存空间开始位置分配N个单元的数组空间;
S2、获取数据空间之后的第一个空闲位置的偏移值,将第一个元数据的内容写入到该空闲位置上,并将其偏移值写入其对应的ID位置;
S3、计算和更新当前写入的元数据内容及空闲位置的新的偏移值,将第二个元数据的内容写到该空闲位置上,并将其偏移值写入其对应的ID位置;
以此类推,将元数据依次写入连续的内存空间中的数组空间之后,每个元数据在写入之前或之时或之后都获得其偏移值并将其偏移值写入其对应的ID位置。
2.根据权利要求1所述的数据存储方法,其特征在于,元数据的内容按照写入的顺序依次写入到元数据部分。
3.根据权利要求1所述的数据存储方法,其特征在于,每个偏移值由2个字节组成,也就是说ID位置部分包括N*2个字节。
4.根据权利要求1所述的数据存储方法,其特征在于,定义第一个元数据的实际偏移值为0。
5.根据权利要求1所述的数据存储方法,其特征在于,所述N个单元,每个单元包含2个字节。
6.基于权利要求1到5之一所述的数据存储方法的数据读取还原方法,其特征在于,具体方法为:
还原一条元数据时,根据元数据的ID值,读取其偏移值;根据元数据的类型,确定要读取的固定字节长度,从其偏移值位置开始读取所述固定字节长度的字节,完成对一个元数据内容的读取;依次读取数据信息中包含的所有元数据内容,完成一个完整的数据信息的还原。
CN201610761787.2A 2016-08-31 2016-08-31 一种数据存储方法及读取还原方法 Active CN106372002B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610761787.2A CN106372002B (zh) 2016-08-31 2016-08-31 一种数据存储方法及读取还原方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610761787.2A CN106372002B (zh) 2016-08-31 2016-08-31 一种数据存储方法及读取还原方法

Publications (2)

Publication Number Publication Date
CN106372002A CN106372002A (zh) 2017-02-01
CN106372002B true CN106372002B (zh) 2019-03-19

Family

ID=57901482

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610761787.2A Active CN106372002B (zh) 2016-08-31 2016-08-31 一种数据存储方法及读取还原方法

Country Status (1)

Country Link
CN (1) CN106372002B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108319429B (zh) * 2018-01-10 2021-02-19 北京思特奇信息技术股份有限公司 一种加快文件读取的方法及计算机设备
CN108733744A (zh) * 2018-04-02 2018-11-02 东方视界科技(北京)有限公司 数据存储、读取方法及装置
CN111198661B (zh) * 2019-12-30 2024-02-27 深圳佰维存储科技股份有限公司 存储设备写入操作过程的还原方法、装置和设备
CN111522784B (zh) * 2020-04-20 2023-11-21 支付宝(杭州)信息技术有限公司 一种非结构化数据文件的元数据同步方法、装置及设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101542450A (zh) * 2007-05-28 2009-09-23 松下电器产业株式会社 元数据记录装置以及元数据记录方法
CN103793468A (zh) * 2013-12-27 2014-05-14 北京天融信软件有限公司 数据存储方法和装置以及数据读取方法和装置
CN104166524A (zh) * 2014-08-19 2014-11-26 浪潮电子信息产业股份有限公司 一种元数据和数据的处理方法
CN104850565A (zh) * 2014-02-19 2015-08-19 北京京东尚科信息技术有限公司 一种基于k-v存储系统的元数据管理方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8589659B1 (en) * 2012-11-08 2013-11-19 DSSD, Inc. Method and system for global namespace with consistent hashing
US9734828B2 (en) * 2012-12-12 2017-08-15 Nuance Communications, Inc. Method and apparatus for detecting user ID changes

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101542450A (zh) * 2007-05-28 2009-09-23 松下电器产业株式会社 元数据记录装置以及元数据记录方法
CN103793468A (zh) * 2013-12-27 2014-05-14 北京天融信软件有限公司 数据存储方法和装置以及数据读取方法和装置
CN104850565A (zh) * 2014-02-19 2015-08-19 北京京东尚科信息技术有限公司 一种基于k-v存储系统的元数据管理方法
CN104166524A (zh) * 2014-08-19 2014-11-26 浪潮电子信息产业股份有限公司 一种元数据和数据的处理方法

Also Published As

Publication number Publication date
CN106372002A (zh) 2017-02-01

Similar Documents

Publication Publication Date Title
CN106372002B (zh) 一种数据存储方法及读取还原方法
TWI515561B (zh) 使用快閃記憶體之頁結構的資料樹儲存方法、系統以及電腦產品
CN105009067B (zh) 管理对存储数据单元的操作
US7725646B2 (en) Method of using a flash memory for a circular buffer
CN101364166B (zh) 将2048字节页的Nand Flash模拟成硬盘的方法和装置
KR20070003576A (ko) 파일 시스템 무결성에 대한 최적화된 시동 검증
CN106155589B (zh) 一种虚拟动态分区镜像文件生成方法及系统
CN112286939A (zh) 块链式账本中全局状态的哈希的生成方法、装置及设备
CN107135662B (zh) 一种差异数据备份方法、存储系统和差异数据备份装置
CN105027071A (zh) 管理对存储数据单元的操作
CN106155833A (zh) 一种异步远程复制的方法和装置
CN103761095B (zh) 一种生成通用的升级文件头部数据信息的方法
CN106776779B (zh) 基于Mac平台的JSON数据生成实体文件的方法
CN104573089A (zh) 一种NewSQL数据库中的增量式快照方法
EP3306823B1 (en) Encoding program, encoding apparatus and encoding method
CN102495838B (zh) 数据处理方法及装置
JP7163966B2 (ja) 変換方法、変換装置および変換プログラム
CN104699664A (zh) 一种模板独立的排版系统及方法
CN111190895B (zh) 列式存储数据的组织方法、装置及存储介质
CN114816247A (zh) 一种逻辑数据获取方法及装置
CN104834508A (zh) 一种生成用于读写二进制文件代码的方法
CN111259003B (zh) 一种数据库建立方法及装置
CN105607957A (zh) 一种基于opc da的数据采集与监控系统及方法
CN102567210A (zh) 闪存芯片数据分析环境重组方法和装置
CN110019507B (zh) 数据同步的方法及装置

Legal Events

Date Code Title Description
C06 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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210108

Address after: 41401-41406, 14th floor, unit 1, building 4, No. 966, north section of Tianfu Avenue, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu hi tech Zone, Sichuan 610041

Patentee after: Chengdu Kelai Network Technology Co., Ltd

Address before: B6-7, Tianfu Software Park, 99 Tianhua 1st Road, high tech Zone, Chengdu, Sichuan 610041

Patentee before: COLASOFT Co.,Ltd.

CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 610041 12th, 13th and 14th floors, unit 1, building 4, No. 966, north section of Tianfu Avenue, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu, Sichuan

Patentee after: Kelai Network Technology Co.,Ltd.

Address before: 41401-41406, 14th floor, unit 1, building 4, No. 966, north section of Tianfu Avenue, Chengdu hi tech Zone, China (Sichuan) pilot Free Trade Zone, Chengdu hi tech Zone, Sichuan 610041

Patentee before: Chengdu Kelai Network Technology Co.,Ltd.