CN105159987A - 一种数据存储、查找方法及装置 - Google Patents

一种数据存储、查找方法及装置 Download PDF

Info

Publication number
CN105159987A
CN105159987A CN201510548484.8A CN201510548484A CN105159987A CN 105159987 A CN105159987 A CN 105159987A CN 201510548484 A CN201510548484 A CN 201510548484A CN 105159987 A CN105159987 A CN 105159987A
Authority
CN
China
Prior art keywords
value
index file
data
file
target
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
Application number
CN201510548484.8A
Other languages
English (en)
Other versions
CN105159987B (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.)
Shenzhen Ipanel TV Inc
Original Assignee
Shenzhen Ipanel TV Inc
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 Shenzhen Ipanel TV Inc filed Critical Shenzhen Ipanel TV Inc
Priority to CN201510548484.8A priority Critical patent/CN105159987B/zh
Publication of CN105159987A publication Critical patent/CN105159987A/zh
Application granted granted Critical
Publication of CN105159987B publication Critical patent/CN105159987B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种数据存储、查找方法及装置,其中存储方法包括:对若干个kv数据对按照k值升序或降序的方式进行排序整理,得到有序数据,按照排序顺序,将有序数据中各kv数据对进行分组,将各分组内kv数据对的v值存储在与各分组唯一对应的数据文件中,将各分组内kv数据对的k值,以及与k值对应的v值在所述数据文件中的位置信息,存储在与各分组唯一对应的索引文件中,其中,与各分组唯一对应的数据文件和索引文件的名称相同,最后采用内存映射方式,将数据文件和索引文件映射到服务器内存中,得到内存映射数据。本申请采用内存映射方式,无需将所有kv数据读取到内存中,降低了初始化耗时、减少了对服务器内存的占用。

Description

