CN105302889A - 数据存储结构的转换方法及装置 - Google Patents
数据存储结构的转换方法及装置 Download PDFInfo
- Publication number
- CN105302889A CN105302889A CN201510674405.8A CN201510674405A CN105302889A CN 105302889 A CN105302889 A CN 105302889A CN 201510674405 A CN201510674405 A CN 201510674405A CN 105302889 A CN105302889 A CN 105302889A
- Authority
- CN
- China
- Prior art keywords
- data
- value
- key
- storage
- chained list
- 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
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/22—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据存储结构的转换方案,包括:提取基于原始存储结构的与多个数据对应的第一标识单元,并将第一标识单元确定为转换存储结构中的第一类键,其中,多个数据对应于同一第一标识单元,随后将多个数据确定为转换存储结构中的第一类值,最后将第一类键及第一类值组成的第一键值对存储至键值数据库中。通过本方案实现了对多种存储数据类型以统一的转换存储结构的方式进行数据存储,且在保证较高的数据存储处理效率的前提下,将受物理内存限制的存储方式转换为以磁盘为数据存储目标的、不受物理内存限制的存储方式。由于该存储***可对多种数据结构类型的海量数据进行高效存储,从而使得本方案的数据存储方式拥有较强的业务扩展性。
Description
技术领域
本发明涉及计算机技术领域,具体而言,本发明涉及一种数据存储结构的转换方法及装置。
背景技术
随着信息时代的迅速发展,不仅在大企业,甚至一些小企业也积累了TB量级的数据,各种规模的组织开始有了处理大规模及多重数据种类的数据的需求,而传统的关系型数据库(SQL数据库)在数据存储的可扩展方面几乎达到极限。为了解决大规模数据集合及多重数据种类带来的挑战和大数据应用的难题,非关系型数据库(NoSQL数据库)应运而生。
常用的非关系型数据库包括KV(Key-Value,键值)存储数据库,其数据按照键值对的形式进行组织、索引和存储。KV存储方式非常适合不涉及过多数据关系及业务关系的数据存储业务,其能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能,KV存储数据库的可实现方式包括Redis和LevelDB等,LevelDB能够支持billion级别的数据量,且在这个数量级别下还能够保持非常高的数据存储处理性能,同时,LevelDB可将数据存储至磁盘,有利于数据的永久保存;但是,目前LevelDB的接口仅支持无变形的key-value(键值对)型数据,接口较为单一,对业务的可扩展性较差。Redis是一种高性能的key-value存储***,其可支持多种value类型的数据存储结构,包括string(字符串)类型、list(链表)类型、set(集合)类型、zset(有序集合)类型和hash(哈希)类型,但是,为了保证较高的数据存储处理效率,其数据都是缓存在内存中,即Redis为一种内存型数据库,因此该存储方式受物理内存限制,无法实现大数据存储。
由此可见,如何实现一种数据存储处理效率较高、既支持多种类型的数据存储结构、又不受物理内存限制的存储***是目前急需解决的问题。
发明内容
为克服上述技术问题或者至少部分地解决上述技术问题,特提出以下技术方案:
本发明的实施例提出了一种数据存储结构的转换方法,包括:
提取基于原始存储结构的与多个数据对应的第一标识单元,并将所述第一标识单元确定为转换存储结构中的第一类键,其中,所述多个数据对应于同一第一标识单元;
将所述多个数据确定为转换存储结构中的第一类值;
将所述第一类键及所述第一类值组成的第一键值对存储至键值数据库中。
优选地,该方法还包括:
基于预定划分规则将所述多个数据划分为多个数据分段,并将各个数据分段分别确定为转换存储结构中的第二类值;
确定与各个数据分段相应的分段标识,并将所述分段标识确定为与各个数据分段相应的第二类键;
将所述第二类键及相应的所述第二类值分别组成的多个第二键值对存储至键值数据库中。
其中,基于原始存储结构的多个数据具体包括基于链表存储结构的同一链表中多个数据,所述提取基于原始存储结构的与多个数据对应的第一标识单元,并将所述第一标识单元确定为转换存储结构中的第一类键的步骤,具体包括:
提取基于链表存储结构的多个数据所在链表的链表标识,并将所述链表标识确定为转换存储结构中的第一类键;
其中,所述将所述多个数据确定为转换存储结构中的第一类值的步骤,具体包括:
将所述链表包括的多个数据确定为转换存储结构中的第一类值。
优选地,该方法还包括:
提取所述链表中多个数据的结构相关信息,并将所述结构相关信息确定为转换存储结构中的第三类值;
将所述第一类键及所述第三类值组成的第三键值对存储至键值数据库中。
优选地,该方法还包括:
提取所述链表包括的各个数据中的位置标识,并将所述各个数据中的位置标识确定为转换存储结构中的第四类键;
提取所述链表包括的各个数据中的value数据单元,并将所述各个数据中的value数据单元确定为转换存储结构中的第四类值;
将所述第四类键及相应的所述第四类值分别组成的多个第四键值对存储至键值数据库中。
优选地,该方法还包括:
根据所述转换存储结构,对所述键值数据库进行更新操作。
本发明的实施例提出了一种数据存储结构的转换装置,包括:
第一键确定模块,用于提取基于原始存储结构的与多个数据对应的第一标识单元,并将所述第一标识单元确定为转换存储结构中的第一类键,其中,所述多个数据对应于同一第一标识单元;
第一值确定模块,用于将所述多个数据确定为转换存储结构中的第一类值;
第一键值对存储模块,用于将所述第一类键及所述第一类值组成的第一键值对存储至键值数据库中。
优选地,该装置还包括:
第二键确定模块,用于基于预定划分规则将所述多个数据划分为多个数据分段,并将各个数据分段分别确定为转换存储结构中的第二类值;
第二值确定模块,用于确定与各个数据分段相应的分段标识,并将所述分段标识确定为与各个数据分段相应的第二类键;
第二键值对存储模块,用于将所述第二类键及相应的所述第二类值分别组成的多个第二键值对存储至键值数据库中。
其中,基于原始存储结构的多个数据具体包括基于链表存储结构的同一链表中多个数据,所述第一键确定模块具体用于提取基于链表存储结构的多个数据所在链表的链表标识,并将所述链表标识确定为转换存储结构中的第一类键;所述第一值确定模块具体用于将所述链表包括的多个数据确定为转换存储结构中的第一类值。
优选地,该装置还包括:
第三值确定模块,用于提取所述链表中多个数据的结构相关信息,并将所述结构相关信息确定为转换存储结构中的第三类值;
第三键值对确定模块,用于将所述第一类键及所述第三类值组成的第三键值对存储至键值数据库中。
优选地,该装置还包括:
第四键确定模块,用于提取所述链表包括的各个数据中的位置标识,并将所述各个数据中的位置标识确定为转换存储结构中的第四类键;
第四值确定模块,用于提取所述链表包括的各个数据中的value数据单元,并将所述各个数据中的value数据单元确定为转换存储结构中的第四类值;
第四键值对确定模块,用于将所述第四类键及相应的所述第四类值分别组成的多个第四键值对存储至键值数据库中。
优选地,该装置还包括:
更新模块,用于根据所述转换存储结构,对所述键值数据库进行更新操作。
本发明的实施例中,提出了一种数据存储结构的转换方案,通过将基于原始存储结构的数据转换存储为基于转换存储结构中的数据,实现对多种存储数据类型以统一的转换存储结构的方式进行数据存储。进一步的,将支持多种value类型的数据存储结构的Redis存储***中的多种数据存储结构的数据,转存至仅支持无变形的键值对数据存储结构的LevelDB存储***,实现了在保证较高的数据存储处理效率的前提下,将受物理内存限制的存储方式转换为以磁盘为数据存储目标的、不受物理内存限制的存储方式。通过本发明,最终可实现一种数据存储处理效率较高、既支持多种类型的数据存储结构、又不受物理内存限制的存储***,由于该存储***可对多种数据结构类型的海量数据进行高效存储,从而使得本方案的数据存储方式拥有较强的业务扩展性。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明中一个实施例的数据存储结构的转换方法的流程图;
图2为本发明中一个优选实施例的数据存储结构的转换方法的流程图;
图3为本发明中另一实施例的数据存储结构的转换装置的结构示意图;
图4为本发明中另一优选实施例的数据存储结构的转换装置的结构示意图;
图5为list类型链表中的一个数据的结构示意图;
图6为一个list类型链表中各数据的位置标识及结构示意图;
图7为另一list类型链表中各数据的位置标识及结构示意图;
图8为在图6的list类型链表中的第三节点添加一新节点后的各数据的位置标识及结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领
域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
图1为本发明中一个实施例的数据存储结构的转换方法的流程图。
步骤S110:提取基于原始存储结构的与多个数据对应的第一标识单元,并将第一标识单元确定为转换存储结构中的第一类键,其中,多个数据对应于同一第一标识单元;步骤S120:将多个数据确定为转换存储结构中的第一类值;步骤S130:将第一类键及第一类值组成的第一键值对存储至键值数据库中。
本发明的实施例中,提出了一种数据存储结构的转换方案,通过将基于原始存储结构的数据转换存储为基于转换存储结构中的数据,实现对多种存储数据类型以统一的转换存储结构的方式进行数据存储。进一步的,将支持多种value类型的数据存储结构的Redis存储***中的多种数据存储结构的数据,转存至仅支持无变形的键值对数据存储结构的LevelDB存储***,实现了在保证较高的数据存储处理效率的前提下,将受物理内存限制的存储方式转换为以磁盘为数据存储目标的、不受物理内存限制的存储方式。通过本发明,最终可实现一种数据存储处理效率较高、既支持多种类型的数据存储结构、又不受物理内存限制的存储***,由于该存储***可对多种数据结构类型的海量数据进行高效存储,从而使得本方案的数据存储方式拥有较强的业务扩展性。
本具体实施例中,基于原始存储结构的多个数据具体包括基于链表存储结构的同一链表中多个数据,步骤S110:提取基于链表存储结构的多个数据所在链表的链表标识,并将链表标识确定为转换存储结构中的第一类键;步骤S120:将链表包括的多个数据确定为转换存储结构中的第一类值;步骤S130:将第一类键及第一类值组成的第一键值对存储至键值数据库中。
本实施例中,以原始链表存储结构为list类型链表数据结构为例,该list类型链表为带数据域的双向链表结构,链表中的一个数据的结构如图5所示。
其中,data代表该数据中的value数据单元,prior代表该数据的左边相邻数据的位置标识,next代表该数据的右相邻数据的位置标识。
若list类型链表中存在3个数据,即3个节点,各数据的位置标识及结构如图6所示。
其中,在该包括3个数据的链表中,第一节点数据的位置标识为1,value数据单元为a,左边相邻数据的位置标识为-1,右相邻数据的位置标识为2;第二节点数据的位置标识为2,value数据单元为b,左边相邻数据的位置标识为1,右相邻数据的位置标识为3;第三节点数据的位置标识为3,value数据单元为c,左边相邻数据的位置标识为2,右相邻数据的位置标识为-1;其中,由于第一节点的数据不存在前节点,即不存在左边相邻数据的位置标识,则设为-1,同理,第三节点数据不存在后节点,,即不存在右边相邻数据的位置标识,也设为-1。
步骤S110:提取基于原始存储结构的与多个数据对应的第一标识单元,并将第一标识单元确定为转换存储结构中的第一类键,其中,多个数据对应于同一第一标识单元。
具体地,提取基于链表存储结构的多个数据所在链表的链表标识,并将链表标识确定为转换存储结构中的第一类键,其中,多个数据对应于同一链表标识。
例如,提取如图6所示的list类型链表存储结构中各个数据对应的链表标识,如K,并将K确定为转换存储结构中的第一类键,其中,该链表的第1节点的数据、第2节点的数据和第3节点的数据对应的第一标识单元均为K。
步骤S120:将多个数据确定为转换存储结构中的第一类值。
例如,接上例,将第1节点、第2节点和第3节点的全部数据确定为转换存储结构中的第一类值。
步骤S130:将第一类键及第一类值组成的第一键值对存储至键值数据库中。
例如,接上例,将第一类键“K”及第一类值组成的第一键值对存储至键值数据库中,其中,第一类值包括图6记录的第1节点、第2节点和第3节点的全部数据;如图6中,在包括3个数据的链表中,第一节点数据的位置标识为1,value数据单元为a,左边相邻数据的位置标识为-1,右相邻数据的位置标识为2;第二节点数据的位置标识为2,value数据单元为b,左边相邻数据的位置标识为1,右相邻数据的位置标识为3;第三节点数据的位置标识为3,value数据单元为c,左边相邻数据的位置标识为2,右相邻数据的位置标识为-1,则转换存储后的第一键值对中,第一类键为“K”,第一类值包括第一节点中的位置标识1、value数据单元a、左边相邻数据的位置标识-1、右相邻数据的位置标识2,第二节点中的位置标识2、value数据单元b、左边相邻数据的位置标识1、右相邻数据的位置标识3,第三节点中的位置标识3、value数据单元c、左边相邻数据的位置标识2及右相邻数据的位置标识-1。
在一优选实施例中,如图2所示,该方法还包括步骤S210、步骤S220和步骤S230;步骤S210:基于预定划分规则将多个数据划分为多个数据分段,并将各个数据分段分别确定为转换存储结构中的第二类值;步骤S220:确定与各个数据分段相应的分段标识,并将分段标识确定为与各个数据分段相应的第二类键;步骤S230:将第二类键及相应的第二类值分别组成的多个第二键值对存储至键值数据库中。
例如,如图7所示的list类型链表存储结构中,基于预定划分规则,如将链表中每2个节点划为一个数据分段,将图7所示的链表划分为3个数据分段,并将各个数据分段分别确定为转换存储结构中的第二类值,即将第1节点和第2节点的数据确定为第一个数据分段的第二类值,将第3节点和第4节点的数据确定为第二个数据分段的第二类值,将第5节点和第6节点的数据确定为第三个数据分段的第二类值;根据预定的分段标识确定规则,确定与各个数据分段相应的分段标识,可得到第1节点和第2节点组成的第一个数据分段对应的分段标识为K+1,第3节点和第4节点组成的第二个数据分段对应的分段标识为K+2,第5节点和第6节点组成的第三个数据分段对应的分段标识为K+3,并将分段标识确定为与各个数据分段相应的第二类键;将K+1及第1节点和第2节点的数据组成的第二键值对、将K+2及第3节点和第4节点的数据组成的第二键值对、将K+3及第5节点和第6节点的数据组成的第二键值对分别存储至键值数据库中,如图7中,在包括6个数据的链表中,第一节点数据的位置标识为1,value数据单元为a,左边相邻数据的位置标识为-1,右相邻数据的位置标识为2;第二节点数据的位置标识为2,value数据单元为b,左边相邻数据的位置标识为1,右相邻数据的位置标识为3;第三节点数据的位置标识为3,value数据单元为c,左边相邻数据的位置标识为2,右相邻数据的位置标识为-1;第四节点数据的位置标识为4,value数据单元为d,左边相邻数据的位置标识为3,右相邻数据的位置标识为5;第五节点数据的位置标识为5,value数据单元为e,左边相邻数据的位置标识为4,右相邻数据的位置标识为6;第六节点数据的位置标识为6,value数据单元为f,左边相邻数据的位置标识为5,右相邻数据的位置标识为-1;则转换存储后的三个第二键值对分别为:第一个第二键值对中,第二类键为“K+1”,第二类值包括第一节点数据的位置标识1、value数据单元a、左边相邻数据的位置标识-1、右相邻数据的位置标识2,及第二节点数据的位置标识2、value数据单元b、左边相邻数据的位置标识1、右相邻数据的位置标识3;第二个第二键值对中,第二类键为“K+2”,第二类值包括第三节点数据的位置标识3、value数据单元c、左边相邻数据的位置标识2、右相邻数据的位置标识-1,及第四节点数据的位置标识4、value数据单元d、左边相邻数据的位置标识3、右相邻数据的位置标识5;第三个第二键值对中,第二类键为“K+3”,第二类值包括第五节点数据的位置标识5、value数据单元e、左边相邻数据的位置标识4、右相邻数据的位置标识6,及第六节点数据的位置标识6、value数据单元f、左边相邻数据的位置标识5、右相邻数据的位置标识-1。
优选地,该方法还包括步骤S140(图中未示出)和步骤S150(图中未示出);步骤S140:提取链表中多个数据的结构相关信息,并将结构相关信息确定为转换存储结构中的第三类值;步骤S150:将第一类键及第三类值组成的第三键值对存储至键值数据库中。
其中,多个数据的结构相关信息至少包括:
链表中包括数据的数量;
链表中的下一可用的位置标识;
链表的头部数据的位置标识;
链表的尾部数据的位置标识;
链表中每一数据的位置标识;
每一数据在链表中左右相邻两个数据中的位置标识。
例如,如图6所示的list类型链表存储结构中,3个节点的数据的结构相关信息可包括:该链表中包括3个数据,该链表中的下一可用的位置标识为“4”,该链表的头部数据的位置标识为“1”,该链表的尾部数据的位置标识为“3”,第1节点对应的位置标识“1”、prior代表的第1节点数据的左边相邻数据的位置标识“-1”和next代表的第1节点数据的右相邻数据的位置标识“2”,第2节点对应的位置标识“2”、prior代表的第2节点数据的左边相邻数据的位置标识“1”和next代表的第2节点数据的右相邻数据的位置标识“3”,第3节点对应的位置标识“3”、prior代表的第3节点数据的左边相邻数据的位置标识“2”和next代表的第3节点数据的右相邻数据的位置标识“-1”;将上述全部的结构相关信息确定为转换存储结构中的第三类值;该链表的链表标识K为转换存储结构中的第一类键,将第一类键K及包括链表全部结构相关信息的第三类值组成的第三键值对存储至键值数据库中;如图6中,在包括3个数据的链表中,第一节点数据的位置标识为1,value数据单元为a,左边相邻数据的位置标识为-1,右相邻数据的位置标识为2;第二节点数据的位置标识为2,value数据单元为b,左边相邻数据的位置标识为1,右相邻数据的位置标识为3;第三节点数据的位置标识为3,value数据单元为c,左边相邻数据的位置标识为2,右相邻数据的位置标识为-1,则转换存储后的第三键值对中,第一类键为“K”,第三类值包括第一节点中的位置标识1、左边相邻数据的位置标识-1、右相邻数据的位置标识2,第二节点中的位置标识2、左边相邻数据的位置标识1、右相邻数据的位置标识3,第三节点中的位置标识3、左边相邻数据的位置标识2及右相邻数据的位置标识-1。
更优选地,该方法还包括步骤S160(图中未示出)、步骤S170(图中未示出)和步骤S180(图中未示出);步骤S160:提取链表包括的各个数据中的位置标识,并将各个数据中的位置标识确定为转换存储结构中的第四类键;步骤S170:提取链表包括的各个数据中的value数据单元,并将各个数据中的value数据单元确定为转换存储结构中的第四类值;步骤S180:将第四类键及相应的第四类值分别组成的多个第四键值对存储至键值数据库中。
例如,如图6的list类型链表存储结构中,提取各个数据中的位置标识得到第1节点数据的位置标识为“1”,第2节点数据的位置标识为“2”,第3节点数据的位置标识为“3”,将各个数据中的位置标识确定为转换存储结构中的第四类键;提取链表包括的各个数据中的value数据单元得到第1节点的value数据单位为“a”,第2节点的value数据单位为“b”,第3节点的value数据单位为“c”,并将各个数据中的value数据单元确定为转换存储结构中的第四类值;将第四类键及相应的第四类值分别组成的多个第四键值对“1-a”、“2-b”和“3-c”存储至键值数据库中。优选地,该方法还包括步骤S190(图中未示出);步骤S190:根据转换存储结构,对键值数据库进行更新操作。
例如,接上例,在图6所示的链表中的第2节点与第3节点中加入一新节点第4节点,第4节点数据的value数据单元为d,则键值数据库中,将第一类键为“K”的第一键值对的第一类值进行修改,在第一类值中添加第4节点的数据;,在第一类值中添加第4节点后第2节点的prior的位置标识,与第3节点的next的位置标识会随之发生变化,,在第一类值中添加第4节点后包括的更新后链表的全部数据信息,具体地,更新后的链表数据结构如图8所示。
在一具体应用场景中,在一list类型链表中包括n个节点,每个节点对应的value数据单元数据为一串大于10000字节的字符型数据,首先提取该链表的结构相关信息,可包括:每个节点对应的位置标识“1”、prior代表的每个节点数据的左边相邻数据的位置标识和next代表的每个节点数据的右相邻数据的位置标识,链表的头部数据的位置标识为1,链表的尾部数据的位置标识为n,该链表中包括n个数据,该链表中的下一可用的位置标识为“n+1”,将上述该链表的结构相关信息确定为转换存储结构中的第一类值,该链表的链表标识K确定为第一类键,则将第一类键及第一类值组成的第一键值对存储至键值数据库中;同时,提取各节点的位置标识确定为转换存储结构中的第三类键,各个节点数据中的value数据单元确定为转换存储结构中的与第三类键相应的第三类值,并将第三类键及相应的第三类值分别组成的n个第三键值对存储至键值数据库中。通过该存储方式,通过查询第一键值对可确定各节点的结构信息,如某一节点的位置信息,随后,再基于该位置信息通过查询第三键值对可得到该节点的具体数据值,通过对包含较大数据的链表进行结构和值的拆分存储,可实现高效的读取和更新操作,从而使得本方案的数据存储方式拥有较强的业务扩展性。
图3为本发明中另一实施例的数据存储结构的转换装置的结构示意图。
第一键确定模块310提取基于原始存储结构的与多个数据对应的第一标识单元,并将第一标识单元确定为转换存储结构中的第一类键,其中,多个数据对应于同一第一标识单元;第一值确定模块320将多个数据确定为转换存储结构中的第一类值;第一键值对存储模块330将第一类键及第一类值组成的第一键值对存储至键值数据库中。
本发明的实施例中,提出了一种数据存储结构的转换方案,通过将基于原始存储结构的数据转换存储为基于转换存储结构中的数据,实现对多种存储数据类型以统一的转换存储结构的方式进行数据存储。进一步的,将支持多种value类型的数据存储结构的Redis存储***中的多种数据存储结构的数据,转存至仅支持无变形的键值对数据存储结构的LevelDB存储***,实现了在保证较高的数据存储处理效率的前提下,将受物理内存限制的存储方式转换为以磁盘为数据存储目标的、不受物理内存限制的存储方式。通过本发明,最终可实现一种数据存储处理效率较高、既支持多种类型的数据存储结构、又不受物理内存限制的存储***,由于该存储***可对多种数据结构类型的海量数据进行高效存储,从而使得本方案的数据存储方式拥有较强的业务扩展性。
本具体实施例中,基于原始存储结构的多个数据具体包括基于链表存储结构的同一链表中多个数据,第一键确定模块310提取基于链表存储结构的多个数据所在链表的链表标识,并将链表标识确定为转换存储结构中的第一类键;第一值确定模块320将链表包括的多个数据确定为转换存储结构中的第一类值;第一键值对存储模块330将第一类键及第一类值组成的第一键值对存储至键值数据库中。
本实施例中,以原始链表存储结构为list类型链表数据结构为例,该list类型链表为带数据域的双向链表结构,链表中的一个数据的结构如图5所示。
其中,data代表该数据中的value数据单元,prior代表该数据的左边相邻数据的位置标识,next代表该数据的右相邻数据的位置标识。
若list类型链表中存在3个数据,即3个节点,各数据的位置标识及结构如图6。
其中,在该包括3个数据的链表中,第一节点数据的位置标识为1,value数据单元为a,左边相邻数据的位置标识为-1,右相邻数据的位置标识为2;第二节点数据的位置标识为2,value数据单元为b,左边相邻数据的位置标识为1,右相邻数据的位置标识为3;第三节点数据的位置标识为3,value数据单元为c,左边相邻数据的位置标识为2,右相邻数据的位置标识为-1;其中,由于第一节点的数据不存在前节点,即不存在左边相邻数据的位置标识,则设为-1,同理,第三节点数据不存在后节点,,即不存在右边相邻数据的位置标识,也设为-1。
第一键确定模块310提取基于原始存储结构的与多个数据对应的第一标识单元,并将第一标识单元确定为转换存储结构中的第一类键,其中,多个数据对应于同一第一标识单元。
具体地,提取基于链表存储结构的多个数据所在链表的链表标识,并将链表标识确定为转换存储结构中的第一类键,其中,多个数据对应于同一链表标识。
例如,提取如图6所示的list类型链表存储结构中各个数据对应的链表标识,如K,并将K确定为转换存储结构中的第一类键,其中,该链表的第1节点的数据、第2节点的数据和第3节点的数据对应的第一标识单元均为K。
第一值确定模块320将多个数据确定为转换存储结构中的第一类值。
例如,接上例,将第1节点、第2节点和第3节点的全部数据确定为转换存储结构中的第一类值。
第一键值对存储模块330将第一类键及第一类值组成的第一键值对存储至键值数据库中。
例如,接上例,将第一类键“K”及第一类值组成的第一键值对存储至键值数据库中,其中,第一类值包括图6记录的第1节点、第2节点和第3节点的全部数据。
在一优选实施例中,如图4所示,该装置还包括第二键确定模块410、第二值确定模块420和第二键值对存储模块430;第二键确定模块410基于预定划分规则将多个数据划分为多个数据分段,并将各个数据分段分别确定为转换存储结构中的第二类值;第二值确定模块420确定与各个数据分段相应的分段标识,并将分段标识确定为与各个数据分段相应的第二类键;第二键值对存储模块430将第二类键及相应的第二类值分别组成的多个第二键值对存储至键值数据库中。
例如,如图7所示的list类型链表存储结构中,基于预定划分规则,如将链表中每2个节点划为一个数据分段,将图7所示的链表划分为3个数据分段,并将各个数据分段分别确定为转换存储结构中的第二类值,即将第1节点和第2节点的数据确定为第一个数据分段的第二类值,将第3节点和第4节点的数据确定为第二个数据分段的第二类值,将第5节点和第6节点的数据确定为第三个数据分段的第二类值;根据预定的分段标识确定规则,确定与各个数据分段相应的分段标识,可得到第1节点和第2节点组成的第一个数据分段对应的分段标识为K+1,第3节点和第4节点组成的第二个数据分段对应的分段标识为K+2,第5节点和第6节点组成的第三个数据分段对应的分段标识为K+3,并将分段标识确定为与各个数据分段相应的第二类键;将K+1及第1节点和第2节点的数据组成的第二键值对、将K+2及第3节点和第4节点的数据组成的第二键值对、将K+3及第5节点和第6节点的数据组成的第二键值对分别存储至键值数据库中。
优选地,该装置还包括第三值确定模块(图中未示出)和第三键值对确定模块(图中未示出);第三值确定模块提取链表中多个数据的结构相关信息,并将结构相关信息确定为转换存储结构中的第三类值;第三键值对确定模块将第一类键及第三类值组成的第三键值对存储至键值数据库中。
其中,多个数据的结构相关信息包括但不限于:
链表中包括数据的数量;
链表中的下一可用的位置标识;
链表的头部数据的位置标识;
链表的尾部数据的位置标识;
链表中每一数据的位置标识;
每一数据在链表中左右相邻两个数据中的位置标识。
例如,如图6所示的list类型链表存储结构中,3个节点的数据的结构相关信息可包括:该链表中包括3个数据,该链表中的下一可用的位置标识为“4”,该链表的头部数据的位置标识为“1”,该链表的尾部数据的位置标识为“3”,第1节点对应的位置标识“1”、prior代表的第1节点数据的左边相邻数据的位置标识“-1”和next代表的第1节点数据的右相邻数据的位置标识“2”,第2节点对应的位置标识“2”、prior代表的第2节点数据的左边相邻数据的位置标识“1”和next代表的第2节点数据的右相邻数据的位置标识“3”,第3节点对应的位置标识“3”、prior代表的第3节点数据的左边相邻数据的位置标识“2”和next代表的第3节点数据的右相邻数据的位置标识“-1”;将上述全部的结构相关信息确定为转换存储结构中的第三类值;该链表的链表标识K为转换存储结构中的第一类键,将第一类键K及包括链表全部结构相关信息的第三类值组成的第三键值对存储至键值数据库中。
更优选地,该装置还包括第四键确定模块(图中未示出)、第四值确定模块(图中未示出)和第四键值对确定模块(图中未示出);第四键确定模块提取链表包括的各个数据中的位置标识,并将各个数据中的位置标识确定为转换存储结构中的第四类键;第四值确定模块提取链表包括的各个数据中的value数据单元,并将各个数据中的value数据单元确定为转换存储结构中的第四类值;第四键值对确定模块将第四类键及相应的第四类值分别组成的多个第四键值对存储至键值数据库中。
例如,如图6的list类型链表存储结构中,提取各个数据中的位置标识得到第1节点数据的位置标识为“1”,第2节点数据的位置标识为“2”,第3节点数据的位置标识为“3”,将各个数据中的位置标识确定为转换存储结构中的第四类键;提取链表包括的各个数据中的value数据单元得到第1节点的value数据单位为“a”,第2节点的value数据单位为“b”,第3节点的value数据单位为“c”,并将各个数据中的value数据单元确定为转换存储结构中的第四类值;将第四类键及相应的第四类值分别组成的多个第四键值对“1-a”、“2-b”和“3-c”存储至键值数据库中。优选地,该装置还包括更新模块(图中未示出);更新模块根据转换存储结构,对键值数据库进行更新操作。
例如,接上例,在图6所示的链表中的第2节点与第3节点中加入一新节点第4节点,第4节点数据的value数据单元为d,则键值数据库中,将第一类键为“K”的第一键值对的第一类值进行修改,在第一类值中添加第4节点的数据;,在第一类值中添加第4节点后第2节点的prior的位置标识,与第3节点的next的位置标识会随之发生变化,,在第一类值中添加第4节点后包括的更新后链表的全部数据信息,具体地,更新后的链表数据结构如图8所示。
在一具体应用场景中,在一list类型链表中包括n个节点,每个节点对应的value数据单元数据为一串大于10000字节的字符型数据,首先提取该链表的结构相关信息,可包括:每个节点对应的位置标识“1”、prior代表的每个节点数据的左边相邻数据的位置标识和next代表的每个节点数据的右相邻数据的位置标识,链表的头部数据的位置标识为1,链表的尾部数据的位置标识为n,该链表中包括n个数据,该链表中的下一可用的位置标识为“n+1”,将上述该链表的结构相关信息确定为转换存储结构中的第一类值,该链表的链表标识K确定为第一类键,则将第一类键及第一类值组成的第一键值对存储至键值数据库中;同时,提取各节点的位置标识确定为转换存储结构中的第三类键,各个节点数据中的value数据单元确定为转换存储结构中的与第三类键相应的第三类值,并将第三类键及相应的第三类值分别组成的n个第三键值对存储至键值数据库中。通过该存储方式,通过查询第一键值对可确定各节点的结构信息,如某一节点的位置信息,随后,再基于该位置信息通过查询第三键值对可得到该节点的具体数据值,通过对包含较大数据的链表进行结构和值的拆分存储,可实现高效的读取和更新操作,从而使得本方案的数据存储方式拥有较强的业务扩展性。
本技术领域技术人员可以理解,本发明包括涉及用于执行本申请中所述操作中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-OnlyMemory,只读存储器)、RAM(RandomAccessMemory,随即存储器)、EPROM(ErasableProgrammableRead-OnlyMemory,可擦写可编程只读存储器)、EEPROM(ElectricallyErasableProgrammableRead-OnlyMemory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种数据存储结构的转换方法,其特征在于,包括:
提取基于原始存储结构的与多个数据对应的第一标识单元,并将所述第一标识单元确定为转换存储结构中的第一类键,其中,所述多个数据对应于同一第一标识单元;
将所述多个数据确定为转换存储结构中的第一类值;
将所述第一类键及所述第一类值组成的第一键值对存储至键值数据库中。
2.根据权利要求1所述的数据存储结构的转换方法,其中,该方法还包括:
基于预定划分规则将所述多个数据划分为多个数据分段,并将各个数据分段分别确定为转换存储结构中的第二类值;
确定与各个数据分段相应的分段标识,并将所述分段标识确定为与各个数据分段相应的第二类键;
将所述第二类键及相应的所述第二类值分别组成的多个第二键值对存储至键值数据库中。
3.根据权利要求1或2所述的数据存储结构的转换方法,其中,基于原始存储结构的多个数据具体包括基于链表存储结构的同一链表中多个数据,所述提取基于原始存储结构的与多个数据对应的第一标识单元,并将所述第一标识单元确定为转换存储结构中的第一类键的步骤,具体包括:
提取基于链表存储结构的多个数据所在链表的链表标识,并将所述链表标识确定为转换存储结构中的第一类键;
其中,所述将所述多个数据确定为转换存储结构中的第一类值的步骤,具体包括:
将所述链表包括的多个数据确定为转换存储结构中的第一类值。
4.根据权利要求3所述的数据存储结构的转换方法,其中,该方法还包括:
提取所述链表中多个数据的结构相关信息,并将所述结构相关信息确定为转换存储结构中的第三类值;
将所述第一类键及所述第三类值组成的第三键值对存储至键值数据库中。
5.根据权利要求4所述的数据存储结构的转换方法,其中,该方法还包括:
提取所述链表包括的各个数据中的位置标识,并将所述各个数据中的位置标识确定为转换存储结构中的第四类键;
提取所述链表包括的各个数据中的value数据单元,并将所述各个数据中的value数据单元确定为转换存储结构中的第四类值;
将所述第四类键及相应的所述第四类值分别组成的多个第四键值对存储至键值数据库中。
6.根据权利要求1-5中任一项所述的数据存储结构的转换方法,其中,该方法还包括:
当基于原始存储结构的任一数据发生变更时,用于根据所述转换存储结构,对所述键值数据库中的第一键值对、第二键值对、第三键值对及第四键值对进行与各个换转存储结构相匹配的更新操作。
7.一种数据存储结构的转换装置,其特征在于,包括:
第一键确定模块,用于提取基于原始存储结构的与多个数据对应的第一标识单元,并将所述第一标识单元确定为转换存储结构中的第一类键,其中,所述多个数据对应于同一第一标识单元;
第一值确定模块,用于将所述多个数据确定为转换存储结构中的第一类值;
第一键值对存储模块,用于将所述第一类键及所述第一类值组成的第一键值对存储至键值数据库中。
8.根据权利要求7所述的数据存储结构的转换装置,其中,该装置还包括:
第二键确定模块,用于基于预定划分规则将所述多个数据划分为多个数据分段,并将各个数据分段分别确定为转换存储结构中的第二类值;
第二值确定模块,用于确定与各个数据分段相应的分段标识,并将所述分段标识确定为与各个数据分段相应的第二类键;
第二键值对存储模块,用于将所述第二类键及相应的所述第二类值分别组成的多个第二键值对存储至键值数据库中。
9.根据权利要求7或8所述的数据存储结构的转换装置,其中,基于原始存储结构的多个数据具体包括基于链表存储结构的同一链表中多个数据,所述第一键确定模块具体用于提取基于链表存储结构的多个数据所在链表的链表标识,并将所述链表标识确定为转换存储结构中的第一类键;所述第一值确定模块具体用于将所述链表包括的多个数据确定为转换存储结构中的第一类值。
10.根据权利要求9所述的数据存储结构的转换装置,其中,该装置还包括:
第三值确定模块,用于提取所述链表中多个数据的结构相关信息,并将所述结构相关信息确定为转换存储结构中的第三类值;
第三键值对确定模块,用于将所述第一类键及所述第三类值组成的第三键值对存储至键值数据库中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510674405.8A CN105302889B (zh) | 2015-10-16 | 2015-10-16 | 数据存储结构的转换方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510674405.8A CN105302889B (zh) | 2015-10-16 | 2015-10-16 | 数据存储结构的转换方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105302889A true CN105302889A (zh) | 2016-02-03 |
CN105302889B CN105302889B (zh) | 2019-06-04 |
Family
ID=55200159
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510674405.8A Active CN105302889B (zh) | 2015-10-16 | 2015-10-16 | 数据存储结构的转换方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105302889B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106777293A (zh) * | 2016-12-29 | 2017-05-31 | 北京奇虎科技有限公司 | 数据存储和查找方法及装置 |
CN112148795A (zh) * | 2020-09-27 | 2020-12-29 | 上海依图网络科技有限公司 | 一种数据处理方法、装置、设备及介质 |
WO2021042993A1 (zh) * | 2019-09-04 | 2021-03-11 | 深圳前海微众银行股份有限公司 | 一种基于Redis协议的KV数据存储方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件***元数据管理方法 |
CN102129458A (zh) * | 2011-03-09 | 2011-07-20 | 胡劲松 | 关系型数据库的存储方法及装置 |
US20110196844A1 (en) * | 2006-11-01 | 2011-08-11 | Ab Initio Technology Llc | Managing storage of individually accessible data units |
CN103678293A (zh) * | 2012-08-29 | 2014-03-26 | 百度在线网络技术(北京)有限公司 | 一种数据存储方法及装置 |
CN104216961A (zh) * | 2014-08-21 | 2014-12-17 | 北京奇艺世纪科技有限公司 | 一种数据处理方法和装置 |
-
2015
- 2015-10-16 CN CN201510674405.8A patent/CN105302889B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110196844A1 (en) * | 2006-11-01 | 2011-08-11 | Ab Initio Technology Llc | Managing storage of individually accessible data units |
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件***元数据管理方法 |
CN102129458A (zh) * | 2011-03-09 | 2011-07-20 | 胡劲松 | 关系型数据库的存储方法及装置 |
CN103678293A (zh) * | 2012-08-29 | 2014-03-26 | 百度在线网络技术(北京)有限公司 | 一种数据存储方法及装置 |
CN104216961A (zh) * | 2014-08-21 | 2014-12-17 | 北京奇艺世纪科技有限公司 | 一种数据处理方法和装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106777293A (zh) * | 2016-12-29 | 2017-05-31 | 北京奇虎科技有限公司 | 数据存储和查找方法及装置 |
WO2021042993A1 (zh) * | 2019-09-04 | 2021-03-11 | 深圳前海微众银行股份有限公司 | 一种基于Redis协议的KV数据存储方法及装置 |
CN112148795A (zh) * | 2020-09-27 | 2020-12-29 | 上海依图网络科技有限公司 | 一种数据处理方法、装置、设备及介质 |
CN112148795B (zh) * | 2020-09-27 | 2021-06-15 | 上海依图网络科技有限公司 | 一种数据处理方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105302889B (zh) | 2019-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103514201B (zh) | 一种非关系型数据库的数据查询方法和装置 | |
CN105260464A (zh) | 数据存储结构的转换方法及装置 | |
CN108733681B (zh) | 信息处理方法及装置 | |
CN111046034B (zh) | 管理内存数据及在内存中维护数据的方法和*** | |
CN103959254B (zh) | 用于优化去重后的数据的迁移/复制的方法和装置 | |
CN103279532B (zh) | 多集合元素去重并标识所属集合的过滤***及其方法 | |
CN106933836B (zh) | 一种基于分表的数据存储方法和*** | |
CN107807932B (zh) | 一种基于路径枚举的层级数据管理方法和*** | |
CN103209153B (zh) | 消息处理方法、装置及*** | |
CN107977396B (zh) | 一种KeyValue数据库的数据表的更新方法与表数据更新装置 | |
CA2524033A1 (en) | Methods and systems for joining database tables using indexing data structures | |
CN103914483B (zh) | 文件存储方法、装置及文件读取方法、装置 | |
CN103559301A (zh) | 更新数据的方法、数据库触发器和搜索引擎 | |
CN105550219A (zh) | 一种信息资源的自动编目方法 | |
CN105009067A (zh) | 管理对存储数据单元的操作 | |
CN108875077B (zh) | 数据库的列存储方法、装置、服务器及存储介质 | |
CN102999527B (zh) | Sns网络中动态信息推送方法及*** | |
CN100433019C (zh) | 一种数据存储与检索的方法及*** | |
CN106156070A (zh) | 一种查询方法、文件合并方法与相关装置 | |
CN105302889A (zh) | 数据存储结构的转换方法及装置 | |
CN102867134B (zh) | 一种对基因序列片段进行拼接的***和方法 | |
CN108170752A (zh) | 基于模板的元数据管理方法和*** | |
CN104866610A (zh) | 一种基于相似类型匹配估算的SQLite删除数据恢复方法 | |
CN104636401A (zh) | 一种scada***数据回滚的方法及装置 | |
CN103136244A (zh) | 基于云计算平台的并行数据挖掘方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into 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: 20220725 Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015 Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park) Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Patentee before: Qizhi software (Beijing) Co.,Ltd. |