CN103488709B - 一种索引建立方法及***、检索方法及*** - Google Patents
一种索引建立方法及***、检索方法及*** Download PDFInfo
- Publication number
- CN103488709B CN103488709B CN201310406274.6A CN201310406274A CN103488709B CN 103488709 B CN103488709 B CN 103488709B CN 201310406274 A CN201310406274 A CN 201310406274A CN 103488709 B CN103488709 B CN 103488709B
- Authority
- CN
- China
- Prior art keywords
- index
- data
- key value
- block
- 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.)
- Active
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
- G06F16/2228—Indexing 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
技术领域
本发明涉及数据处理技术领域,特别涉及一种索引建立方法及***、检索方法及***。
背景技术
数据采集过程可以概括为将数据从源服务器采集到目标服务器的过程,而对于现阶段大规模的数据采集,往往需要一个专门的采集服务器来完成这一过程。这也就必然导致了采集服务器中数据流量极为庞大。于是在分布式多表关联采集、变化数据比对、业务代码替换等存在数据查询和检索需求场景下,能够快速的查询和检索匹配数据便成为一项亟待解决的新问题。
在现有技术中,一般采用缓存技术实现快速的查询和检索,也就是将查询频率较高的数据缓存在内存中以便快速检索。不过采集服务器的数据流往往达到上百GB甚至更高的级别,远远大于现阶段服务器的内存容量。所以能够缓存在内存中的数据仅仅为一小部分;绝大部分必须存储在采集服务器的硬盘中。
如果需要检索存储在硬盘中的数据,则采集服务器中数据必然要在检索过程中进行频繁的内存/硬盘切换,速度非常缓慢;甚至相比于从存在索引的源服务器中直接进行检索,检索采集服务器硬盘的过程还要更慢。可见利用缓存技术在采集服务器中进行检索的技术方案由于速度慢、效率低,很难满足实际使用的需求。
发明内容
有鉴于此,本发明的目的在于提供一种索引建立方法及***、检索方法及***,所述方法通过为采集服务器硬盘中的真实数据建立索引以实现高效快速的检索。
为实现上述目的,本发明有如下技术方案:
一种索引建立方法,所述方法包括:
采集服务器将采集的真实数据存储,并根据真实数据的存储位置生成索引数据;所述索引数据包括关键值;
将索引数据按照关键值顺序存入当前缓冲块;将缓冲块中的索引数据按照关键值顺序连续的排列到索引块中;
将索引块依次排列作为索引文件。
所述索引数据包括:
真实数据的存储位置、长度、压缩状态信息以及关键值;
所述关键值为利用哈希算法对真实数据的特征值进行计算得到的哈希值。
所述将采集的真实数据存储具体为:
采集一个真实数据,判断该真实数据的体积是否超过压缩阈值,若超过则对真实数据进行压缩;
将未经压缩的或压缩后的真实数据存入当前数据块。
所述缓冲块具体包括:
缓冲块状态、缓冲块体积、索引数据、最大关键值和最小关键值。
所述缓冲块中的索引数据按照关键值顺序连续的排列到索引块中具体为:
设定索引块数量,并分配当前索引块,重复的历便所有缓冲块当前的最大关键值或最小关键值;
提取当前所有缓冲块中最大的最大关键值或最小的最小关键值对应的索引数据,并写入当前索引块中首位,若首位占用则写入到前一次写入的索引数据之后;
修改被提取索引数据的缓冲块的最大关键值或最小关键值;直到所有索引数据均被写入索引块中停止写入。
所述设定索引块数量具体为:
设定比较优化公式,所述比较优化公式为
t为检索比较次数,n为索引数据的总数,b为索引块的总数,t、n、b均为自然数;当b=b’使t为最小值,则b’为索引块参考数量;
将索引块参考数量设定为索引块数量。
所述索引数据按关键值顺序连续排列作为索引文件具体为:
将索引块依次排列作为索引文件。
所述方法还包括:
采集服务器将索引文件缓存至内存,并备份至硬盘。
一种索引建立***,所述***具体包括:
数据存储模块,用于将采集的真实数据存储;
生成模块,用于根据真实数据的存储位置生成索引数据;所述索引数据包括关键值;
缓冲模块,用于将索引数据按照关键值顺序存入当前缓冲块;
索引制作模块,用于将缓冲块中的索引数据按照关键值顺序连续的排列到索引块中,将索引块依次排列作为索引文件。
一种检索方法,所述方法包括以下步骤:
获悉目标数据的关键值;
以目标数据的关键值比较索引文件中各索引块的关键值范围,确定一个关键值范围涵盖目标数据关键值的索引块为目标索引块;
在目标索引块中搜寻得到与目标数据关键值相等的索引数据,将该索引数据作为目标索引数据;
从目标索引数据中提取目标数据的存储位置,并从该存储位置读取目标数据。
一种检索***,所述***具体包括:
关键值模块,用于获悉目标数据的关键值;
索引块比较模块,用于以目标数据的关键值比较索引文件中各索引块的关键值范围,确定一个关键值范围涵盖目标数据关键值的索引块为目标索引块;
索引数据比较模块,用于在目标索引块中搜寻得到与目标数据关键值相等的索引数据,将该索引数据作为目标索引数据;
数据读取模块,用于从目标索引数据中提取目标数据的存储位置,并从该存储位置读取目标数据。
通过以上技术方案可知,本发明存在的有益效果是:通过为真实数据建立索引文件,再通过对应的检索方法实现基于索引文件快速完成对于真实数据的检索;由于索引文件本身体积小,针对性强的特点,所以读取并利用索引文件进行检索相比于直接从硬盘中搜索真实文件,在效率上有着本质上的提高,充分的满足使用需求,避免了现有技术中直接从硬盘搜寻真实数据速度慢、效率低的缺陷;另外,通过将索引文件保存在内存中可实现在检索过程中高效快速读取索引文件进行检索;所述方法还计算得到索引块的最优数量,进一步的减少了检索过程中的比较次数,提高了检索的速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例所述索引建立方法流程图;
图2为本发明实施例所述真实数据分块存储方法流程图;
图3~4为本发明实施例所述缓冲块示意图;
图5为本发明实施例所述索引块示意图;
图6为本发明实施例所述索引建立***结构示意图;
图7为本发明实施例所述检索方法流程图;
图8为本发明实施例所述检索***结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例中,将采集服务器从源服务器中直接采集到的数据定义为真实数据,不同于现有技术中知直接从采集服务器硬盘中搜寻真实数据而进行检索的方案,本发明的关键在于将对真实数据建立索引文件,索引文件中将保存每个真实数据对应的存储位置。由于索引文件占用空间较小,完全可以驻留在采集服务器的内存中,也就可以快速的对索引文件进行读取和查询,以获悉真实数据的存储位置。
参见图1所示为本发明所述索引建立方法的一个具体实施例,本实施例中所述方法具体包括以下步骤:
步骤101、采集服务器将采集的真实数据存储。
在建立索引之前,所有的真实数据必须被采集服务器存储在自身的硬盘中,以使得每个真实数据都具有一个固定的存储位置。显然真实数据准确固定的存储位置是检索的基础,本实施例利用索引文件进行检索的意义正是获悉真实数据准确的存储位置。
具体的,本实施例中将按照图2所示方法对真实数据进行分块存储,包括以下步骤:
步骤A1、采集一个真实数据,判断该真实数据的体积是否超过压缩阈值,若超过则对真实数据进行压缩。
真实数据的存储是随着采集服务器的数据采集同时进行的,进行存储的顺序也就是采集顺序;也就是每采集到一个真实数据,便针对该真实数据执行本实施例所述的存储流程。
为节省存储空间,所述存储流程中的步骤A1主要判断真实数据是否需要被压缩。也就是预设一个压缩阈值,体积大于压缩阈值的真实数据均需要被压缩。若真实数据的体积大小超过了压缩阈值则需先对真实数据进行压缩再进入步骤A2,否则直接进入步骤A2。本实施例中所述压缩阈值为1KB。
步骤A2、将未经压缩的或压缩后的真实数据存入当前数据块。
本步骤为真实数据(包括未压缩和压缩后的真实数据)实际进行存储的过程。真实数据的存储在本实施例中以数据块作为基本单位,也就是先分配一个数据块,将陆续采集到的真实数据存储到该数据块中,直到该数据块存满则再分配另一个数据块。所谓当前数据块这一概念指的就是已经被分配、即将或正在被存入真实数据的数据块。
本步骤中如果要将真实数据存入当前数据块,首先将判断是否存在当前数据块,若存在进而在判断当前数据块的剩余空间是否足够存储该真实数据。若存在当前数据块且当前数据块中存在足够的存储空间,则将该真实数据存入当前数据块中,否则分配一个新数据块作为当前数据块。本实施例中每个数据块的存储容量均为10MB。
步骤102、根据真实数据的存储位置生成真实数据的索引数据,所述索引数据包括关键值。
索引数据是本实施例中建立索引文件最基本的单位。一个索引数据中显示了一个真实数据的存储位置。另外,为了索引文件的排序乃至后续的检索等其他需要,本实施例中索引文件中除了包括真实数据的存储位置之外,还包括真实数据的长度及压缩状态信息(所述压缩状态信息显示真实数据在存储时是否被压缩)以及关键值。
需要说明的是,本实施例中真实数据作为数据文件,本身即存在一个表明其唯一身份的特征值。所述索引数据的关键值是以哈希算法对真实数据的特征值计算映射得到的哈希值。索引数据可以用关键值表明自身的唯一身份,同时关键值和特征值的映射关系也明确了索引数据与真实数据的对应关系,以便在检索中将二者匹配对应,某个索引数据必然显示与其关键值相同的真实数据的存储位置。而且关键值也是索引数据排列顺序的标准。具体将在本实施例中后续公开。
本实施例中,所述索引数据的数据格式可以参考表1:
key |
position |
compress |
ValueLength |
表1
其中,key代表关键值;position代表真实数据存储位置;compress代表压缩状态信息;valueLength代表真实数据长度。
步骤103、将索引数据按照关键值顺序存入当前缓冲块。
显而易见的是,如需利用索引文件检索真实数据的位置进而读取真实数据,那么索引文件中的每个索引数据必然需要有序的进行排列,方能够体现出利用索引文件进行检索高效快速的优点。在本实施例中,以关键值为标准进行索引数据的排列。
前述已知,关键值即真实数据的特征值的哈希值。本实施例并不对采集服务器本身做出改变,所以从采集服务器本身的特性上来讲,采集服务器采集并存储真实数据具有其特定的方式和次序,并不是按照哈希值的顺序依次进行的;进而仿照存储顺序生成的索引数据必然也是乱序的,所以无法直接将其制成按照关键值顺序连续排列的索引文件,而是需暂时将索引数据存入缓冲块当中,以便后续的整体排序和组合。
将索引数据存入缓冲块的过程类似于将真实数据存入数据块的过程。也就是先分配一个缓冲块,将陆续生成的索引数据存储到该缓冲块中,直到该缓冲块存满则再分配另一个缓冲块。所谓当前缓冲块这一概念指的就是已经被分配、即将或正在被存入索引数据的缓冲块。本实施例中根据使用需求可以设置每个缓冲块存储10万个索引数据。
所谓将索引数据按照关键值顺序存入指的就是,即便陆续生成的索引数据的关键值是乱序的,但是在缓冲块内部依然需保证其顺序。实际上,所述关键值以数字表示,而从数据书写结构上来讲,本实施例中将确保缓冲块内索引数据按照特定顺序排列。本实施例中该特定顺序具体是从左至右升序排列。
图3~4为将一个索引数据存入缓冲块的流程示意图。图3~4中每个方格代表一个索引数据,方格中数字则代表该索引数据的关键值。图3中可见若干索引数据已经排列在缓冲块中,其关键值虽不连续,但依旧是按照从左至右升序的规律进行排列。当生成了一个关键值为73的索引数据,则按照同样规律需将其写入到56和107两个索引数据中间,即箭头指向的位置处。
本实施例中可将关键值为107的索引数据及其右侧全部索引数据统统右移一个位置,使得56和107两个索引数据中间出现一个空位,然后将关键值为73的索引数据写入该空位中。写入之后的状态如图4所示。
缓冲块的数据结构如表2所示:
inc |
Size |
indexs |
maxKey |
minKey |
表2
其中,inc表示缓冲块的状态,即显示缓冲块中已存入多少索引数据,剩余多少空间;size表示缓冲块占用的体积;indexs为索引数据的集合,可以认为图3~4所表示的就是indexs部分;maxKey表示该缓冲块中最大(即最右侧)的关键值,图3~4中为896;minKey表示该缓冲块中最小(即最左侧)的关键值,图3~4中为2。
步骤104、将缓冲块中的索引数据按照关键值顺序连续的排列到索引块中。
当所有的索引数据均已生成,也就是所有真实数据均已存储的情况之下,则开始将缓冲块中的索引数据按照关键值的顺序,以连续排列的方式整理到索引块当中。
整理方法如下:
设定索引块数量,并分配当前索引块,重复的历便所有缓冲块当前的最大关键值或最小关键值;提取当前所有缓冲块中最大的最大关键值或最小的最小关键值对应的索引数据,并写入当前索引块中首位,若首位占用则写入到前一次写入的索引数据之后;修改被提取索引数据的缓冲块的最大关键值或最小关键值;直到所有索引数据均被写入索引块中停止写入。
也就是说,首先设定索引块的数量,并推算出每个索引块中应储存的索引数据的数量。假设索引块的数量为b,而索引数据的总数为n,显然每个索引块中索引数据的数量m=n/b(m、n、b均为自然数)。
本实施例中假设关键值由数字1起始,那么关键值为1的索引数据将作为第1个索引块中的第1个索引数据。那么必然的,关键值为1的索引数据保存在某一个缓冲块当中,该缓冲块的minKey为1。或者说假如历便所有缓冲块的minKey,必将搜寻到一个minKey为1的缓冲块,关键值为1的索引数据就保存在该缓冲块当中。
本实施例中首先分配一个预先设定好的索引块当前索引块,然后历便所有缓冲块的minKey,发现缓冲块A的minKey为1,则从缓冲块A中提取关键值为1的索引数据,将该索引数据写入当前索引块中。同理再找到关键值为2的索引数据,将其写在索引块中关键值为1的索引数据之后;以此类推,实现索引数据在索引块中连续的排列。
需要说明的是,对于被提取了minKey对应的索引数据的缓冲块,其当前的minKey必然增大。如图4所示的缓冲块,原本minKey为2,但如果关键值为2的索引数据被提取,那么其当前的minKey实际上为8。所以相应的还必须设置一个minKey变更的机制,以便该缓冲块下一次被提取索引数据。就是说,如图4所示的缓冲块,当关键值为2的索引数据被提取之后,必须立刻将缓冲块数据结构中minKey一项的数值变更为其实际值8。假如该缓冲块的minKey始终为2不作调整,则无法通过minKey搜寻到关键值为8的索引数据。可见在本实施例中,实时的变更minKey是获取关键值连续的索引数据的必要步骤。
为适应minKey变更的需求,此处对索引数据的数据结构对照表1稍作修改,如表3:
key |
position |
compress |
isDelete |
ValueLength |
表3
表3相比表1增加了isDelete项,该项代表删除标识符,删除标识符可存在0或1中情况,O代表未删除,1代表已删除;若一个索引数据已被提取并写入索引块,则该索引数据删除标识符由O变为1;缓冲块中将不再以删除标识符为1的索引数据的关键值作为minKey,而是将其下一个删除标识符为O的索引数据的关键值变更为minKey。
以此类推,当一个索引块中已被写入了m个关键值连续的索引数据,则再分配一个索引块继前一索引块之后接着搜寻索引数据并写入。直到n个索引数据均写入到索引块当中,则结束本步骤,也就得到b个已经完成写入的索引块。参照图5为本实施例中已经完成写入的第一个索引块,其中按照顺序写入了关键值为1~m的共m个索引数据,下一索引块将从关键值为m+1的索引数据继续写入。
步骤104中以历便minKey为例实现了按照关键值顺序将索引数据写入索引块,同理还可以采用历便maxKey的方式,依然能够达到相同的效果,本实施例中不再重复叙述。
索引块的数据结构依然可以参考表2所示,或者也可以采取类似的结构。不过为在检索过程中准确的定位出某个索引数据所在的索引块,索引块同样需要标明自身的maxKey和minKey,以便明确该索引块覆盖的关键值范围。
需要强调的是,本实施例中所述“关键值的连续”未必等同于数学概念上自然数的连续。也可能在某些情况下,将有若干不存在的关键值数值,这并不影响所谓关键值的连续。例如,正常来讲某三个连续的关键值应该是55、56、57;但可能由于某些原因,使得采集服务器中原本不存在关键值为56的真实数据,那么也就必然不存在关键值为56的索引数据;则在这种情况下,该位置连续的三个关键值就是55、57、58;不过只要数学上缺失的关键值并没有在索引文件中出现,即认为此处是连续的。
本实施例中还需要说明的是,索引块的数量b可以由操作人员自行设定,不过在本实施例中为了进一步的提高检索效率,将按照以下优化算法来确定:
基于检索过程的比较次数计算,可得到如下比较优化公式:
(公式1)
其中,t代表检索比较次数,n、b与前述一致,n代表索引数据的总数,b代表索引块的总数,t、n、b均为自然数。相关的检索步骤涉及二分检索方法,公式1的推导也与所述二分检索法有关,其原理将在后续实施例中具体的公开,此处不作赘述。
针对公式1来讲,提高检索效率便是尽可能的降低检索比较次数,也就是期望t能够达到最小值。公式1中n为常数,b是取值范围在1~n中任意自然数的变量。也就是说索引块的数量最少为1个,最多与索引数据的数量相等,即n个;不过此间众多数值当中,将有b=b’使得t达到最小值,那么b’也就是b的最优值,也成为索引块参考数量,本实施例中将索引块参考数量设定为索引块数量。
在计算过程中,可以采用穷举的方式,将b=1~n共n个自然数解依次代入到公式1中,从而发现使t达到最小值的最优解b’,也可以根据公式1绘制函数曲线,选取函数曲线上距离t的最小值最近的整点作为b’。
步骤105、将索引块依次排列作为索引文件。
索引块按照写入的顺序,同样也就是涵盖的关键值从小到大的顺序组合为一个整体的数据文件,即是最终的索引文件。
步骤106、采集服务器将索引文件缓存至内存,并备份至硬盘。
在得到索引文件之后,本实施例中需要将所述索引文件缓存在内存中,以便在检索过程中可以直接读取,从而快速的找到某个真实数据的存储位置。一般而言索引文件体积较小,并不会占用大量的内存空间,所以利用索引文件检索真实数据存储位置的方案具有良好的使用价值。而为了提高索引文件的安全性,本实施例中还将另外备份一份索引文件并将其保存在采集服务器的硬盘当中。如果出现内存中索引文件被损坏的情况,即可将硬盘中备份的索引文件快速的装载到内存,以避免重新制作索引文件的过程。
对应图1所示的方法实施例,本实施例中进一步公开一种索引建立***,图1所示实施例中所述的索引建立方法将基于本实施例所述***得以实施。二者技术方案在本质上一致,图1所示实施例中的各项说明同样适用于本实施例中。参见图6所示,所述***具体包括:
数据存储模块,用于将采集的真实数据存储;
生成模块,用于根据真实数据的存储位置生成索引数据;所述索引数据包括关键值;
缓冲模块,用于将索引数据按照关键值顺序存入当前缓冲块;
索引制作模块,用于将缓冲块中的索引数据按照关键值顺序连续的排列到索引块中,将索引块依次排列作为索引文件。
通过以上技术方案可见,本发明所述的索引建立方法及***存在的有益效果是:通过为真实数据建立索引文件,并将索引文件存储在内存当中,即可实现在检索过程中高效快速读取索引文件进行检索,从而使得检索的效率具有了实质性的提高,充分的满足使用需求,避免了现有技术中直接从硬盘搜寻真实数据速度慢、效率低的缺陷;另外所述方法还计算得到索引块的最优数量,进一步的减少了检索过程中的比较次数,提高了检索的速度。
通过图1所示的索引建立方法建立了索引文件之后,相应的还需要一种检索方法与之配合,方可以实现对于真实数据的检索。参见图7所示为一种检索方法的具体实施例,本实施例中所述方法针对前述的索引文件进行检索,具体包括以下步骤:
步骤701、获悉目标数据的关键值。
本实施例中,所谓目标数据也就是待检索的真实数据。换言之,所述检索过程的目的就在于获得目标数据在硬盘中的存储位置,并进一步的读取该目标数据。由于在本发明中索引数据是按照关键值的顺序进行排列,那么对应的检索也同样必须是针对关键值的检索。
所以,获悉目标数据的关键值即成为了所述检索方法的首要步骤。在本实施例中对应前述的关键值的生成方法,当采集服务器获得了一个待检索的目标数据的相关信息,则利用哈希算法得到该目标数据的关键值。
步骤702、以目标数据的关键值比较索引文件中各索引块的关键值范围,确定一个关键值范围涵盖目标数据关键值的索引块为目标索引块。
基于前述实施例,所述索引文件包括一个或多个索引块,每个索引块中包括若干连续排列的索引文件,索引块中索引文件关键值的集合也就是索引块的关键值范围。由于索引数据已经按照关键值连续的排列,索引块可以标明自身的minKey和maxKey,那么minKey到maxKey区间内的关键值均在该索引块的关键值范围之内。
对于目标数据的检索,需要首先确定与其关键值相同的索引数据位于哪个索引块中。本实施例中的具体方式就是用目标数据的关键值依次与各索引块的关键值范围比较,必定可以发现某一个索引块的关键值范围覆盖了目标数据的关键值。那么与目标数据关键值相同的索引数据一定存在于该索引块中,进而将该索引块作为目标索引块以执行后续检索流程。
例如,某个索引文件中共包括4个索引块,关键值范围分别是:索引块1(1~100)、索引块2(101~200),索引块3(201~300),索引块4(301~400)。当目标数据的关键值为226,那么依次比较可发现,索引块3(201~300)的关键值范围覆盖了目标数据的关键值226,将索引块3作为目标索引块。
否则若所有索引块的关键值范围均未能覆盖目标数据的关键值,则说明索引文件中不存在与该目标数据关键值相同的索引文件,也就是说明该目标数据没有保存在采集服务器当中,即检索失败。同样参照上述实例,假如目标数据的关键值为524,则超出了索引文件整体覆盖的关键值范围,说明索引文件中不存在关键值为524的索引数据。
步骤703、在目标索引块中搜寻得到与目标数据关键值相等的索引数据,将该索引数据作为目标索引数据。
既定目标索引块之后,则历便目标索引块中索引数据必然能够发现一个索引数据的关键值与目标数据相等,则该索引数据就是本次检索的目标索引数据,目标索引数据中记录了目标数据在采集服务器硬盘中存储的位置。
需要说明的是,在本步骤中,从目标索引块中搜寻到目标索引数据的具体方式可以采用二分检索法。所谓二分检索法是现阶段广泛采用的一种可以提高检索效率的检索方法,但根据其特性必须建立在索引文件有序排列的基础之上,本实施例中便具备应用条件。二分检索法的原理为已经为本领域技术人员所公知,此处不再给出具体的定义,仅从以下实例中给予体现:
按前述实例,当目标数据的关键值为226,索引块3(201~300)被确定为目标索引块,则按照二分检索法的检索过程如下;
先取目标索引块关键值范围的中间值即250,并以中间值为限将原关键值范围划分为(201~250)和(250~300)两部分。比较目标数据的关键值与该中间值有226<250,则推断目标索引数据位于关键值范围划分后的前一部分(201~250)当中,由此保留了索引块中一半的索引数据进一步检索,另一半直接舍去。进而再取(201~250)的中间值225,并将(201~250)的范围划分为(201~225)和(225~250)两部分;再次得到226>225,则推断目标索引数据位于再次划分后的后一部分(225~250)当中。以此类推,不断的选取范围内中间值进行比较,就可以每次保留原范围中一半的索引数据进行下一次的比较检索,直到发现目标索引数据。如假设目标数据的关键值为225,那么在第2次比较时有225=225,即说明发现了目标索引数据。
步骤702~步骤703为通过数值比较找到目标索引数据的过程,也是检索过程的核心步骤。而这一过程中的比较次数同样对检索的效率有着重要的影响所谓比较次数包括两部分,一为发现目标索引块的过程,二为发现目标索引数据的过程。可以想象,两个过程的比较次数应该是此消彼长的。参考图1所示实施例中的描述,索引块的数量为b,索引数据的总数为n,显然每个索引块中索引数据的数量m=n/b。也就是说当索引数据的总数一定,那么如果索引块数量较少则每个索引块中的索引数据数量就必然较多。这样发现目标索引块需要的比较次数必然较少,但是在目标索引块中发现目标索引数据所需的比较次数便较多;反之同理。
本发明中便设计了如下的优化算法,以将发现目标索引数据的比较次数降到最低限度。
通过数学原理可以得到,当索引块数量为b,那么通过比较发现目标索引块的比较次数也最多为b。当目标索引块中索引数据的数量为m,则在目标索引块中发现目标索引数据的比较次数k最多为:
则有总比较次数即得到前述公式1。
通过公式1可以进行优化计算,得到b=b’使得t达到最小值,从而找到最优的索引块数量以及每个索引块包括的索引数据数量。以上说明从检索过程的角度出发,描述了推导得出公式1的原理;利用公式1进行优化计算的具体方式在前述实施例中已经给出了明确的说明,此处不再赘述。
步骤704、从目标索引数据中提取目标数据的存储位置,并从该存储位置读取目标数据。
显然,目标数据(待检索的真实数据)的关键值与目标索引数据一致,则说明目标索引数据中记录的真实数据存储位置即目标数据所在的位置。获悉该存储位置之后,进一步从该位置中读取目标数据,便实现了检索的最终目的,完成了检索过程。
对应图7所示的方法实施例,本实施例中进一步公开一种检索***,图7所示实施例中所述的检索方法将基于本实施例所述***得以实施。二者技术方案在本质上一致,图7所示实施例中的各项说明同样适用于本实施例中。参见图8所示,所述***具体包括:
关键值模块,用于获悉目标数据的关键值;
索引块比较模块,用于以目标数据的关键值比较索引文件中各索引块的关键值范围,确定一个关键值范围涵盖目标数据关键值的索引块为目标索引块;
索引数据比较模块,用于在目标索引块中搜寻得到与目标数据关键值相等的索引数据,将该索引数据作为目标索引数据;
数据读取模块,用于从目标索引数据中提取目标数据的存储位置,并从该存储位置读取目标数据。
通过以上技术方案可见,本发明所述的检索方法及***存在的有益效果是:实现了基于索引文件快速完成对于真实数据的检索,并且由于索引文件本身体积小,针对性强的特点,所以利用索引文件进行检索相比于直接从硬盘搜索真实文件,在效率上有着本质上的提高,充分的满足了采集服务器的应用需求。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (11)
1.一种索引建立方法,其特征在于,所述方法包括:
采集服务器将采集的真实数据存储,并根据真实数据的存储位置生成索引数据;所述索引数据包括关键值,所述关键值为利用哈希算法对真实数据的特征值进行计算得到的哈希值,所述特征值唯一表明所述真实数据,所述关键值唯一表明所述索引数据,所述关键值和所述特征值的映射关系也明确了所述索引数据与所述真实数据的对应关系;
将索引数据按照关键值顺序存入当前缓冲块;将缓冲块中的索引数据按照关键值顺序连续的排列到索引块中;
将索引块依次排列作为索引文件。
2.根据权利要求1所述方法,其特征在于,所述索引数据包括:
真实数据的存储位置、长度、压缩状态信息以及关键值。
3.根据权利要求1所述方法,其特征在于,所述将采集的真实数据存储具体为:
采集一个真实数据,判断该真实数据的体积是否超过压缩阈值,若超过则对真实数据进行压缩;
将未经压缩的或压缩后的真实数据存入当前数据块。
4.根据权利要求1所述方法,其特征在于,所述缓冲块具体包括:
缓冲块状态、缓冲块体积、索引数据、最大关键值和最小关键值。
5.根据权利要求4所述方法,其特征在于,所述缓冲块中的索引数据按照关键值顺序连续的排列到索引块中具体为:
设定索引块数量,并分配当前索引块,重复的历便所有缓冲块当前的最大关键值或最小关键值;
提取当前所有缓冲块中最大的最大关键值或最小的最小关键值对应的索引数据,并写入当前索引块中首位,若首位占用则写入到前一次写入的索引数据之后;
修改被提取索引数据的缓冲块的最大关键值或最小关键值;直到所有索引数据均被写入索引块中停止写入。
6.根据权利要求5所述方法,其特征在于,所述设定索引块数量具体为:
设定比较优化公式,所述比较优化公式为
t为检索比较次数,n为索引数据的总数,b为索引块的总数,t、n、b均为自然数;当b=b’使t为最小值,则b’为索引块参考数量;
将索引块参考数量设定为索引块数量。
7.根据权利要求1-6任意一项所述方法,其特征在于,所述索引数据按关键值顺序连续排列作为索引文件具体为:
将索引块依次排列作为索引文件。
8.根据权利要求1-6任意一项所述方法,其特征在于,所述方法还包括:
采集服务器将索引文件缓存至内存,并备份至硬盘。
9.一种索引建立***,其特征在于,所述***具体包括:
数据存储模块,用于将采集的真实数据存储;
生成模块,用于根据真实数据的存储位置生成索引数据;所述索引数据包括关键值,所述关键值为利用哈希算法对真实数据的特征值进行计算得到的哈希值,所述特征值唯一表明所述真实数据,所述关键值唯一表明所述索引数据,所述关键值和所述特征值的映射关系也明确了所述索引数据与所述真实数据的对应关系;
缓冲模块,用于将索引数据按照关键值顺序存入当前缓冲块;
索引制作模块,用于将缓冲块中的索引数据按照关键值顺序连续的排列到索引块中,将索引块依次排列作为索引文件。
10.一种检索方法,其特征在于,所述方法包括以下步骤:
获悉目标数据的关键值,所述关键值为利用哈希算法对真实数据的特征值进行计算得到的哈希值,所述特征值唯一表明所述真实数据,所述关键值唯一表明索引数据,所述索引数据包括所述真实数据的存储位置,所述关键值和所述特征值的映射关系也明确了所述索引数据与所述真实数据的对应关系;
以目标数据的关键值比较索引文件中各索引块的关键值范围,确定一个关键值范围涵盖目标数据关键值的索引块为目标索引块;
在目标索引块中搜寻得到与目标数据关键值相等的索引数据,将该索引数据作为目标索引数据;
从目标索引数据中提取目标数据的存储位置,并从该存储位置读取目标数据。
11.一种检索***,其特征在于,所述***具体包括:
关键值模块,用于获悉目标数据的关键值,所述关键值为利用哈希算法对真实数据的特征值进行计算得到的哈希值,所述特征值唯一表明所述真实数据,所述关键值唯一表明索引数据,所述索引数据包括所述真实数据的存储位置,所述关键值和所述特征值的映射关系也明确了所述索引数据与所述真实数据的对应关系;
索引块比较模块,用于以目标数据的关键值比较索引文件中各索引块的关键值范围,确定一个关键值范围涵盖目标数据关键值的索引块为目标索引块;
索引数据比较模块,用于在目标索引块中搜寻得到与目标数据关键值相等的索引数据,将该索引数据作为目标索引数据;
数据读取模块,用于从目标索引数据中提取目标数据的存储位置,并从该存储位置读取目标数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310406274.6A CN103488709B (zh) | 2013-09-09 | 2013-09-09 | 一种索引建立方法及***、检索方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310406274.6A CN103488709B (zh) | 2013-09-09 | 2013-09-09 | 一种索引建立方法及***、检索方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103488709A CN103488709A (zh) | 2014-01-01 |
CN103488709B true CN103488709B (zh) | 2017-06-16 |
Family
ID=49828935
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310406274.6A Active CN103488709B (zh) | 2013-09-09 | 2013-09-09 | 一种索引建立方法及***、检索方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103488709B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103873562A (zh) * | 2014-02-27 | 2014-06-18 | 车智互联(北京)科技有限公司 | 缓存方法和缓存*** |
CN103901468B (zh) * | 2014-03-18 | 2017-05-17 | 中国石油集团川庆钻探工程有限公司地球物理勘探公司 | 地震数据的处理方法及其装置 |
CN105354151B (zh) * | 2014-08-19 | 2020-09-11 | 阿里巴巴集团控股有限公司 | 一种缓存管理方法与设备 |
CN104199892B (zh) * | 2014-08-26 | 2018-01-30 | 上海爱数信息技术股份有限公司 | 一种基于压缩合并异步更新的索引读写方法 |
CN104408128B (zh) * | 2014-11-26 | 2017-11-03 | 上海爱数信息技术股份有限公司 | 一种基于b+树异步更新索引的读优化方法 |
CN105159987B (zh) * | 2015-08-31 | 2019-03-29 | 深圳市茁壮网络股份有限公司 | 一种数据存储、查找方法及装置 |
CN105574151B (zh) * | 2015-12-16 | 2019-08-06 | 北京奇虎科技有限公司 | 图像存储方法和设备 |
CN106919628A (zh) * | 2015-12-28 | 2017-07-04 | 阿里巴巴集团控股有限公司 | 一种图数据的处理方法和装置 |
CN105956069A (zh) * | 2016-04-28 | 2016-09-21 | 优品财富管理有限公司 | 一种网络资讯的采集和分析方法及*** |
CN106021570A (zh) * | 2016-05-31 | 2016-10-12 | 广东凯通软件开发有限公司 | 数据查询方法及*** |
TWI607325B (zh) * | 2016-07-21 | 2017-12-01 | 虹光精密工業股份有限公司 | 檢索索引產生方法及應用此方法之伺服器 |
CN106446028B (zh) * | 2016-08-31 | 2019-12-27 | 成都科来软件有限公司 | 一种网络会话包的索引*** |
CN106777240A (zh) * | 2016-12-27 | 2017-05-31 | 广州创显科教股份有限公司 | 一种基于哈希计算的快速检索方法及*** |
CN108572958B (zh) * | 2017-03-07 | 2022-07-29 | 腾讯科技(深圳)有限公司 | 数据处理方法及装置 |
CN108446304A (zh) * | 2018-01-30 | 2018-08-24 | 上海天旦网络科技发展有限公司 | 数据包检索***和方法 |
CN110879810A (zh) * | 2019-12-02 | 2020-03-13 | 北京明略软件***有限公司 | 数据处理方法及装置 |
CN115391601B (zh) * | 2022-10-28 | 2023-03-24 | 摩尔线程智能科技(北京)有限责任公司 | 视频格式的检测方法、索引模型的构建方法及装置 |
CN117573703B (zh) * | 2024-01-16 | 2024-04-09 | 科来网络技术股份有限公司 | 时序数据的通用检索方法、***、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1776688A (zh) * | 2005-12-15 | 2006-05-24 | 北京金山软件有限公司 | 一种字符数据的检索方法 |
CN101551807A (zh) * | 2009-05-07 | 2009-10-07 | 山东中创软件商用中间件股份有限公司 | 文件数据库多级索引技术 |
CN102375853A (zh) * | 2010-08-24 | 2012-03-14 | ***通信集团公司 | 分布式数据库***、在其中建立索引的方法和查询方法 |
CN102402617A (zh) * | 2011-12-23 | 2012-04-04 | 天津神舟通用数据技术有限公司 | 一种利用分片及稀疏位图的易压缩数据库索引存储***及其相应的构建、调度和查询处理方法 |
CN102841860A (zh) * | 2012-08-17 | 2012-12-26 | 珠海世纪鼎利通信科技股份有限公司 | 一种大数据量信息存储与访问方法 |
CN102902724A (zh) * | 2012-09-05 | 2013-01-30 | 重庆市勘测院 | 海量栅格瓦块地图发布方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1292371C (zh) * | 2003-04-11 | 2006-12-27 | 国际商业机器公司 | 倒排索引存储方法、倒排索引机制以及在线更新的方法 |
-
2013
- 2013-09-09 CN CN201310406274.6A patent/CN103488709B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1776688A (zh) * | 2005-12-15 | 2006-05-24 | 北京金山软件有限公司 | 一种字符数据的检索方法 |
CN101551807A (zh) * | 2009-05-07 | 2009-10-07 | 山东中创软件商用中间件股份有限公司 | 文件数据库多级索引技术 |
CN102375853A (zh) * | 2010-08-24 | 2012-03-14 | ***通信集团公司 | 分布式数据库***、在其中建立索引的方法和查询方法 |
CN102402617A (zh) * | 2011-12-23 | 2012-04-04 | 天津神舟通用数据技术有限公司 | 一种利用分片及稀疏位图的易压缩数据库索引存储***及其相应的构建、调度和查询处理方法 |
CN102841860A (zh) * | 2012-08-17 | 2012-12-26 | 珠海世纪鼎利通信科技股份有限公司 | 一种大数据量信息存储与访问方法 |
CN102902724A (zh) * | 2012-09-05 | 2013-01-30 | 重庆市勘测院 | 海量栅格瓦块地图发布方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103488709A (zh) | 2014-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103488709B (zh) | 一种索引建立方法及***、检索方法及*** | |
US11238098B2 (en) | Heterogenous key-value sets in tree database | |
EP3254210B1 (en) | Big data statistics at data-block level | |
US9047330B2 (en) | Index compression in databases | |
CN110383261A (zh) | 用于多流存储装置的流选择 | |
CN110291518A (zh) | 合并树无用单元指标 | |
CN110268394A (zh) | Kvs树 | |
CN110268399A (zh) | 用于维护操作的合并树修改 | |
CN104077405B (zh) | 时序类型数据存取方法 | |
CN106874348A (zh) | 文件存储和索引方法、装置及读取文件的方法 | |
CN111399777A (zh) | 一种基于数据值分类的差异化键值数据存储方法 | |
US9535939B2 (en) | Intra-block partitioning for database management | |
CN105468642A (zh) | 数据的存储方法及装置 | |
CN107045531A (zh) | 一种优化hdfs小文件存取的***及方法 | |
CN104881470A (zh) | 一种面向海量图片数据的重复数据删除方法 | |
CN102129458A (zh) | 关系型数据库的存储方法及装置 | |
CN102402617A (zh) | 一种利用分片及稀疏位图的易压缩数据库索引存储***及其相应的构建、调度和查询处理方法 | |
CN107577436A (zh) | 一种数据存储方法及装置 | |
CN103152430B (zh) | 一种缩减数据占用空间的云存储方法 | |
CN103810246B (zh) | 一种索引创建方法和装置以及索引查询方法和装置 | |
CN107729406B (zh) | 一种数据分类存储方法及装置 | |
CN110569245A (zh) | 重复数据删除***中基于强化学习的指纹索引预取方法 | |
CN105824881A (zh) | 一种基于负载均衡的重复数据删除数据放置方法器 | |
CN103701469A (zh) | 一种大规模图数据的压缩存储方法 | |
CN105630834A (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 |