一种数据存储、查找方法及装置
技术领域
本申请涉及数据处理技术领域,更具体地说,涉及一种数据存储、查找方法及装置。
背景技术
kv是key-value的简称,是指计算机数据结构中,采用一个键值对应一个数据值的数据表示方法。
现有的kv数据查询方式一般都是,首先将硬盘上的数据库数据或者文件数据导入到内存中,在内存中构造哈希表,然后按照哈希表来进行数据查询。
但是,采用哈希表技术存在以下问题:哈希表存储方式需要把硬盘上的数据读取到内存中,再按照kv方式构造哈希表。在初始化的过程中,从硬盘上读取数据到内存的过程需要耗费大量时间。并且,哈希表存储方式需要将硬盘上的数据全部读取到内存中,这就要求服务器的内存大小必须大于数据本身大小,因此极其耗费内存。
发明内容
有鉴于此,本申请提供了一种数据存储、查找方法及装置,用于解决现有采用内存哈希表技术查询数据方法所存在的初始化消耗时间长、占用内存大的问题。
为了实现上述目的,现提出的方案如下:
一种数据存储方法,包括:
按照k值升序或者降序的方式,将若干个kv数据对整理成有序数据;
按照排序顺序,将所述有序数据中各kv数据对进行分组;
将各分组内kv数据对的v值存储在与各分组唯一对应的数据文件中;
将各分组内kv数据对的k值,以及与k值对应的v值在所述数据文件中的位置信息,存储在与各分组唯一对应的索引文件中,其中,与各分组唯一对应的数据文件和索引文件的名称相同;
采用内存映射方式,将各个所述数据文件、各个所述索引文件映射到服务器内存中,得到内存映射数据。
一种数据查找方法,基于上述的数据存储方法,利用所述内存映射数据进行数据查找,该数据查找方法包括:
接收用户输入的目标k值;
利用所述内存映射数据,查找所述目标k值所在的索引文件,确定为目标索引文件;
利用所述内存映射数据,在所述目标索引文件中查找目标k值,并确定与目标k值对应的v值在所述数据文件中的位置信息;
利用所述内存映射数据以及确定的位置信息,在与所述目标索引文件相同名称的数据文件中查找v值,并将查找到的v值返回给用户。
优选的,所述查找所述目标k值所在的索引文件,确定为目标索引文件的过程包括:
将顺序排序的若干个索引文件确定为指定索引文件串;
读取所述指定索引文件串中的第一个索引文件;
判断所述第一个索引文件中存储的k值的区间是否包含所述目标k值,若是,将所述第一个索引文件确定为目标索引文件,若否,读取所述指定索引文件串中的最后一个索引文件;
判断所述最后一个索引文件中存储的k值的区间是否包含所述目标k值,若是,将所述最后一个索引文件确定为目标索引文件,若否,读取所述指定索引文件串中的中间索引文件;
判断所述目标k值位于第一数值区间、第二数值区间、第三数值区间中的哪一个数值区间,其中,第一数值区间为小于所述中间索引文件中所存储的最小的k值的区间,第二数值区间为所述中间索引文件中存储的各个k值所属的最小区间,第三数值区间为大于所述中间索引文件中所存储的最大的k值的区间;
若所述目标k值位于第一数值区间,则将所述指定索引文件串中由所述第一个索引文件至所述中间索引文件的索引文件串确定为指定索引文件串,并返回执行所述读取所述指定索引文件串中的第一个索引文件的步骤;
若所述目标k值位于第三数值区间,则将所述指定索引文件串中由所述中间索引文件至所述最后一个索引文件的索引文件串确定为指定索引文件串,并返回执行所述读取所述指定索引文件串中的第一个索引文件的步骤;
若所述目标k值位于第二数值区间,则将所述中间索引文件确定为目标索引文件。
优选的,所述在所述目标索引文件中查找目标k值,包括:
将所述目标索引文件中顺序存储的若干个k值确定为指定k值序列;
读取所述指定k值序列中的第一个k值;
判断所述第一个k值是否等于所述目标k值,若是,将所述第一个k值确定为目标k值,若否,读取所述指定k值序列中的最后一个k值;
判断所述最后一个k值是否等于所述目标k值,若是,将所述最后一个k值确定为目标k值,若否,读取所述指定k值序列中的中间k值;
确定所述中间k值与所述目标k值的大小关系;
若所述中间k值等于所述目标k值,则将所述中间k值确定为目标k值;
若所述中间k值大于所述目标k值,则将所述指定k值序列中由所述第一个k值至所述中间k值的k值序列确定为指定k值序列,并返回执行所述读取所述指定k值序列中的第一个k值的步骤;
若所述中间k值小于所述目标k值,则将所述指定k值序列中由所述中间k值至所述最后一个k值的k值序列确定为指定k值序列,并返回执行所述读取所述指定k值序列中的第一个k值的步骤。
一种数据存储装置,包括:
数据整理单元,用于按照k值升序或者降序的方式,将若干个kv数据对整理成有序数据;
数据分组单元,用于按照排序顺序,将所述有序数据中各kv数据对进行分组;
v值存储单元,用于将各分组内kv数据对的v值存储在与各分组唯一对应的数据文件中;
k值存储单元,用于将各分组内kv数据对的k值,以及与k值对应的v值在所述数据文件中的位置信息,存储在与各分组唯一对应的索引文件中,其中,与各分组唯一对应的数据文件和索引文件的名称相同;
内存映射单元,用于采用内存映射方式,将各个所述数据文件、各个所述索引文件映射到服务器内存中,得到内存映射数据。
一种数据查找装置,基于上述的数据存储装置,利用所述内存映射数据进行数据查找,该数据查找装置包括:
k值接收单元,用于接收用户输入的目标k值;
索引文件查找单元,用于利用所述内存映射数据,查找所述目标k值所在的索引文件,确定为目标索引文件;
k值查找单元,用于利用所述内存映射数据,在所述目标索引文件中查找目标k值,并确定与目标k值对应的v值在所述数据文件中的位置信息;
v值查找单元,用于利用所述内存映射数据以及确定的位置信息,在与所述目标索引文件相同名称的数据文件中查找v值,并将查找到的v值返回给用户。
优选的,所述索引文件查找单元包括:
第一索引文件查找子单元,用于将顺序排序的若干个索引文件确定为指定索引文件串;
第二索引文件查找子单元,用于读取所述指定索引文件串中的第一个索引文件;
第三索引文件查找子单元,用于判断所述第一个索引文件中存储的k值的区间是否包含所述目标k值,若是,将所述第一个索引文件确定为目标索引文件,若否,读取所述指定索引文件串中的最后一个索引文件;
第四索引文件查找子单元,用于判断所述最后一个索引文件中存储的k值的区间是否包含所述目标k值,若是,将所述最后一个索引文件确定为目标索引文件,若否,读取所述指定索引文件串中的中间索引文件;
第五索引文件查找子单元,用于判断所述目标k值位于第一数值区间、第二数值区间、第三数值区间中的哪一个数值区间,其中,第一数值区间为小于所述中间索引文件中所存储的最小的k值的区间,第二数值区间为所述中间索引文件中存储的各个k值所属的最小区间,第三数值区间为大于所述中间索引文件中所存储的最大的k值的区间;若所述目标k值位于第一数值区间,则将所述指定索引文件串中由所述第一个索引文件至所述中间索引文件的索引文件串确定为指定索引文件串,并返回执行所述第二索引文件查找子单元;若所述目标k值位于第三数值区间,则将所述指定索引文件串中由所述中间索引文件至所述最后一个索引文件的索引文件串确定为指定索引文件串,并返回执行所述第二索引文件查找子单元;若所述目标k值位于第二数值区间,则将所述中间索引文件确定为目标索引文件。
优选的,所述k值查找单元包括:
第一k值查找子单元,用于将所述目标索引文件中顺序存储的若干个k值确定为指定k值序列;
第二k值查找子单元,用于读取所述指定k值序列中的第一个k值;
第三k值查找子单元,用于判断所述第一个k值是否等于所述目标k值,若是,将所述第一个k值确定为目标k值,若否,读取所述指定k值序列中的最后一个k值;
第四k值查找子单元,用于判断所述最后一个k值是否等于所述目标k值,若是,将所述最后一个k值确定为目标k值,若否,读取所述指定k值序列中的中间k值;
第五k值查找子单元,用于确定所述中间k值与所述目标k值的大小关系;若所述中间k值等于所述目标k值,则将所述中间k值确定为目标k值;若所述中间k值大于所述目标k值,则将所述指定k值序列中由所述第一个k值至所述中间k值的k值序列确定为指定k值序列,并返回执行所述第二k值查找子单元;若所述中间k值小于所述目标k值,则将所述指定k值序列中由所述中间k值至所述最后一个k值的k值序列确定为指定k值序列,并返回执行所述第二k值查找子单元。
从上述的技术方案可以看出,本申请实施例提供的数据存储方法,对若干个kv数据对按照k值升序或降序的方式进行排序整理,得到有序数据,然后按照排序顺序,将有序数据中各kv数据对进行分组,将各分组内kv数据对的v值存储在与各分组唯一对应的数据文件中,将各分组内kv数据对的k值,以及与k值对应的v值在所述数据文件中的位置信息,存储在与各分组唯一对应的索引文件中,其中,与各分组唯一对应的数据文件和索引文件的名称相同,最后采用内存映射方式,将数据文件和索引文件映射到服务器内存中,得到内存映射数据。本申请采用内存映射方式,因此无需将所有kv数据读取到内存中,大大降低了初始化耗时,并且采用内存映射技术在后续数据查询过程,仅需要将访问到的数据读取到内存即可,对于未访问到的数据不需要读取到内存中,从而减少了对服务器内存的占用。
进一步地,本申请对于外部的kv数据对进行排序整理,后续可以方便的进行数据的查找。并且,通过将v值单独保存在数据文件中,将k值及对应v值所在数据文件中的位置信息保存在索引文件中,使得数据存储更加灵活,同时避免了因为不同kv数据对的v值所占字符空间大小不一,在采用统一规定v值字符空间时所造成的存储空间浪费或部分v值无法全部存储的问题。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例公开的一种数据存储方法流程图;
图2为本申请实施例公开的一种数据查找方法流程图;
图3为本申请实施例公开的一种查找目标k值所在索引文件的方法流程图;
图4为本申请实施例公开的一种在所述目标索引文件中查找目标k值的方法流程图;
图5为本申请实施例公开的一种数据存储装置结构示意图;
图6为本申请实施例公开的一种数据查找装置结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了解决现有哈希表存储方式所存在的初始化消耗时间长、占用内存大的问题,本案发明人经研究后决定采用内存映射方式,将硬盘等外部kv数据映射到服务器内存中,在数据查找时采用内存映射技术无需将外部kv数据读取到内存中,因此降低了初始化时间且减少了内存占用率。而考虑到数据查询方便,本申请进一步对外部kv数据进行了整理,整理后的kv数据更加便于进行数据查找。
参见图1,图1为本申请实施例公开的一种数据存储方法流程图。
如图1所示,该方法包括:
步骤S100、按照k值升序或者降序的方式,将若干个kv数据对整理成有序数据;
kv数据指的是一种kv结构的数据,一个kv数据对由k值部分和v值部分组成,k值和v值之间具备对应关系。举例如,在视频流中,对于关键帧而言,其有两个因素,一个是时间,另一个是位置,确定的时间和位置对应唯一的一个关键帧。因此一个关键帧数据可以作为一个kv数据对,其中k代表时间,v代表位置。
步骤S110、按照排序顺序,将所述有序数据中各kv数据对进行分组;
具体地,分组时采用的规则可以人为设定,例如按照kv数据对的生成日期进行分组,同一天产生的kv数据对划分为一组等等。
步骤S120、将各分组内kv数据对的v值存储在与各分组唯一对应的数据文件中;
具体地,对于分组后的kv数据对,每一个分组均对应唯一的一个数据文件,不同分组所对应的数据文件名称不同。与各分组对应的数据文件用于存储分组内的kv数据对的v值。
步骤S130、将各分组内kv数据对的k值,以及与k值对应的v值在所述数据文件中的位置信息,存储在与各分组唯一对应的索引文件中;
其中,与各分组唯一对应的数据文件和索引文件的名称相同。与分组对应的索引文件中存储了分组内kv数据对的k值,以及与k值对应的v值在数据文件中的位置信息。这样,后续用户输入待查找k值后,在索引文件中能够找到该k值,并进一步确定k值对应的v值在数据文件中的位置信息,然后可以在与该索引文件同名的数据文件中,按照确定的位置信息找到v值。
步骤S140、采用内存映射方式,将各个所述数据文件、各个所述索引文件映射到服务器内存中,得到内存映射数据。
通过对kv数据对进行整理,得到了一系列的数据文件和索引文件。对于这些文件,可以采用内存映射方式,映射到服务器内存中,得到内存映射数据。后续数据查找过程可以采用内存映射数据进行数据查询。
本申请实施例提供的数据存储方法,采用内存映射方式,因此无需将所有kv数据读取到内存中,大大降低了初始化耗时,并且采用内存映射技术在后续数据查询过程,仅需要将访问到的数据读取到内存即可,对于未访问到的数据不需要读取到内存中,从而减少了对服务器内存的占用。
进一步地,本申请对于外部的kv数据对进行排序整理,后续可以方便的进行数据的查找。并且,通过将v值单独保存在数据文件中,将k值及对应v值所在数据文件中的位置信息保存在索引文件中,使得数据存储更加灵活,同时避免了因为不同kv数据对的v值所占字符空间大小不一,在采用统一规定v值字符空间时所造成的存储空间浪费或部分v值无法全部存储的问题。
为了便于理解,本实施例通过下述具体实例进行说明。
假设原始kv数据对序列包括如下数据,其中‘-’之前的部分表示是k值,‘-’之后的部分表示是v值:
100-v100
3-v3
5-v5
12-v12
200-v200
6-v6
2-v2
第一步、按照k值升序排序后的有序数据为:
2-v2
3-v3
5-v5
6-v6
12-v12
100-v100
200-v200
第二步、对有序数据进行分组,分组时按照kv数据对的生成时间进行分组,其中2-v2、3-v3、5-v5为2014年01月01日生成的,因此将这三个kv数据对分为一组;6-v6、12-v12为2014年01月02日生成的,因此将这两个kv数据对分为一组;100-v100、200-v200为2014年01月03日生成的,因此将这两个kv数据对分为一组。
第三步、分组之后,将v2、v3、v5存储到20140101.dat数据文件中;将v6、v12存储到20140102.dat数据文件中;将v100、v200存储到20140103.dat数据文件中。
其中,定义各v值在数据文件中的存储位置信息用Lv值表示,例如v2在20140101.dat数据文件中的存储位置信息表示为Lv2。
第四步、将<2,Lv2>、<3,Lv3>、<5,Lv5>存储到20140101.idx索引文件中;将<6,Lv6>、<12,Lv12>存储到20140102.idx索引文件中;将<100,Lv100>、<200,Lv200>存储到20140103.idx索引文件中。
第五步、将20140101.dat数据文件、20140102.dat数据文件中、20140103.dat数据文件、20140101.idx索引文件、20140102.idx索引文件、20140103.idx索引文件分别映射到服务器内存中,得到内存映射数据,完成整个流程。
基于上述实施例提供的数据存储方法,本实施例提供了一种数据查找方法,该数据查找方法利用内存映射数据进行数据查找,具体数据查找过程参见图2,图2为本申请实施例公开的一种数据查找方法流程图。
如图2所示,该方法包括:
步骤S200、接收用户输入的目标k值;
步骤S210、查找所述目标k值所在的索引文件,确定为目标索引文件;
具体地,利用所述内存映射数据查找所述目标k值所在的索引文件,确定为目标索引文件。对于如何使用内存映射数据的过程,其为现有技术,本文不做详细介绍。
步骤S220、在所述目标索引文件中查找目标k值,并确定与目标k值对应的v值在所述数据文件中的位置信息;
具体地,利用所述内存映射数据在所述目标索引文件中查找目标k值,并确定与目标k值对应的v值在所述数据文件中的位置信息。对于如何使用内存映射数据的过程,其为现有技术,本文不做详细介绍。
步骤S230、根据确定的位置信息,在与所述目标索引文件相同名称的数据文件中查找v值,并将查找到的v值返回给用户。
具体地,上述根据确定的位置信息,查找v值的过程使用到了内存映射数据,对于如何使用内存映射数据的过程,其为现有技术,本文不做详细介绍。
由于与某一个分组对应的索引文件和数据文件的名称相同,因此在目标索引文件中确定了目标k值对应v值的位置信息后,可以在与目标索引文件同名的数据文件中,指定的位置信息处查找到v值。
需要说明的是,上述整个查找流程都是基于内存映射技术实现,有关内存映射技术的具体细节为本领域技术人员的公知常识,在此不再赘述。本实施例侧重的是具体的数据查询逻辑。
本实施例提供的数据查询方法,基于内存映射技术实现,因此无需将数据读取到内存中,大大降低了初始化耗时,并且查询过程仅需要将访问到的数据读取到内存即可,对于未访问到的数据不需要读取到内存中,从而减少了对服务器内存的占用。具体查询时首先查找k值所在索引文件,进而在索引文件中查找k值及对应v值的位置信息,然后在与索引文件同名的数据文件中,确定的位置信息处读取v值,反馈给用户,实现整个数据查找过程。本申请的数据查找方法在降低了初始化耗时的同时,也能够保证很高的数据查找效率。
接下来,本申请实施例详细介绍上述查找目标k值所在索引文件的过程。参见图3,图3为本申请实施例公开的一种查找目标k值所在索引文件的方法流程图。
如图3所示,该方法包括:
步骤S300、将顺序排序的若干个索引文件确定为指定索引文件串;
步骤S310、读取所述指定索引文件串中的第一个索引文件;
步骤S320、判断所述第一个索引文件中存储的k值的区间是否包含所述目标k值,若是,执行步骤S330,若否,执行步骤S340;
具体地,索引文件中存储了顺序排列的若干个k值,由这些k值中的最小一个和最大一个k值构成k值区间。本步骤中判断目标k值是否归属于k值区间。举例如,索引文件中存储的k值包括1、2、4、8,则k值区间为[1,8]。
步骤S330、将所述第一个索引文件确定为目标索引文件;
步骤S340、读取所述指定索引文件串中的最后一个索引文件;
步骤S350、判断所述最后一个索引文件中存储的k值的区间是否包含所述目标k值,若是,执行步骤S360,若否,执行步骤S370;
具体地,这里k值区间的概念同上述步骤S320中k值区间的概念相同,相关介绍参见上文对应描述,此处不再赘述。
步骤S360、将所述最后一个索引文件确定为目标索引文件;
步骤S370、读取所述指定索引文件串中的中间索引文件;
这里,指定索引文件串中的中间索引文件可以这样理解:如果索引文件串中包含的索引文件数目n为奇数,则中间索引文件为第(n+1)/2个索引文件;如果索引文件串中包含的索引文件数目n为偶数,则中间索引文件为第n/2或n/2+1个索引文件。
步骤S380、判断所述目标k值位于哪一数值区间;
本步骤中将目标k值归属的数值区间分为三个区间,分别为第一数值区间、第二数值区间和第三数值区间。
其中,第一数值区间为小于所述中间索引文件中所存储的最小的k值的区间。举例如,中间索引文件中存储的k值包括5、8、10,则第一数值区间可以是(-∞,5)。
第二数值区间为所述中间索引文件中存储的各个k值所属的最小区间。举例如,中间索引文件中存储的k值包括5、8、10,则第二数值区间可以是[5,10]。
第三数值区间为大于所述中间索引文件中所存储的最大的k值的区间。举例如,中间索引文件中存储的k值包括5、8、10,则第三数值区间可以是(10,+∞)。
步骤S390、若所述目标k值位于第一数值区间,则将所述指定索引文件串中由所述第一个索引文件至所述中间索引文件的索引文件串确定为指定索引文件串,并返回执行步骤S310;
步骤S400、若所述目标k值位于第三数值区间,则将所述指定索引文件串中由所述中间索引文件至所述最后一个索引文件的索引文件串确定为指定索引文件串,并返回执行步骤S310;
步骤S410、若所述目标k值位于第二数值区间,则将所述中间索引文件确定为目标索引文件。
本实施例中介绍了一种查找目标k值所在索引文件的具体实施方式,按照本实施例的查找方法,可以快速的查找到目标索引文件。
在查找到目标索引文件之后,在目标索引文件中查找目标k值。该过程参见图4,图4为本申请实施例公开的一种在所述目标索引文件中查找目标k值的方法流程图。
如图4所示,该方法包括:
步骤S500、将所述目标索引文件中顺序存储的若干个k值确定为指定k值序列;
步骤S510、读取所述指定k值序列中的第一个k值;
步骤S520、判断所述第一个k值是否等于所述目标k值,若是,执行步骤S530,若否,执行步骤S540;
步骤S530、将所述第一个k值确定为目标k值;
步骤S540、读取所述指定k值序列中的最后一个k值;
步骤S550、判断所述最后一个k值是否等于所述目标k值,若是,执行步骤S560,若否,执行步骤S570;
步骤S560、将所述最后一个k值确定为目标k值;
步骤S570、读取所述指定k值序列中的中间k值;
步骤S580、判断所述中间k值与所述目标k值的大小关系;
步骤S590、若所述中间k值等于所述目标k值,则将所述中间k值确定为目标k值;中间k值等于目标k值
步骤S600、若所述中间k值大于所述目标k值,则将所述指定k值序列中由所述第一个k值至所述中间k值的k值序列确定为指定k值序列,并返回执行所述步骤S510;
步骤S610、若所述中间k值小于所述目标k值,则将所述指定k值序列中由所述中间k值至所述最后一个k值的k值序列确定为指定k值序列,并返回执行所述步骤S510。
本实施例中介绍了一种在目标索引文件中查找目标k值的具体实施方式,按照本实施例的查找方法,可以快速的查找到目标k值。查找到目标k值后即可找到与该目标k值对应的v值的位置信息,进而便于在数据文件中查找v值。
下面对本申请实施例提供的数据存储装置进行描述,下文描述的数据存储装置与上文描述的数据存储方法可相互对应参照。
参见图5,图5为本申请实施例公开的一种数据存储装置结构示意图。
如图5所示,该装置包括:
数据整理单元51,用于按照k值升序或者降序的方式,将若干个kv数据对整理成有序数据;
数据分组单元52,用于按照排序顺序,将所述有序数据中各kv数据对进行分组;
v值存储单元53,用于将各分组内kv数据对的v值存储在与各分组唯一对应的数据文件中;
k值存储单元54,用于将各分组内kv数据对的k值,以及与k值对应的v值在所述数据文件中的位置信息,存储在与各分组唯一对应的索引文件中,其中,与各分组唯一对应的数据文件和索引文件的名称相同;
内存映射单元55,用于采用内存映射方式,将各个所述数据文件、各个所述索引文件映射到服务器内存中,得到内存映射数据。
本申请实施例提供的数据存储装置,由内存映射单元采用内存映射方式进行kv数据映射,因此无需将所有kv数据读取到内存中,大大降低了初始化耗时,并且采用内存映射技术在后续数据查询过程,仅需要将访问到的数据读取到内存即可,对于未访问到的数据不需要读取到内存中,从而减少了对服务器内存的占用。
进一步地,本申请利用数据整理单元对外部的kv数据对进行排序整理,后续可以方便的进行数据的查找。并且,通过数据分组单元、v值存储单元及k值存储单元,分别将v值单独保存在数据文件中,将k值及对应v值所在数据文件中的位置信息保存在索引文件中,使得数据存储更加灵活,同时避免了因为不同kv数据对的v值所占字符空间大小不一,在采用统一规定v值字符空间时所造成的存储空间浪费或部分v值无法全部存储的问题。
下面对本申请实施例提供的数据查找装置进行描述,下文描述的数据查找装置与上文描述的数据查找方法可相互对应参照。
参见图6,图6为本申请实施例公开的一种数据查找装置结构示意图。
如图6所示,该装置包括:
k值接收单元61,用于接收用户输入的目标k值;
索引文件查找单元62,用于利用所述内存映射数据,查找所述目标k值所在的索引文件,确定为目标索引文件;
k值查找单元63,用于利用所述内存映射数据,在所述目标索引文件中查找目标k值,并确定与目标k值对应的v值在所述数据文件中的位置信息;
v值查找单元64,用于利用所述内存映射数据以及确定的位置信息,在与所述目标索引文件相同名称的数据文件中查找v值,并将查找到的v值返回给用户。
本实施例提供的数据查找装置,基于内存映射技术实现,因此无需将数据读取到内存中,大大降低了初始化耗时,并且查询过程仅需要将访问到的数据读取到内存即可,对于未访问到的数据不需要读取到内存中,从而减少了对服务器内存的占用。具体查询时首先查找k值所在索引文件,进而在索引文件中查找k值及对应v值的位置信息,然后在与索引文件同名的数据文件中,确定的位置信息处读取v值,反馈给用户,实现整个数据查找过程。本申请的数据查找方法在降低了初始化耗时的同时,也能够保证很高的数据查找效率。
可选的,其中所述索引文件查找单元可以包括:
第一索引文件查找子单元,用于将顺序排序的若干个索引文件确定为指定索引文件串;
第二索引文件查找子单元,用于读取所述指定索引文件串中的第一个索引文件;
第三索引文件查找子单元,用于判断所述第一个索引文件中存储的k值的区间是否包含所述目标k值,若是,将所述第一个索引文件确定为目标索引文件,若否,读取所述指定索引文件串中的最后一个索引文件;
第四索引文件查找子单元,用于判断所述最后一个索引文件中存储的k值的区间是否包含所述目标k值,若是,将所述最后一个索引文件确定为目标索引文件,若否,读取所述指定索引文件串中的中间索引文件;
第五索引文件查找子单元,用于判断所述目标k值位于第一数值区间、第二数值区间、第三数值区间中的哪一个数值区间,其中,第一数值区间为小于所述中间索引文件中所存储的最小的k值的区间,第二数值区间为所述中间索引文件中存储的各个k值所属的最小区间,第三数值区间为大于所述中间索引文件中所存储的最大的k值的区间;若所述目标k值位于第一数值区间,则将所述指定索引文件串中由所述第一个索引文件至所述中间索引文件的索引文件串确定为指定索引文件串,并返回执行所述第二索引文件查找子单元;若所述目标k值位于第三数值区间,则将所述指定索引文件串中由所述中间索引文件至所述最后一个索引文件的索引文件串确定为指定索引文件串,并返回执行所述第二索引文件查找子单元;若所述目标k值位于第二数值区间,则将所述中间索引文件确定为目标索引文件。
可选的,其中所述k值查找单元可以包括:
第一k值查找子单元,用于将所述目标索引文件中顺序存储的若干个k值确定为指定k值序列;
第二k值查找子单元,用于读取所述指定k值序列中的第一个k值;
第三k值查找子单元,用于判断所述第一个k值是否等于所述目标k值,若是,将所述第一个k值确定为目标k值,若否,读取所述指定k值序列中的最后一个k值;
第四k值查找子单元,用于判断所述最后一个k值是否等于所述目标k值,若是,将所述最后一个k值确定为目标k值,若否,读取所述指定k值序列中的中间k值;
第五k值查找子单元,用于确定所述中间k值与所述目标k值的大小关系;若所述中间k值等于所述目标k值,则将所述中间k值确定为目标k值;若所述中间k值大于所述目标k值,则将所述指定k值序列中由所述第一个k值至所述中间k值的k值序列确定为指定k值序列,并返回执行所述第二k值查找子单元;若所述中间k值小于所述目标k值,则将所述指定k值序列中由所述中间k值至所述最后一个k值的k值序列确定为指定k值序列,并返回执行所述第二k值查找子单元。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (8)

