CN107741833B - 可嵌套的key-value的存储方法及装置 - Google Patents
可嵌套的key-value的存储方法及装置 Download PDFInfo
- Publication number
- CN107741833B CN107741833B CN201711051627.XA CN201711051627A CN107741833B CN 107741833 B CN107741833 B CN 107741833B CN 201711051627 A CN201711051627 A CN 201711051627A CN 107741833 B CN107741833 B CN 107741833B
- Authority
- CN
- China
- Prior art keywords
- data
- length
- value
- mark
- key
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 238000013500 data storage Methods 0.000 abstract description 10
- 230000006872 improvement Effects 0.000 abstract description 2
- 238000013461 design Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 238000004880 explosion Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供了可嵌套的key‑value的存储方法及装置,涉及嵌入式数据存储技术领域,其中,该可嵌套的key‑value的存储方法包括:首先,在存储空间中设置顶层key和顶层value,并在顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志,并在顶层value中分别设置成员key和成员value,其中,成员key包括数据成员ID和数据成员长度,并将待存储的数据结构按照数据结构类型标志、总字节长度标志和状态标志的顺序进行存储,之后,将待存储的数据结构内的数据成员按照数据成员ID、数据成员长度和成员value的顺序排列存储,进而实现了空间利用率的提高和数据结构可变长识别。
Description
技术领域
本发明涉及嵌入式数据存储技术领域,尤其涉及可嵌套的key-value的存储方法及装置。
背景技术
在目前数据信息化发展迅速的时代,数据体现了一切事物存在的内容,尤其是大数据的爆发,对于数据的获取和储存达到了非常庞大的需求,而实现数据的完整和数据储存的最大利用化成为了所有企业的追求。在数据庞大的需求下,提高数据存储的空间利用率,可以减少企业针对存储芯片的支出,或者可以理解为在相同存储容量的芯片内可以实现更多数据存储的需求。而且,由于产品需求的可变性频繁,数据的需求经常要求变更,频繁的数据变动使得产品的数据更新很难满足前后兼容的要求,这样只能通过浪费空间换取开发效率的方法来满足数据变动的需。
嵌入式设备现在广泛应用于各行各业中,尤其是随着物联网等新概念的提出,存储容量小且数据需求量变化快的嵌入式设备的需求更加广泛。现有技术中,Key-value的存储方法是key和value分开存储,通常,key管理value在flash内的存储地址,因此,对数据的操作是分两次来进行的,即先读取Key,然后根据Key的内容在flash内寻址再次读取,上述两次操作上的过程中存在了增加读取操作的开销,在一定程度上降低了程序的运行效率。而且,key-value的设计多数应用于数据量较大的数据存储,对于空间容量小的设备管理上会相对耗费点存储空间。
综上,目前关于在嵌入式设备上采用key-value的存储方式的存储效率差问题,尚无有效的解决办法。
发明内容
有鉴于此,本发明实施例的目的在于提供了可嵌套的key-value的存储方法及装置,通过设置顶层key和顶层value等,提高了嵌入式设备上数据的存储效率。
第一方面,本发明实施例提供了可嵌套的key-value的存储方法,包括:
在存储空间中设置顶层key和顶层value;
在顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志;
在顶层value中分别设置成员key和成员value,其中,成员key包括数据成员ID和数据成员长度;
将待存储的数据结构按照数据结构类型标志、总字节长度标志和状态标志的顺序进行存储;
将待存储的数据结构内的数据成员按照数据成员ID、数据成员长度和成员value的顺序排列。
结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,在顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志的步骤,包括:
将顶层key的长度配置成7个字节;
将顶层key分别设置数据结构的类型标志、总字节长度标志和状态标志,其中,类型标志用来区别各个待存储的数据结构的类型,总字节长度标志为数据成员长度的总和,状态标志用来表示待存储的数据结构的更新状态;
将类型标志的长度配置为4个字节,将总字节长度标志的长度配置为2个字节,将状态标志的长度配置为1个字节。
结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,在顶层value中分别设置数据成员ID、数据成员长度和成员value的步骤,包括:
将顶层value的长度配置成4个字节;
将顶层value中分别设置数据成员ID、数据成员长度和成员value,其中,数据成员包括数据结构内的所有数据成员,数据成员ID用来区分各个数据成员,数据成员长度为数据成员的字节长度,成员value为数据成员的数值;
将数据成员ID的长度配置为1个字节,将数据成员长度的长度配置为1个字节,将成员value的长度配置为2个字节。
结合第一方面的第一种可能的实施方式,本发明实施例提供了第一方面的第三种可能的实施方式,其中,将待存储的数据结构按照类型标志、总字节长度标志和状态标志的顺序进行存储的步骤,包括:
获取待存储的数据结构的数据结构类型标志的数值、总字节长度标志的数值和状态标志的数值;
分别将数据结构类型标志的数值、总字节长度标志的数值和状态标志的数值依次进行存储。
结合第一方面的第二种可能的实施方式,本发明实施例提供了第一方面的第四种可能的实施方式,其中,将待存储的数据结构内的数据成员按照数据成员ID、数据成员长度和成员value的顺序排列的步骤,包括:
分别获取待存储的数据成员的数据成员ID、数据成员长度和成员value;
将数据成员ID、数据成员长度和成员value按照数据成员ID的顺序依次紧邻状态标志进行存储。
结合第一方面的第三种可能的实施方式,本发明实施例提供了第一方面的第五种可能的实施方式,其中,方法还包括:
当待存储的数据结构内增加新的数据成员时,为新的数据成员分配新的数据成员ID;
获取新的数据成员的数据成员长度和成员value;
将新的数据成员按照新的数据成员ID、数据成员长度和成员value的顺序存储在空闲的存储空间内;
为新的数据成员和待存储的数据结构设置关联标号,使待存储的数据结构与新的数据成员相关联。
第二方面,本发明实施例提供了可嵌套的key-value的存储装置,包括:
划分模块,用于在存储空间中设置顶层key和顶层value;
顶层设置模块,用于在顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志;
成员设置模块,用于在顶层value中分别设置成员key和成员value,其中,成员key包括数据成员ID和数据成员长度;
顶层存储模块,用于将待存储的数据结构按照数据结构类型标志、总字节长度标志和状态标志的顺序进行存储;
成员存储模块,用于将待存储的数据结构内的数据成员按照数据成员ID、数据成员长度和成员value的顺序排列。
结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,顶层设置模块包括:
顶层长度配置单元,用于将顶层key的长度配置成7个字节;
顶层标志置划分单元,用于将顶层key分别设置数据结构的类型标志、总字节长度标志和状态标志,其中,类型标志用来区别各个待存储的数据结构的类型,总字节长度标志为数据成员长度的总和,状态标志用来表示待存储的数据结构的更新状态;
顶层长度划分单元,用于将类型标志的长度配置为4个字节,将总字节长度标志的长度配置为2个字节,将状态标志的长度配置为1个字节。
结合第二方面,本发明实施例提供了第二方面的第二种可能的实施方式,其中,成员设置模块包括:
成员长度配置单元,用于将顶层value的长度配置成4个字节;
成员标志置划分单元,用于将顶层value中分别设置数据成员ID、数据成员长度和成员value,其中,数据成员包括数据结构内的所有数据成员,数据成员ID用来区分各个数据成员,数据成员长度为数据成员的字节长度,成员value为数据成员的数值;
成员长度划分单元,用于将数据成员ID的长度配置为1个字节,将数据成员长度的长度配置为1个字节,将成员value的长度配置为2个字节。
结合第二方面,本发明实施例提供了第二方面的第三种可能的实施方式,其中,还包括:
标志新增模块,用于当待存储的数据结构内增加新的数据成员时,为新的数据成员分配新的数据成员ID;
新增获取模块,用于获取新的数据成员的数据成员长度和成员value;
新增存储模块,用于将新的数据成员按照新的数据成员ID、数据成员长度和成员value的顺序存储在空闲的存储空间内;
关联模块,用于为新的数据成员和待存储的数据结构设置关联标号,使待存储的数据结构与新的数据成员相关联。
本发明实施例提供的可嵌套的key-value的存储方法及装置,其中,该可嵌套的key-value的存储方法包括:首先,在存储空间中设置顶层key和顶层value,之后,在顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志,之后,在顶层value中分别设置成员key和成员value,其中,成员key包括数据成员ID和数据成员长度,之后,将待存储的数据结构按照数据结构类型标志、总字节长度标志和状态标志的顺序进行存储,之后,将待存储的数据结构内的数据成员按照数据成员ID、数据成员长度和成员value的顺序排列,这样,将key和value组合一起存储,实现空间利用最大化,减少了读取数据的开销,实现了对数据结构的可变长识别,进而提升了嵌入式设备上数据的存储效率。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本发明实施例所提供的可嵌套的key-value的存储方法的流程图;
图2示出了本发明实施例所提供的可嵌套的key-value的存储方法的示意图;
图3示出了本发明实施例所提供的可嵌套的key-value的存储装置的连接图;
图4示出了本发明实施例所提供的可嵌套的key-value的存储装置的结构框架图;
图5示出了本发明实施例所提供的可嵌套的key-value的存储装置的结构连接图。
图标:1-划分模块;2-顶层设置模块;3-成员设置模块;4-顶层存储模块;5-成员存储模块;21-顶层长度配置单元;22-顶层标志置划分单元;23-顶层长度划分单元;31-成员长度配置单元;32-成员标志置划分单元;33-成员长度划分单元。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,Key-value的存储方法是key和value分开存储,通常,key管理value在flash内的存储地址,因此,对数据的操作是分两次来进行的,即先读取Key,然后根据Key的内容在flash内寻址再次读取,上述两次操作上的过程中存在了增加读取操作的开销,在一定程度上降低了程序的运行效率。而且,key-value的设计多数应用于数据量较大的数据存储,对于空间容量小的设备管理上会相对耗费点存储空间。
具体的,针对存储容量小的flash芯片(如spiflash),产品中数据普遍都是以结构体方式来声明一种数据类型,假设该数据的结构体类型如:
typdefstruct
{
Uint8_ta;
Uint16_tb;
Uint32_tc;
}Data_t;
假设a=0x23,b=0x122f,c=0x00348f39,在flash中以1字节对齐方式,小端(低字节在后,高字节在前)保存,则是:
0x23,0x2f,0x12,0x39,0x8f,0x34,0x00
通常数据存储都可以续着保存,这样可以提高存储芯片的空间利用率,假设下一笔的内容为:
a=0xb8,b=0x56e4,c=0x59fe6a81,和上一笔一起在flash空间内容则为:
0x23,0x2f,0x12,0x39,0x8f,0x34,0x00,0xb8,0xe4,0x56,0x81,0x6a,0xfe,0x59
但是,由于flash芯片的写最小数据块长度和擦除最小单标志数据块长度有限制,擦除扇区也需要等待时间,而且,flash的寿命是和擦除次数有关的。所以flash的这种操作特性需要有方法来提高flash的空间利用率。
如此类推,数据可以续着保存,但是存在一个问题,假设由于产品针对数据的需求,需要在这种数据类型上新增一个成员,变为:
typdefstruct
{
Uint8_ta;
Uint16_tb;
Uint32_tc;
Uint16_td;
}Data_t;
按照新的数据结构类型来获取flash内的数据则会发生数据错乱的现象,flash内的数据无法兼容新的数据结构类型。
假如就算使用key-value方式存储,只能是识别各个成员的类型,但针对这个数据结构类型无法识别,万一存在另外一个相同结构体类型Data2_t,
typdefstruct
{
Uint8_ta2;
Uint16_tb2;
Uint32_tc2;
Uint16_td2;
}Data2_t;
但赋值给另一个结构体数据,这样就容易导致相同数据结构类型赋给不同数据的问题。
基于此,本发明实施例提供了可嵌套的key-value的存储方法及装置,下面通过实施例进行描述。
实施例1
参见图1,本实施例提出的可嵌套的key-value的存储方法具体包括以下步骤:
步骤S101:在存储空间中设置顶层key和顶层value,实现顶层key和顶层value的连续嵌套存储。
步骤S102:在顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志。
步骤S103:在顶层value中分别设置成员key和成员value,其中,成员key包括数据成员ID和数据成员长度。
步骤S104:将待存储的数据结构按照数据结构类型标志、总字节长度标志和状态标志的顺序进行存储。
步骤S105:将待存储的数据结构内的数据成员按照数据成员ID、数据成员长度和成员value的顺序排列。
参见图2,上述步骤S102在顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志的步骤具体包括:
(1)将顶层key的长度配置成7个字节,以表征待存储的数据结构的整体属性值。
(2)具体的,将顶层key分别设置数据结构的类型标志、总字节长度标志和状态标志,其中,类型标志用来区别各个待存储的数据结构的类型,总字节长度标志为数据成员长度的总和,状态标志用来表示待存储的数据结构的更新状态。这里需要进行说明的是,状态标志的长度可以根据需求进行调整。
(3)具体的,将类型标志的长度配置为4个字节,将总字节长度标志的长度配置为2个字节,将状态标志的长度配置为1个字节。
即4字节类型标志是用于区别各个数据结构类型,避免不同的数据结构类型混淆,2字节总字节长度标志为顶层key后续的value长度,最长为65535字节,内容包括各个数据顶层value+value,1字节状态标志可用于表明对应的状态,例如,为1时表明该笔数据为最新的一笔,为0时则是旧的一笔,这样可以用于定标志到这个存储区域中最新的一笔数据,只需要知道顶层key中的7个字节即可判断是否需要获取对应的value。
以上面的Data_t的数据结构来描述该设计在flash中的存储,以原来Data_t的数据类型为:
typdef struct
{
Uint8_ta;
Uint16_tb;
Uint32_tc;
}Data_t;
顶层key中的类型标志可自行设计,只要保证各个数据结构类型不同即可,我这里假设类型标志为0x12345678,长度需要先计算各个成员长度后才能得出,由于此次保存的是最新的一笔,状态字节为1,则顶层key的内容为:0x78,0x56,0x34,0x12,0x00,0x00,0x01(中间数据成员长度需要计算各个数据成员后才得出)。
上述步骤S103在顶层value中分别设置数据成员ID、数据成员长度和成员value的步骤具体包括:
(1)将顶层value的长度配置成4个字节,通过4个字节长度的顶层value来表征待存储的数据结构中的单个数据成员的情况。
(2)将顶层value中分别设置数据成员ID、数据成员长度和成员value,其中,数据成员包括数据结构内的所有数据成员,数据成员ID用来区分各个数据成员,数据成员长度为数据成员的字节长度,数据成员长度为数据成员的数值。
(3)将数据成员ID的长度配置为1个字节,将数据成员长度的长度配置为1个字节,将成员value的长度配置为2个字节,这里需要进行说明的是,数据成员长度的长度可以根据需求进行调整。
即由于一个数据结构类型内的成员通常不会变化很多,1个字节足够确定最多255个ID号,而且,因为类型标志保证了各个数据结构类型之前的差异,在一个数据结构类型内的数据成员ID都可以从0开始,但数据成员ID之间需要互不相同。2字节长度为顶层value后续的value长度,最长为65535字节,内容为对应的value,当数据成员长度有变化时进行类推。
以上面的Data_t的数据结构来描述该设计在flash中的存储,以原来Data_t的数据类型为:
typdefstruct
{
Uint8_ta;
Uint16_tb;
Uint32_tc;
}Data_t;
第一个成员假设a=0x67,数据成员ID为1,数据成员长度为1,则该数据成员长度为:0x01,0x01,0x00,0x67内容为4字节。
第二个成员假设b=0xf7a8,数据成员ID为2,数据成员长度为2,则该数据成员长度为:0x02,0x02,0x00,0xa8,0xf7内容为5字节。
第三个成员假设c=0x597e4c82,数据成员ID为3,数据成员长度为4,则该数据成员长度为:0x03,0x04,0x00,0x82,0x4c,0x7e,0x59内容为7字节。
上述步骤S104将待存储的数据结构按照数据结构类型标志、总字节长度标志和状态标志的顺序进行存储的步骤具体包括:
(1)获取待存储的数据结构的数据结构类型标志的数值、总字节长度标志的数值和状态标志的数值。
(2)分别将数据结构类型标志的数值、总字节长度标志的数值和状态标志的数值依次进行存储。
即上述结构体的例子中,3个数据成员的总长度为4+5+7=16,所以顶层key中的长度为0x0010,顶层key存储为:0x78,0x56,0x34,0x12,0x10,0x00,0x01。
上述步骤S105将待存储的数据结构内的数据成员按照数据成员ID、数据成员长度和成员value的顺序排列的步骤具体包括:
(1)分别获取待存储的数据成员的数据成员ID、数据成员长度和成员value。
(2)将数据成员ID、数据成员长度和成员value按照数据成员ID的顺序依次紧邻状态标志进行存储。
即上述结构体的例子中,整个数据在flash中的内容字节为:
0x78,0x56,0x34,0x12,0x10,0x00,0x01,0x01,0x01,0x00,0x67,0x02,0x02,0x00,0xa8,0xf7,0x03,0x04,0x00,0x82,0x4c,0x7e,0x59。
此外,可嵌套的key-value的存储方法还包括:
(1)当待存储的数据结构内增加新的数据成员时,为新的数据成员分配新的数据成员ID,这里需要进行说明的是,新的数据成员分配新的数据成员ID的命令与之前的数据成员的标志格式相同且相连,以上述例子来说,0x04。
(2)获取新的数据成员的数据成员长度和成员value。即将新的数据成员表征为上述数据成员的形式。
(3)将新的数据成员按照新的数据成员ID、数据成员长度和成员value的顺序存储在空闲的存储空间内,在本实施例中,空闲的存储空间内为flash中的其他存储空间。
(4)为新的数据成员和待存储的数据结构设置关联标号,使待存储的数据结构与新的数据成员相关联。由于,新的数据成员与之前的待存储的数据结构不是接续存储的,因此,需要设置关联标号,使待存储的数据结构与新的数据成员相关联,以组成完整的待存储的数据结构,这里,关联标号的形式可根据情况进行灵活设定。
此外,这里需要补充进行说明的是,读取解析的操作方法就是先读取固定的前7个字节(也就是顶层key),则是0x78,0x56,0x34,0x12,0x10,0x00,0x01,前4个字节为顶层ID,0x12345678,接着的两个字节为0x0010,也就是16,表明后续的成员整个内容的长度为16个字节,最后的1个字节就表明这段数据是最新状态,可选择获取这段数据内容。然后得到后面16个字节的内容:0x01,0x01,0x00,0x67,0x02,0x02,0x00,0xa8,0xf7,0x03,0x04,0x00,0x82,0x4c,0x7e,0x59。先读取前3个字节,第一个为0x01表明ID为1,接着的两个字节为0x0001,表明该成员的长度为1个字节长度,接着就读取一个字节0x67,则ID1的成员a的值为0x67,同理可推,接着可得到成员b的值为0xf7a8,成员c的值为0x597e4c82,数据则全部读取出来。
综上所述,本实施例提供的可嵌套的key-value的存储方法包括:在存储空间中设置顶层key和顶层value,在顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志,在顶层value中分别设置成员key和成员value,其中,成员key包括数据成员ID和数据成员长度,将待存储的数据结构按照数据结构类型标志、总字节长度标志和状态标志的顺序进行存储,将待存储的数据结构内的数据成员按照数据成员ID、数据成员长度和成员value的顺序排列,通过上述处理过程,将key和value组合一起存储,实现空间利用最大化,而且也减少了读取数据的开销,实现了空间利用率的提高和数据结构的可变长识别。
实施例2
参见图3、图4和图5,本实施例提供了可嵌套的key-value的存储装置包括:依次相连的划分模块1、顶层设置模块2、成员设置模块3、顶层存储模块4和成员存储模块5,使用时,划分模块1用于在存储空间中设置顶层key和顶层value,顶层设置模块2用于在顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志,成员设置模块3用于在顶层value中分别设置成员key和成员value,其中,成员key包括数据成员ID和数据成员长度,顶层存储模块4用于将待存储的数据结构按照数据结构类型标志、总字节长度标志和状态标志的顺序进行存储,成员存储模块5用于将待存储的数据结构内的数据成员按照数据成员ID、数据成员长度和成员value的顺序排列。
上述顶层设置模块2包括:顶层长度配置单元21用于将顶层key的长度配置成7个字节,顶层标志置划分单元22用于将顶层key分别设置数据结构的类型标志、总字节长度标志和状态标志,其中,类型标志用来区别各个待存储的数据结构的类型,总字节长度标志为数据成员长度的总和,状态标志用来表示待存储的数据结构的更新状态,顶层长度划分单元23用于将类型标志的长度配置为4个字节,将总字节长度标志的长度配置为2个字节,将状态标志的长度配置为1个字节。
上述成员设置模块3包括:成员长度配置单元31用于将顶层value的长度配置成4个字节,成员标志置划分单元32用于将顶层value中分别设置数据成员ID、数据成员长度和成员value,其中,数据成员包括数据结构内的所有数据成员,数据成员ID用来区分各个数据成员,数据成员长度为数据成员的字节长度,数据成员长度为数据成员的数值,成员长度划分单元33用于将数据成员ID的长度配置为1个字节,将数据成员长度的长度配置为1个字节,将成员value的长度配置为2个字节。
此外,可嵌套的key-value的存储装置还包括:标志新增模块用于当待存储的数据结构内增加新的数据成员时,为新的数据成员分配新的数据成员ID,新增获取模块用于获取新的数据成员的数据成员长度和成员value,新增存储模块用于将新的数据成员按照新的数据成员ID、数据成员长度和成员value的顺序存储在空闲的存储空间内,关联模块用于为新的数据成员和待存储的数据结构设置关联标号,使待存储的数据结构与新的数据成员相关联。
综上所述,本实施例提供的可嵌套的key-value的存储装置包括:依次相连的划分模块1、顶层设置模块2、成员设置模块3、顶层存储模块4和成员存储模块5,使用时,划分模块1用于在存储空间中设置顶层key和顶层value,顶层设置模块2用于在顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志,成员设置模块3用于在顶层value中分别设置成员key和成员value,其中,成员key包括数据成员ID和数据成员长度,顶层存储模块4用于将待存储的数据结构按照数据结构类型标志、总字节长度标志和状态标志的顺序进行存储,成员存储模块5用于将待存储的数据结构内的数据成员按照数据成员ID、数据成员长度和成员value的顺序排列,通过上述各个模块的设置,一方面减少了数据存储过程中的读写操作,另一方面当数据结构有变动时,便于灵活存储,进而提升了数据存储的效率。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.可嵌套的key-value的存储方法,其特征在于,包括:
在存储空间中设置顶层key和顶层value;
在所述顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志;
在所述顶层value中分别设置成员key和成员value,其中,所述成员key包括数据成员ID和数据成员长度;
将待存储的数据结构按照所述类型标志、所述总字节长度标志和所述状态标志的顺序进行存储;
将待存储的数据结构内的所述数据成员按照所述数据成员ID、所述数据成员长度和所述成员value的顺序进行存储。
2.根据权利要求1所述的可嵌套的key-value的存储方法,其特征在于,在所述顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志的步骤,包括:
将所述顶层key的长度配置成7个字节;
将所述顶层key分别设置数据结构的类型标志、总字节长度标志和状态标志,其中,所述类型标志用来区别各个待存储的数据结构的类型,所述总字节长度标志为所述数据成员长度的总和,所述状态标志用来表示所述待存储的数据结构的更新状态;
将所述类型标志的长度配置为4个字节,将所述总字节长度标志的长度配置为2个字节,将所述状态标志的长度配置为1个字节。
3.根据权利要求1所述的可嵌套的key-value的存储方法,其特征在于,在所述顶层value中分别设置成员key和成员value,其中,所述成员key包括数据成员ID和数据成员长度的步骤,包括:
将所述顶层value的长度配置成4个字节;
将所述顶层value中分别设置数据成员ID、数据成员长度和成员value,其中,所述数据成员包括所述数据结构内的所有数据成员,所述数据成员ID用来区分各个所述数据成员,所述数据成员长度为所述数据成员的字节长度,所述成员value为所述数据成员的数值;
将所述数据成员ID的长度配置为1个字节,将所述数据成员长度的长度配置为1个字节,将所述成员value的长度配置为2个字节。
4.根据权利要求2所述的可嵌套的key-value的存储方法,其特征在于,所述将待存储的数据结构按照所述类型标志、所述总字节长度标志和所述状态标志的顺序进行存储的步骤,包括:
获取所述待存储的数据结构的所述类型标志的数值、所述总字节长度标志的数值和所述状态标志的数值;
分别将所述类型标志的数值、所述总字节长度标志的数值和所述状态标志的数值依次进行存储。
5.根据权利要求3所述的可嵌套的key-value的存储方法,其特征在于,所述将待存储的数据结构内的所述数据成员按照所述数据成员ID、所述数据成员长度和所述成员value的顺序排列的步骤,包括:
分别获取待存储的所述数据成员的所述数据成员ID、所述数据成员长度和所述成员value;
将所述数据成员ID、所述数据成员长度和所述成员value按照所述数据成员ID的顺序依次紧邻所述状态标志进行存储。
6.根据权利要求4所述的可嵌套的key-value的存储方法,其特征在于,所述方法还包括:
当所述待存储的数据结构内增加新的数据成员时,为所述新的数据成员分配新的数据成员ID;
获取所述新的数据成员的所述数据成员长度和所述成员value;
将所述新的数据成员按照所述新的数据成员ID、所述数据成员长度和所述成员value的顺序存储在空闲的存储空间内;
为所述新的数据成员和所述待存储的数据结构设置关联标号,使所述待存储的数据结构与所述新的数据成员相关联。
7.可嵌套的key-value的存储装置,其特征在于,包括:
划分模块,用于在存储空间中设置顶层key和顶层value;
顶层设置模块,用于在所述顶层key中分别设置数据结构的类型标志、总字节长度标志和状态标志;
成员设置模块,用于在所述顶层value中分别设置成员key和成员value,其中,所述成员key包括数据成员ID和数据成员长度;
顶层存储模块,用于将待存储的数据结构按照所述类型标志、所述总字节长度标志和所述状态标志的顺序进行存储;
成员存储模块,用于将待存储的数据结构内的所述数据成员按照所述数据成员ID、所述数据成员长度和所述成员value的顺序进行存储。
8.根据权利要求7所述的可嵌套的key-value的存储装置,其特征在于,所述顶层设置模块包括:
顶层长度配置单元,用于将所述顶层key的长度配置成7个字节;
顶层标志置划分单元,用于将所述顶层key分别设置数据结构的类型标志、总字节长度标志和状态标志,其中,所述类型标志用来区别各个待存储的数据结构的类型,所述总字节长度标志为所述数据成员长度的总和,所述状态标志用来表示所述待存储的数据结构的更新状态;
顶层长度划分单元,用于将所述类型标志的长度配置为4个字节,将所述总字节长度标志的长度配置为2个字节,将所述状态标志的长度配置为1个字节。
9.根据权利要求7所述的可嵌套的key-value的存储装置,其特征在于,所述成员设置模块包括:
成员长度配置单元,用于将所述顶层value的长度配置成4个字节;
成员标志置划分单元,用于将所述顶层value中分别设置数据成员ID、数据成员长度和成员value,其中,所述数据成员包括所述数据结构内的所有数据成员,所述数据成员ID用来区分各个所述数据成员,所述数据成员长度为所述数据成员的字节长度,所述成员value为所述数据成员的数值;
成员长度划分单元,用于将所述数据成员ID的长度配置为1个字节,将所述数据成员长度的长度配置为1个字节,将所述成员value的长度配置为2个字节。
10.根据权利要求7所述的可嵌套的key-value的存储装置,其特征在于,还包括:
标志新增模块,用于当所述待存储的数据结构内增加新的数据成员时,为所述新的数据成员分配新的数据成员ID;
新增获取模块,用于获取所述新的数据成员的所述数据成员长度和所述成员value;
新增存储模块,用于将所述新的数据成员按照所述新的数据成员ID、所述数据成员长度和所述成员value的顺序存储在空闲的存储空间内;
关联模块,用于为所述新的数据成员和所述待存储的数据结构设置关联标号,使所述待存储的数据结构与所述新的数据成员相关联。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711051627.XA CN107741833B (zh) | 2017-10-30 | 2017-10-30 | 可嵌套的key-value的存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711051627.XA CN107741833B (zh) | 2017-10-30 | 2017-10-30 | 可嵌套的key-value的存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107741833A CN107741833A (zh) | 2018-02-27 |
CN107741833B true CN107741833B (zh) | 2021-02-05 |
Family
ID=61233826
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711051627.XA Active CN107741833B (zh) | 2017-10-30 | 2017-10-30 | 可嵌套的key-value的存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107741833B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111159329B (zh) * | 2019-12-24 | 2023-09-08 | 深圳市优必选科技股份有限公司 | 敏感词检测方法、装置、终端设备和计算机可读存储介质 |
CN113868231B (zh) * | 2021-12-03 | 2022-03-18 | 南昌龙旗信息技术有限公司 | 数据结构的更新方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件系统元数据管理方法 |
CN102750268A (zh) * | 2012-06-19 | 2012-10-24 | 山东中创软件商用中间件股份有限公司 | 一种对象序列化方法、对象反序列化方法、装置及系统 |
CN103116500A (zh) * | 2013-03-11 | 2013-05-22 | 北京首钢自动化信息技术有限公司 | 一种结构体定义和结构输出的方法及装置 |
CN103885721A (zh) * | 2012-12-24 | 2014-06-25 | 中国移动通信集团公司 | 一种在键-值系统中的数据存储或读取方法、装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6741983B1 (en) * | 1999-09-28 | 2004-05-25 | John D. Birdwell | Method of indexed storage and retrieval of multidimensional information |
CN103425632B (zh) * | 2013-08-30 | 2016-08-10 | 深圳市路畅科技股份有限公司 | 一种序列化的方法、装置及处理器 |
CN105450488B (zh) * | 2015-11-11 | 2019-10-22 | 深圳市冠明能源科技有限公司 | 一种数据处理方法及相关装置 |
CN106407303A (zh) * | 2016-08-30 | 2017-02-15 | 北京深思数盾科技股份有限公司 | 数据存储、查询方法及装置 |
CN106446272B (zh) * | 2016-10-20 | 2019-07-09 | 北京百度网讯科技有限公司 | 用于发送数据的方法和装置 |
-
2017
- 2017-10-30 CN CN201711051627.XA patent/CN107741833B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件系统元数据管理方法 |
CN102750268A (zh) * | 2012-06-19 | 2012-10-24 | 山东中创软件商用中间件股份有限公司 | 一种对象序列化方法、对象反序列化方法、装置及系统 |
CN103885721A (zh) * | 2012-12-24 | 2014-06-25 | 中国移动通信集团公司 | 一种在键-值系统中的数据存储或读取方法、装置 |
CN103116500A (zh) * | 2013-03-11 | 2013-05-22 | 北京首钢自动化信息技术有限公司 | 一种结构体定义和结构输出的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107741833A (zh) | 2018-02-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108287669B (zh) | 数据存储方法、装置及存储介质 | |
CN101147133B (zh) | 可再编程非易失性存储器系统的方法及存储器系统 | |
US7447870B2 (en) | Device for identifying data characteristics for flash memory | |
JP4733461B2 (ja) | 計算機システム、管理計算機及び論理記憶領域の管理方法 | |
CN106874348B (zh) | 文件存储和索引方法、装置及读取文件的方法 | |
WO2017107414A1 (zh) | 文件操作方法和装置 | |
US20110261638A1 (en) | Method for Storing Data into a Memory | |
CN104391725A (zh) | 页面展示方法和页面展示装置 | |
CN101164037A (zh) | 闪速存储器中的直接数据文件存储 | |
CN109660372A (zh) | 一种sdn的业务配置的方法及装置 | |
CN107741833B (zh) | 可嵌套的key-value的存储方法及装置 | |
CN103995855A (zh) | 存储数据的方法和装置 | |
CN103914324A (zh) | 一种自动烧写嵌入式设备固件的方法及其系统 | |
CN106020837A (zh) | 一种加载机顶盒驱动的方法及系统 | |
CN108363684A (zh) | 表单创建方法、装置及服务器 | |
WO2019047901A1 (zh) | 一种数据存放方法 | |
CN102999436A (zh) | 在Nand闪存中生成动态分区信息的方法和装置 | |
CN101727503A (zh) | 一种创建磁盘文件系统的方法 | |
US8595426B2 (en) | Handling commands within a write-once read-many storage device configuration | |
CN103632185A (zh) | 一种具有扩展功能的掩膜智能卡 | |
CN117473117A (zh) | 一种视频循环存储方法、系统及计算机 | |
CN107148612A (zh) | 一种扩展用户分区的方法和装置 | |
US11176089B2 (en) | Systems and methods for implementing dynamic file systems | |
CN105260266A (zh) | 一种快照卷写方法及依赖快照系统 | |
CN101382961A (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 |