1.一种数据存储方法,其特征在于,包括:
按照k值升序或者降序的方式,将若干个kv数据对整理成有序数据;
按照排序顺序,将所述有序数据中各kv数据对进行分组;
将各分组内kv数据对的v值存储在与各分组唯一对应的数据文件中;
将各分组内kv数据对的k值,以及与k值对应的v值在所述数据文件中的位置信息,存储在与各分组唯一对应的索引文件中,其中,与各分组唯一对应的数据文件和索引文件的名称相同;
采用内存映射方式,将各个所述数据文件、各个所述索引文件映射到服务器内存中,得到内存映射数据。
2.一种数据查找方法,其特征在于,基于权利要求1的数据存储方法,利用所述内存映射数据进行数据查找,该数据查找方法包括:
接收用户输入的目标k值;
利用所述内存映射数据,查找所述目标k值所在的索引文件,确定为目标索引文件;
利用所述内存映射数据,在所述目标索引文件中查找目标k值,并确定与目标k值对应的v值在所述数据文件中的位置信息;
利用所述内存映射数据以及确定的位置信息,在与所述目标索引文件相同名称的数据文件中查找v值,并将查找到的v值返回给用户。
3.根据权利要求2所述的方法,其特征在于,所述查找所述目标k值所在的索引文件,确定为目标索引文件的过程包括:
将顺序排序的若干个索引文件确定为指定索引文件串;
读取所述指定索引文件串中的第一个索引文件;
判断所述第一个索引文件中存储的k值的区间是否包含所述目标k值,若是,将所述第一个索引文件确定为目标索引文件,若否,读取所述指定索引文件串中的最后一个索引文件;
判断所述最后一个索引文件中存储的k值的区间是否包含所述目标k值,若是,将所述最后一个索引文件确定为目标索引文件,若否,读取所述指定索引文件串中的中间索引文件;
判断所述目标k值位于第一数值区间、第二数值区间、第三数值区间中的哪一个数值区间,其中,第一数值区间为小于所述中间索引文件中所存储的最小的k值的区间,第二数值区间为所述中间索引文件中存储的各个k值所属的最小区间,第三数值区间为大于所述中间索引文件中所存储的最大的k值的区间;
若所述目标k值位于第一数值区间,则将所述指定索引文件串中由所述第一个索引文件至所述中间索引文件的索引文件串确定为指定索引文件串,并返回执行所述读取所述指定索引文件串中的第一个索引文件的步骤;
若所述目标k值位于第三数值区间,则将所述指定索引文件串中由所述中间索引文件至所述最后一个索引文件的索引文件串确定为指定索引文件串,并返回执行所述读取所述指定索引文件串中的第一个索引文件的步骤;
若所述目标k值位于第二数值区间,则将所述中间索引文件确定为目标索引文件。
4.根据权利要求2所述的方法,其特征在于,所述在所述目标索引文件中查找目标k值,包括:
将所述目标索引文件中顺序存储的若干个k值确定为指定k值序列;
读取所述指定k值序列中的第一个k值;
判断所述第一个k值是否等于所述目标k值,若是,将所述第一个k值确定为目标k值,若否,读取所述指定k值序列中的最后一个k值;
判断所述最后一个k值是否等于所述目标k值,若是,将所述最后一个k值确定为目标k值,若否,读取所述指定k值序列中的中间k值;
确定所述中间k值与所述目标k值的大小关系;
若所述中间k值等于所述目标k值,则将所述中间k值确定为目标k值;
若所述中间k值大于所述目标k值,则将所述指定k值序列中由所述第一个k值至所述中间k值的k值序列确定为指定k值序列,并返回执行所述读取所述指定k值序列中的第一个k值的步骤;
若所述中间k值小于所述目标k值,则将所述指定k值序列中由所述中间k值至所述最后一个k值的k值序列确定为指定k值序列,并返回执行所述读取所述指定k值序列中的第一个k值的步骤。
5.一种数据存储装置,其特征在于,包括:
数据整理单元,用于按照k值升序或者降序的方式,将若干个kv数据对整理成有序数据;
数据分组单元,用于按照排序顺序,将所述有序数据中各kv数据对进行分组;
v值存储单元,用于将各分组内kv数据对的v值存储在与各分组唯一对应的数据文件中;
k值存储单元,用于将各分组内kv数据对的k值,以及与k值对应的v值在所述数据文件中的位置信息,存储在与各分组唯一对应的索引文件中,其中,与各分组唯一对应的数据文件和索引文件的名称相同;
内存映射单元,用于采用内存映射方式,将各个所述数据文件、各个所述索引文件映射到服务器内存中,得到内存映射数据。
6.一种数据查找装置,其特征在于,基于权利要求5的数据存储装置,利用所述内存映射数据进行数据查找,该数据查找装置包括:
k值接收单元,用于接收用户输入的目标k值;
索引文件查找单元,用于利用所述内存映射数据,查找所述目标k值所在的索引文件,确定为目标索引文件;
k值查找单元,用于利用所述内存映射数据,在所述目标索引文件中查找目标k值,并确定与目标k值对应的v值在所述数据文件中的位置信息;
v值查找单元,用于利用所述内存映射数据以及确定的位置信息,在与所述目标索引文件相同名称的数据文件中查找v值,并将查找到的v值返回给用户。
7.根据权利要求6所述的装置,其特征在于,所述索引文件查找单元包括:
第一索引文件查找子单元,用于将顺序排序的若干个索引文件确定为指定索引文件串;
第二索引文件查找子单元,用于读取所述指定索引文件串中的第一个索引文件;
第三索引文件查找子单元,用于判断所述第一个索引文件中存储的k值的区间是否包含所述目标k值,若是,将所述第一个索引文件确定为目标索引文件,若否,读取所述指定索引文件串中的最后一个索引文件;
第四索引文件查找子单元,用于判断所述最后一个索引文件中存储的k值的区间是否包含所述目标k值,若是,将所述最后一个索引文件确定为目标索引文件,若否,读取所述指定索引文件串中的中间索引文件;
第五索引文件查找子单元,用于判断所述目标k值位于第一数值区间、第二数值区间、第三数值区间中的哪一个数值区间,其中,第一数值区间为小于所述中间索引文件中所存储的最小的k值的区间,第二数值区间为所述中间索引文件中存储的各个k值所属的最小区间,第三数值区间为大于所述中间索引文件中所存储的最大的k值的区间;若所述目标k值位于第一数值区间,则将所述指定索引文件串中由所述第一个索引文件至所述中间索引文件的索引文件串确定为指定索引文件串,并返回执行所述第二索引文件查找子单元;若所述目标k值位于第三数值区间,则将所述指定索引文件串中由所述中间索引文件至所述最后一个索引文件的索引文件串确定为指定索引文件串,并返回执行所述第二索引文件查找子单元;若所述目标k值位于第二数值区间,则将所述中间索引文件确定为目标索引文件。
8.根据权利要求6所述的装置,其特征在于,所述k值查找单元包括:
第一k值查找子单元,用于将所述目标索引文件中顺序存储的若干个k值确定为指定k值序列;
第二k值查找子单元,用于读取所述指定k值序列中的第一个k值;
第三k值查找子单元,用于判断所述第一个k值是否等于所述目标k值,若是,将所述第一个k值确定为目标k值,若否,读取所述指定k值序列中的最后一个k值;
第四k值查找子单元,用于判断所述最后一个k值是否等于所述目标k值,若是,将所述最后一个k值确定为目标k值,若否,读取所述指定k值序列中的中间k值;
第五k值查找子单元,用于确定所述中间k值与所述目标k值的大小关系;若所述中间k值等于所述目标k值,则将所述中间k值确定为目标k值;若所述中间k值大于所述目标k值,则将所述指定k值序列中由所述第一个k值至所述中间k值的k值序列确定为指定k值序列,并返回执行所述第二k值查找子单元;若所述中间k值小于所述目标k值,则将所述指定k值序列中由所述中间k值至所述最后一个k值的k值序列确定为指定k值序列,并返回执行所述第二k值查找子单元。
CN201510548484.8A 2015-08-31 2015-08-31 一种数据存储、查找方法及装置 Active CN105159987B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510548484.8A CN105159987B (zh) 2015-08-31 2015-08-31 一种数据存储、查找方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510548484.8A CN105159987B (zh) 2015-08-31 2015-08-31 一种数据存储、查找方法及装置

Publications (2)

Publication Number Publication Date
CN105159987A true CN105159987A (zh) 2015-12-16
CN105159987B CN105159987B (zh) 2019-03-29

Family

ID=54800843

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510548484.8A Active CN105159987B (zh) 2015-08-31 2015-08-31 一种数据存储、查找方法及装置

Country Status (1)

Country Link
CN (1) CN105159987B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105653611A (zh) * 2015-12-24 2016-06-08 深圳市汇朗科技有限公司 分表分页排序查询方法及装置
CN107169017A (zh) * 2017-03-31 2017-09-15 北京奇艺世纪科技有限公司 一种数据格式化存储、格式化数据读取方法及装置
CN108197157A (zh) * 2017-12-11 2018-06-22 五八有限公司 管理待存储数据的方法、设备及计算机可读存储介质
CN108228746A (zh) * 2017-12-20 2018-06-29 中国电子科技集团公司电子科学研究院 瓦片地图服务的调用方法、装置、存储介质及服务器
CN109857366A (zh) * 2019-02-20 2019-06-07 武汉轻工大学 基于外存的插入排序方法、系统、设备及存储介质
CN109918380A (zh) * 2019-03-08 2019-06-21 上海拉扎斯信息科技有限公司 数据处理方法、装置、存储介质和电子设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1949221A (zh) * 2006-11-27 2007-04-18 北京金山软件有限公司 存储元素的方法与系统及查找元素的方法与系统
US20120323923A1 (en) * 2011-06-14 2012-12-20 Bank Of America Corporation Sorting Data in Limited Memory
CN103294710A (zh) * 2012-02-28 2013-09-11 北京新媒传信科技有限公司 一种数据存取方法和装置
CN103488709A (zh) * 2013-09-09 2014-01-01 东软集团股份有限公司 一种索引建立方法及系统、检索方法及系统
CN103559027A (zh) * 2013-10-22 2014-02-05 北京航空航天大学 一种key与value分开存储的key-value存储系统设计方法
US8719274B1 (en) * 2004-12-20 2014-05-06 American Megatrends, Inc. Method, system, and apparatus for providing generic database services within an extensible firmware interface environment

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8719274B1 (en) * 2004-12-20 2014-05-06 American Megatrends, Inc. Method, system, and apparatus for providing generic database services within an extensible firmware interface environment
CN1949221A (zh) * 2006-11-27 2007-04-18 北京金山软件有限公司 存储元素的方法与系统及查找元素的方法与系统
US20120323923A1 (en) * 2011-06-14 2012-12-20 Bank Of America Corporation Sorting Data in Limited Memory
CN103294710A (zh) * 2012-02-28 2013-09-11 北京新媒传信科技有限公司 一种数据存取方法和装置
CN103488709A (zh) * 2013-09-09 2014-01-01 东软集团股份有限公司 一种索引建立方法及系统、检索方法及系统
CN103559027A (zh) * 2013-10-22 2014-02-05 北京航空航天大学 一种key与value分开存储的key-value存储系统设计方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
《计算机研究与发展》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105653611A (zh) * 2015-12-24 2016-06-08 深圳市汇朗科技有限公司 分表分页排序查询方法及装置
CN105653611B (zh) * 2015-12-24 2019-08-20 深圳市汇朗科技有限公司 分表分页排序查询方法及装置
CN107169017A (zh) * 2017-03-31 2017-09-15 北京奇艺世纪科技有限公司 一种数据格式化存储、格式化数据读取方法及装置
CN108197157A (zh) * 2017-12-11 2018-06-22 五八有限公司 管理待存储数据的方法、设备及计算机可读存储介质
CN108197157B (zh) * 2017-12-11 2022-05-31 五八有限公司 管理待存储数据的方法、设备及计算机可读存储介质
CN108228746A (zh) * 2017-12-20 2018-06-29 中国电子科技集团公司电子科学研究院 瓦片地图服务的调用方法、装置、存储介质及服务器
CN109857366A (zh) * 2019-02-20 2019-06-07 武汉轻工大学 基于外存的插入排序方法、系统、设备及存储介质
CN109918380A (zh) * 2019-03-08 2019-06-21 上海拉扎斯信息科技有限公司 数据处理方法、装置、存储介质和电子设备

Also Published As

Publication number Publication date
CN105159987B (zh) 2019-03-29

Similar Documents

Publication Publication Date Title
CN105159987A (zh) 一种数据存储、查找方法及装置
US20230267153A1 (en) Integrated index blocks and searching in blockchain systems
CN103902698B (zh) 一种数据存储系统和存储方法
CN102184205B (zh) 基于可扩展精度混沌哈希的多模式串匹配方法
CN103914483B (zh) 文件存储方法、装置及文件读取方法、装置
CN111444394A (zh) 获取实体间关系表达的方法、系统和设备、广告召回系统
CN105447174A (zh) 一种报表生成方法及装置
JP2010503117A (ja) 動的フラグメントマッピング
US20160328445A1 (en) Data Query Method and Apparatus
CN106649412B (zh) 一种数据处理方法和设备
CN104636349A (zh) 一种索引数据压缩以及索引数据搜索的方法和设备
US10936606B2 (en) Method and system for processing data in a parallel database environment
CN105468651A (zh) 一种关系数据库数据查询方法及系统
CN103699442B (zh) MapReduce计算框架下的可迭代式数据处理方法
Xie et al. A new neighbourhood structure for job shop scheduling problems
CN105224532A (zh) 数据处理方法及装置
CN104809161B (zh) 一种对稀疏矩阵进行压缩和查询的方法及系统
US11275731B2 (en) Accelerated filtering, grouping and aggregation in a database system
CN103002061A (zh) 一种长域名与短域名互相转化的方法及装置
CN104462429A (zh) 数据库查询语句的生成方法及装置
CN104346458A (zh) 数据存储方法和存储设备
CN102207935A (zh) 用于创建索引的方法和系统
CN110968585A (zh) 面向列的存储方法、装置、设备及计算机可读存储介质
CN104268158A (zh) 一种结构化数据分布式索引及检索方法
US8407255B1 (en) Method and apparatus for exploiting master-detail data relationships to enhance searching operations

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