CN104424204A - 索引机制合并方法、搜索方法、装置及设备 - Google Patents
索引机制合并方法、搜索方法、装置及设备 Download PDFInfo
- Publication number
- CN104424204A CN104424204A CN201310367741.9A CN201310367741A CN104424204A CN 104424204 A CN104424204 A CN 104424204A CN 201310367741 A CN201310367741 A CN 201310367741A CN 104424204 A CN104424204 A CN 104424204A
- Authority
- CN
- China
- Prior art keywords
- search
- storage unit
- layer
- page record
- page
- 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/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- 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
- G06F16/2272—Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种索引机制合并方法、搜索方法、装置及设备,属于计算机技术领域。所述方法包括:在Li达到容量上限后,检测Li+1是否正在合并;若检测结果为所述Li+1正在合并,则检测Li+1’是否已经达到容量上限;若检测结果为所述Li+1’未达到容量上限,则将Li与Li+1’合并。本发明通过在Li达到容量上限后,若Li+1正在合并,则将Li与Li+1’进行合并;解决了现有技术中索引机制FD树在合并过程中占用较长时间的问题;由于在Li+1正在合并的过程中,可以同时进行Li与Li+1’的合并过程,因此实现了多线程合并,达到了可以很大程度上提高了合并速率的效果。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种索引机制合并方法、搜索方法、装置及设备。
背景技术
随着半导体技术的高速发展,闪存的容量和性价比不断提高,已成为移动智能设备的标准主要存储设备。闪存是典型的异构存储设备,其读时延比写时延小一个数量级,且随机写吞吐量远小于顺序写吞吐量。
为了充分利用闪存的高顺序写吞吐量,现有技术提供了一些面向闪存的新型索引机制FD树。如图1所示,其示出了现有技术中提供的FD树的结构示意图。由图1可知,FD树为分层结构,第0层L0位于内存,以B+树的形式组织索引记录;其他层次位于闪存,以有序数组的形式组织记录,其中,有序数组以页面为单位进行连续存储。FD树中引入了页面记录(fence),其中页面记录由该页面第一条记录的键值和该页面的页面地址组成,页面记录可与正常数据记录一起按键值排序并保存,每个层次均会保存下一层次所有页面的页面记录。
在搜索FD树时,如L0没有满足条件的记录,可按页面记录直接跳到第一层L1的待搜索页面,依此类推,直到找到符合条件的记录或搜索完所有的层次。
在向FD树插入记录时,都是将记录先插入到L0,然后通过合并过程转移到下面的层次。由于FD树每层有容量限制,且与所处层次成正比,当Li达到容量上限时,便启动Li与Li+1的合并过程,将Li中的索引记录转移到Li+1。合并是个后台过程,在合并未结束前,使用当前的Li和Li+1进行搜索。当Li与Li+1合并结束后,因为Li的内容已改变,所以新的Li将与Li-1合并,以使Li-i重新获得指向Li的页面记录,这个过程会一直倒推到L0才结束。也就是说,一次L0到达容量上限触发的合并,可能连续触发后续合并请求,直到Li层为止;Li层的合并结束后,会向上连续触发合并请求,一直到L0为止。整个合并过程结束后,L0到Li都是全新的结构。此时,会用新的L0~Li层整体替换旧的L0~Li层。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:FD树在合并过程中只能单线程进行,当FD树的索引记录很多时,对FD树的进行合并的过程会占用很长的时间。
发明内容
为了解决现有技术中索引机制FD树在合并过程中占用较长时间的问题,本发明实施例提供了一种索引机制合并方法、搜索方法、装置及设备。所述技术方案如下:
第一方面,提供了一种存储装置,所述存储装置包括至少三层存储单元,第0层存储单元位于内存中,第i层存储单元位于闪存中,每层存储单元包括主数据区,其中:
所述第0层存储单元中的主数据区为有序搜索树,当所述第0层存储单元中存在从数据区时,所述从数据区为有序搜索树所述有序搜索树包括数据记录和页面记录;
所述第i层存储单元中的主数据区可为有序搜索树或有序数组,当所述第i层存储单元中存在从数据区时,所述从数据区为有序数组,所述有序搜索树包括页面记录,所述有序数据包括数据记录和页面记录;
所述数据记录包括键值和记录值,所述页面记录包括键值和页面地址;
当所述第i层存储单元中存在从数据区Li’时,所述Li’为所述第i层存储单元的第一搜索数据区,所述第i层存储单元中的主数据区Li为所述第i层存储单元的第二搜索数据区;当所述第i层存储单元中不存在所述Li’时,所述Li为所述第i层存储单元的所述第一搜索数据区;
所述Li按序保存指向第i+1层存储单元中的第一搜索数据区的所有页面对应的页面记录;当所述第i+1层存储单元中的第一搜索数据区为有序搜索树时,则所述Li的页面记录是无效记录;
所述Li’按序保存指向所述Li的所有页面对应的页面记录;当所述Li为有序搜索树时,则所述Li’的页面记录为无效记录,
其中,所述i为大于0的自然数。
第二方面,提供了一种索引机制合并方法,用于包括有权利要求1所述的存储装置的设备中,所述方法,包括:
在所述第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
若检测结果为所述Li+1正在合并,则检测所述第i+1层存储单元的从数据区Li+1’是否已经达到容量上限;
若检测结果为所述Li+1’未达到容量上限,则将所述Li中的数据记录添加至所述Li+1’中,将所述Li+1’中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1’中的所有页面所对应的页面记录的有序搜索树,
其中,所述i为大于0的自然数。
在第二方面的第一种可能的实施方式中,在所述检测Li+1是否正在合并之前,还包括:
判断所述Li+1是否为有序搜索树以及所述第i+1层存储单元是否存在从数据区Li+1’;
若判断结果为所述Li+1为有序搜索树且所述第i+1层存储单元存在Li+1’时,则将所述Li和所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树;
若判断结果为所述Li+1不为有序搜索树时,则执行所述检测Li+1是否正在合并的步骤;
在所述检测Li+1是否正在合并之后,还包括:
若检测结果为所述Li+1未在合并,则将所述Li中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树。
结合第二方面或者第二方面的第一种可能的实施方式,在第二种可能的实施方式中,所述方法,还包括:
当所述Li合并为有序搜索树后,判断第i-1层存储单元的主数据区Li-1是否正在合并以及所述第i层存储单元是否存在从数据区Li’;
若判断结果为所述Li-1未在合并且所述第i层存储单元存在Li’,则将所述Li’以及所述Li-1中的数据记录添加至所述Li中,将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,合并后的所述Li-1为包含有用于指向合并后的所述Li中的所有页面所对应的页面记录的有序搜索树;
若判断结果为所述Li-1未在合并且所述第i层存储单元不存在Li’,则将所述Li-1中的数据记录添加至所述Li中,将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,合并后的所述Li-1为包含有用于指向合并后的所述Li中的所有页面所对应的页面记录的有序搜索树。
结合第二方面、第二方面的第一种可能的实施方式或者第二方面的第二种可能的实施方式,在第三种可能的实施方式中,当具有有序数组形式的所述Li-1包括用于存放页面记录的页面记录存储区时,所述将所述Li以及所述Li’中的页面记录合并至所述Li-1中,包括:
将所述Li中的所有页面所对应的页面记录添加至所述Li-1中的所述页面记录存储区中;
所述将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,包括:
将所述Li中的所有页面所对应的页面记录添加至所述Li-1中的所述页面记录存储区中。
结合第二方面、第二方面的第一种可能的实施方式、第二方面的第二种可能的实施方式或者第二方面的第三种可能的实施方式,在第四种可能的实施方式中,在所述检测所述Li+1’是否已经达到容量上限之后,还包括:
若检测结果为所述Li+1’未达到容量上限,则在预定时间段后判断所述Li+1是否合并完成;
若判断结果为在预定时间段后所述Li+1合并完成,则将所述Li以及所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树;
若判断结果为在预定时间段后所述Li+1未合并完成,则执行所述将所述Li中的数据记录合并至所述Li+1’中,将所述Li+1’中的所有页面所对应的页面记录合并至所述Li中的步骤。
结合第二方面、第二方面的第一种可能的实施方式、第二方面的第二种可能的实施方式、第二方面的第三种可能的实施方式或者第二方面的第四种可能的实施方式,在第五种可能的实施方式中,在所述检测所述Li+1’是否已经达到容量上限之前,还包括:
从检测到所述Li+1正在合并起的所述预定时间段后,判断所述Li+1是否合并完成;
若判断结果为所述Li+1未合并完成,则执行所述检测所述Li+1’是否已经达到容量上限的步骤;
若判断结果为所述Li+1合并完成,则将所述Li以及所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树。
第三方面,提供了一种搜索方法,用于在包括有权利要求1所述的存储装置的设备中搜索数据,所述方法,包括:
获取对所述第i层存储单元的主数据区Li的上一数据区搜索指定对象时返回的页面记录,所述上一数据区为第i-1层存储单元的主数据区Li-1或所述第i层存储单元的从数据区Li’;
当所述Li为有序数组时,根据所述页面记录所指的位于所述Li的页面搜索所述指定对象;
当所述Li为有序搜索树时,从所述Li的根节点所在页面搜索用于指向第i+1层中符合条件的页面记录,
其中,所述i为大于0的自然数,所述指定对象为指定搜索的指定键值或指定搜索的指定键值范围。
在第三方面的第一种可能的实施方式中,所述从所述Li的根节点所在页面搜索指向指向第i+1层中符合条件的页面记录,包括:
当所述指定对象为指定键值时,则从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第一条件的页面记录;
当所述指定对象为指定键值范围时,则从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第二条件的页面记录,
其中,所述指定键值范围包括从左边界值至右边界值的值,所述第一条件为不大于所述指定键值的最大键值,所述第二条件为不大于所述左边界值的最大键值,或,大于所述左边界值且不大于所述右边界值的最小键值,所述左边界值小于所述右边界值。
结合第三方面或者第三方面的第一种可能的实施方式,在第二种可能的实施方式中,所述获取对所述Li的上一数据区搜索指定对象时返回的页面记录,包括:
获取根据所述第i-1层存储单元搜索所述指定对象时返回的页面记录;
判断所述第i层存储单元是否存在所述Li’;
若判断结果为所述第i层存储单元存在所述Li’,则根据所述第i-1层存储单元返回的页面记录搜索所述Li’以搜索所述指定对象;
当所述指定对象为所述指定键值时,则在所述Li’中未搜索到所述指定对象时,返回所述Li’中用于指向所述Li中符合所述第一条件的页面记录;
当所述指定对象为所述指定键值范围时,则返回所述Li’中用于指向所述Li中符合所述第二条件的页面记录;
将符合所述第一条件或所述第二条件的页面记录作为对所述Li的上一数据区搜索指定对象时返回的页面记录;
若判断结果为所述第i层存储单元不存在所述Li’,则将获取的根据所述第i-1层存储单元搜索所述指定对象时返回的页面记录作为对所述Li的上一数据区搜索时返回的页面记录。
结合第三方面、第三方面的第一种可能的实施方式或者第三方面的第二种可能的实施方式,在第三种可能的实施方式中,具有有序数组形式的主数据区或从数据区包括用于存放数据记录的数据记录存储区和用于存放页面记录的页面记录存储区,
所述根据所述页面记录所指的位于所述Li的页面搜索所述指定对象,包括:
根据所述页面记录所指的页面搜索所述Li中的数据记录存储区,以搜索所述指定对象;
当所述指定对象为指定键值时,则在所述Li中的数据记录存储区中未搜索到所述指定对象后,搜索所述Li的页面记录存储区以搜索用于指向所述Li的下一数据区的符合所述第一条件的页面记录;
当所述指定对象为指定键值范围时,则搜索所述Li的页面记录存储区以搜索用于指向所述Li的下一数据区的符合所述第二条件的页面记录;
所述根据所述第i-1层存储单元返回的页面记录搜索所述Li’以搜索所述指定对象,包括:
根据所述第i-1层存储单元返回的页面记录搜索所述Li’中的数据记录存储区以搜索所述指定对象;
当所述指定对象为指定键值时,则在所述Li’中的数据记录存储区中未搜索到所述指定对象后,则搜索所述Li’中的页面记录存储区以搜索用于指向所述Li的符合所述第一条件的页面记录;
当所述指定对象为指定键值范围时,则搜索所述Li’的页面记录存储区以搜索用于指向所述Li的符合所述第二条件的页面记录;,
其中,所述Li的下一数据区第i+1层的主数据区Li+1或第i+1层的从数据区Li+1’。
结合第三方面、第三方面的第一种可能的实施方式、第三方面的第二种可能的实施方式或者第三方面的第三种可能的实施方式,在第四种可能的实施方式中,所述方法,还包括:
在所述第0层存储单元接收搜索请求,所述搜索请求中包括所述指定对象;
在接收到所述搜索请求之后,判断所述第0层存储单元是否存在从数据区L0’;
若判断结果为所述第0层存储单元存在从数据区L0’,则根据所述L0’搜索所述指定对象;
当所述指定对象为指定键值时,则在根据所述L0’未搜索到所述指定对象后,则搜索所述第0层存储单元的主数据区L0以搜索所述指定对象;
当所述指定对象为指定键值范围时,则在搜索完所述L0’之后,搜索所述L0以搜索所述指定对象;
若判断结果为所述第0层存储单元不存在从数据区L0’,则根据所述L0搜索所述指定对象。
第四方面,提供了一种索引机制合并装置,用于包括有权利要求1所述的存储装置的设备中,所述装置,包括:
第一检测模块,用于在所述第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
第二检测模块,用于在所述第一检测模块的检测结果为所述Li+1正在合并时,检测所述第i+1层存储单元的从数据区Li+1’是否已经达到容量上限;
第一合并模块,用于在所述第二检测模块的检测结果为所述Li+1’未达到容量上限时,将所述Li中的数据记录添加至所述Li+1’中,将所述Li+1’中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1’中的所有页面所对应的页面记录的有序搜索树,
其中,所述i为大于0的自然数。
在第四方面的第一种可能的实施方式中,所述装置,还包括:
第一判断模块,用于判断所述Li+1是否为有序搜索树以及所述第i+1层存储单元是否存在从数据区Li+1’;
第二合并模块,用于在所述第一判断模块的判断结果为所述Li+1为有序搜索树且所述第i+1层存储单元存在Li+1’时,将所述Li和所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树;
第一执行模块,用于在所述第一判断模块的判断结果为所述Li+1不为有序搜索树时,执行所述检测Li+1是否正在合并的步骤;
所述装置,还包括:
第三合并模块,用于在所述第一检测模块的检测结果为所述Li+1未在合并时,将所述Li中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树。
结合第四方面或者第四方面的第一种可能的实施方式,在第二种可能的实施方式中,所述装置,还包括:
第二判断模块,用于当所述Li合并为有序搜索树后,判断第i-1层存储单元的主数据区Li-1是否正在合并以及所述第i层存储单元是否存在从数据区Li’;
第四合并模块,用于在所述第二判断模块的判断结果为所述Li-1未在合并且所述第i层存储单元存在Li’时,将所述Li’以及所述Li-1中的数据记录添加至所述Li中,将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,合并后的所述Li-1为包含有用于指向合并后的所述Li中的所有页面所对应的页面记录的有序搜索树;
第五合并模块,用于在所述第二判断模块的判断结果为所述Li-1未在合并且所述第i层存储单元不存在Li’,则将所述Li-1中的数据记录添加至所述Li中,将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,合并后的所述Li-1为包含有用于指向合并后的所述Li中的所有页面所对应的页面记录的有序搜索树。
结合第四方面、第四方面的第一种可能的实施方式或者第四方面的第二种可能的实施方式,在第三种可能的实施方式中,当具有有序数组形式的所述Li-1包括用于存放页面记录的页面记录存储区时,所述第四合并模块,用于:
将所述Li中的所有页面所对应的页面记录添加至所述Li-1中的所述页面记录存储区中;
所述第五合并模块,用于:
将所述Li中的所有页面所对应的页面记录添加至所述Li-1中的所述页面记录存储区中。
结合第四方面、第四方面的第一种可能的实施方式、第四方面的第二种可能的实施方式或者第四方面的第三种可能的实施方式,在第四种可能的实施方式中,所述装置,还包括:
第三判断模块,用于在所述第二检测模块的检测结果为所述Li+1’未达到容量上限时,在预定时间段后判断所述Li+1是否合并完成;
第六合并模块,用于在所述第三判断模块的判断结果为在预定时间段后所述Li+1合并完成时,将所述Li以及所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树;
第二执行模块,用于在所述第三判断模块的判断结果为在预定时间段后所述Li+1未合并完成时,执行所述将所述Li中的数据记录添加至所述Li+1’中,将所述Li+1’中的所有页面所对应的页面记录添加至所述Li中步骤。
结合第四方面、第四方面的第一种可能的实施方式、第四方面的第二种可能的实施方式、第四方面的第三种可能的实施方式或者第四方面的第四种可能的实施方式,在第五种可能的实施方式中,所述装置,还包括:
第四判断模块,用于从所述第一检测模块检测到所述Li+1正在合并起的所述预定时间段后,判断所述Li+1是否合并完成;
第三执行模块,用于在所述第四判断模块的判断结果为所述Li+1未合并完成时,执行所述检测所述Li+1’是否已经达到容量上限的步骤;
第七合并模块,用于在所述第四判断模块的判断结果为所述Li+1合并完成时,将所述Li以及所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树。
第五方面,提供了一种搜索装置,用于在包括有权利要求1所述的存储装置的设备中搜索数据,所述装置,包括:
获取模块,用于获取对所述第i层存储单元的主数据区Li的上一数据区搜索指定对象时返回的页面记录,所述上一数据区为第i-1层存储单元的主数据区Li-1或所述第i层存储单元的从数据区Li’;
第一搜索模块,用于当所述Li为有序数组时,根据所述获取模块获取到的页面记录所指的位于所述Li的页面搜索所述指定对象;
第二搜索模块,用于当所述Li为有序搜索树时,从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合条件的页面记录,
其中,所述i为大于0的自然数,所述指定对象为指定搜索的指定键值或指定搜索的指定键值范围。
在第五面的第一种可能的实施方式中,所述第二搜索模块,包括:
第一搜索单元,用于当所述指定对象为指定键值时,则从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第一条件的页面记录;
第二搜索单元,用于当所述指定对象为指定键值范围时,则从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第二条件的页面记录,
其中,所述指定键值范围包括从左边界值至右边界值的值,所述第一条件为不大于所述指定键值的最大键值,所述第二条件为不大于所述左边界值的最大键值,或,大于所述左边界值且不大于所述右边界值的最小键值,所述左边界值小于所述右边界值。
结合第五方面或者第五方面的第一种可能的实施方式,在第二种可能的实施方式中,所述获取模块,包括:
获取单元,用于获取根据所述第i-1层存储单元搜索所述指定对象时返回的页面记录;
判断单元,用于判断所述第i层存储单元是否存在所述Li’;
搜索单元,用于在所述判断单元的判断结果为所述第i层存储单元存在所述Li’时,根据所述第i-1层存储单元返回的页面记录搜索所述Li’以搜索所述指定对象;
第一返回单元,用于当所述指定对象为所述指定键值时,则在所述搜索单元在所述Li’中未搜索到所述指定对象时,返回所述Li’中用于指向所述Li中符合所述第一条件的页面记录;
第二返回单元,当所述指定对象为所述指定键值范围时,则返回所述Li’中用于指向所述Li中符合所述第二条件的页面记录;
第一作为单元,用于将所述第一返回单元返回的符合所述第一条件或所述第二返回单元返回的符合所述第二条件的页面记录作为对所述Li的上一数据区搜索指定对象时返回的页面记录;
第二作为单元,用于在所述判断单元的判断结果为所述第i层存储单元不存在所述Li’时,将获取的根据所述第i-1层存储单元搜索所述指定对象时返回的页面记录作为对所述Li的上一数据区搜索时返回的页面记录。
结合第五方面、第五方面的第一种可能的实施方式或者第五方面的第二种可能的实施方式,在第三种可能的实施方式中,具有有序数组形式的主数据区或从数据区包括用于存放数据记录的数据记录存储区和用于存放页面记录的页面记录存储区,
所述第一搜索模块,包括:
第三搜索单元,用于根据所述获取模块获取到的页面记录所指的页面搜索所述Li中的数据记录存储区,以搜索所述指定对象;
第四搜索单元,用于当所述指定对象为指定键值时,则在所述第三搜索单元在所述Li中的数据记录存储区中未搜索到所述指定对象后,搜索所述Li的页面记录存储区以搜索用于指向所述Li的下一数据区的符合所述第一条件的页面记录;
第五搜索单元,用于当所述指定对象为指定键值范围时,则搜索所述Li的页面记录存储区以搜索用于指向所述Li的下一数据区的符合所述第二条件的页面记录;
所述搜索单元,包括:
第一搜索子单元,用于根据所述第i-1层存储单元返回的页面记录搜索所述Li’中的数据记录存储区以搜索所述指定对象;
第二搜索子单元,用于当所述指定对象为指定键值时,则在所述第一搜索子单元在所述第一搜索子单元在所述Li’中的数据记录存储区中未搜索到所述指定对象后,搜索所述Li’中的页面记录存储区以搜索用于指向所述Li的符合所述第一条件的页面记录;
第三搜索子单元,用于当所述指定对象为指定键值范围时,则搜索所述Li’的页面记录存储区以搜索用于指向所述Li的符合所述第二条件的页面记录;,
其中,所述Li的下一数据区第i+1层的主数据区Li+1或第i+1层的从数据区Li+1’。
结合第五方面、第五方面的第一种可能的实施方式、第五方面的第二种可能的实施方式或者第五方面的第三种可能的实施方式,在第四种可能的实施方式中,所述装置,还包括:
接收模块,用于在所述第0层存储单元接收搜索请求,所述搜索请求中包括所述指定对象;
第五判断模块,用于在所述接收模块接收到所述搜索请求之后,判断所述第0层存储单元是否存在从数据区L0’;
第三搜索模块,用于在所述第五判断模块的判断结果为所述第0层存储单元存在从数据区L0’时,根据所述L0’搜索所述指定对象;
第四搜索模块,用于当所述指定对象为指定键值时,则在所述第三搜索模块根据所述L0’未搜索到所述指定对象后,则搜索所述第0层存储单元的主数据区L0以搜索所述指定对象;
第五搜索模块,用于当所述指定对象为指定键值范围时,则在搜索完所述L0’之后,搜索所述L0以搜索所述指定对象;
第六搜索模块,用于在所述第五判断模块的判断结果为所述第0层存储单元不存在从数据区L0’时,根据所述L0搜索所述指定对象。
第六方面,提供了一种存储设备,该存储设备包含第一方面提供的存储装置的特性,该存储设备中包括处理器。
所述处理器,在所述第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
所述处理器,还用于检测结果为所述Li+1正在合并时,检测所述第i+1层存储单元的从数据区Li+1’是否已经达到容量上限;
所述处理器,还用于在检测结果为所述Li+1’未达到容量上限时,将所述Li中的数据记录添加至所述Li+1’中,将所述Li+1’中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1’中的所有页面所对应的页面记录的有序搜索树,其中,所述i为大于0的自然数。
在第一种可能的实施方式中,在所述检测Li+1是否正在合并之前,所述处理器,还用于判断所述Li+1是否为有序搜索树以及所述第i+1层存储单元是否存在从数据区Li+1’;
所述处理器,还用于在判断结果为所述Li+1为有序搜索树且所述第i+1层存储单元存在Li+1’时,则将所述Li和所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树;
所述处理器,还用于在判断结果为所述Li+1不为有序搜索树时,则执行所述检测Li+1是否正在合并的步骤;
在所述检测Li+1是否正在合并之后,所述处理器,还用于在检测结果为所述Li+1未在合并时,将所述Li中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树。
结合第六方面或者第六方面的第一种可能的实施方式,在第二种可能的实施方式中,所述处理器,还用于当所述Li合并为有序搜索树后,判断第i-1层存储单元的主数据区Li-1是否正在合并以及所述第i层存储单元是否存在从数据区Li’;
所述处理器,还用于在判断结果为所述Li-1未在合并且所述第i层存储单元存在Li’时,则将所述Li’以及所述Li-1中的数据记录添加至所述Li中,将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,合并后的所述Li-1为包含有用于指向合并后的所述Li中的所有页面所对应的页面记录的有序搜索树;
所述处理器,还用于在判断结果为所述Li-1未在合并且所述第i层存储单元不存在Li’时,则将所述Li-1中的数据记录添加至所述Li中,将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,合并后的所述Li-1为包含有用于指向合并后的所述Li中的所有页面所对应的页面记录的有序搜索树。
结合第六方面、第六方面的第一种可能的实施方式或者第六方面的第二种可能的实施方式,在第三种可能的实施方式中,当具有有序数组形式的所述Li-1包括用于存放页面记录的页面记录存储区时,所述处理器,还用于将所述Li中的所有页面所对应的页面记录添加至所述Li-1中的所述页面记录存储区中;
所述处理器,还用于将所述Li中的所有页面所对应的页面记录添加至所述Li-1中的所述页面记录存储区中。
结合第六方面、第六方面的第一种可能的实施方式、第六方面的第二种可能的实施方式或者第六方面的第三种可能的实施方式,在第四种可能的实施方式中,在所述检测所述Li+1’是否已经达到容量上限之后,所述处理器还可以用于在检测结果为所述Li+1’未达到容量上限时,则在预定时间段后判断所述Li+1是否合并完成;
所述处理器,还可以用于在判断结果为在预定时间段后所述Li+1合并完成时,则将所述Li以及所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树;
所述处理器,还可以用于在判断结果为在预定时间段后所述Li+1未合并完成时,则执行所述将所述Li中的数据记录添加至所述Li+1’中,将所述Li+1’中的所有页面所对应的页面记录添加至所述Li中的步骤。
结合第六方面、第六方面的第一种可能的实施方式、第六方面的第二种可能的实施方式、第六方面的第三种可能的实施方式或者第六方面的第四种可能的实施方式,在第五种可能的实施方式中,在所述检测所述Li+1’是否已经达到容量上限之前,所述处理器还可以用于从检测到所述Li+1正在合并起的所述预定时间段后,判断所述Li+1是否合并完成;
所述处理器,还可以用于在判断结果为所述Li+1未合并完成时,则执行所述检测所述Li+1’是否已经达到容量上限的步骤;
所述处理器,还可以用于在判断结果为所述Li+1合并完成时,则将所述Li以及所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树。
第七方面,提供了一种存储设备,该存储设备包含第一方面提供的存储装置的特性,该存储设备中包括处理器。
所述处理器,用于获取对所述第i层存储单元的主数据区Li的上一数据区搜索指定对象时返回的页面记录,所述上一数据区为第i-1层存储单元的主数据区Li-1或所述第i层存储单元的从数据区Li’;
所述处理器,还用于当所述Li为有序数组时,根据所述页面记录所指的位于所述Li的页面搜索所述指定对象;
所述处理器,还用于所述Li为有序搜索树时,从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合条件的页面记录,其中,所述i为大于0的自然数,所述指定对象为指定搜索的指定键值或指定搜索的指定键值范围。
在第一种可能实施方式中,所述处理器,还用于当所述指定对象为指定键值时,则从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第一条件的页面记录;
所述处理器,还用于当所述指定对象为指定键值范围时,则从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第二条件的页面记录,
其中,所述指定键值范围包括从左边界值至右边界值的值,所述第一条件为不大于所述指定键值的最大键值,所述第二条件为不大于所述左边界值的最大键值,或,大于所述左边界值且不大于所述右边界值的最小键值,所述左边界值小于所述右边界值。
结合第七方面或者第七方面的第一种可能的实施方式,在第二种可能的实施方式中,所述处理器,还用于获取根据所述第i-1层存储单元搜索所述指定对象时返回的页面记录;
所述处理器,还用于判断所述第i层存储单元是否存在所述Li’;
所述处理器,还用于在判断结果为所述第i层存储单元存在所述Li’时,则根据所述第i-1层存储单元返回的页面记录搜索所述Li’以搜索所述指定对象;
所述处理器,还用于当所述指定对象为所述指定键值时,则在所述Li’中未搜索到所述指定对象时,返回所述Li’中用于指向所述Li中符合所述第一条件的页面记录;
所述处理器,还用于当所述指定对象为所述指定键值范围时,则返回所述Li’中用于指向所述Li中符合所述第二条件的页面记录;
所述处理器,还用于将所述符合第一条件或所述第二条件的页面记录作为对所述Li的上一数据区搜索指定对象时返回的页面记录;
所述处理器,还用于在判断结果为所述第i层存储单元不存在所述Li’时,则将获取的根据所述第i-1层存储单元搜索所述指定对象时返回的页面记录作为对所述Li的上一数据区搜索时返回的页面记录,
其中,所述指定键值范围包括从左边界值至右边界值的值,所述第一条件为不大于所述指定键值,所述第二条件为不大于所述左边界值的最大键值,或,大于所述左边界值且不大于所述右边界值的最小键值,所述左边界值小于所述右边界值。
结合第七方面、第七方面的第一种可能的实施方式或者第七方面的第二种可能的实施方式,在第三种可能的实施方式中,具有有序数组形式的主数据区或从数据区包括用于存放数据记录的数据记录存储区和用于存放页面记录的页面记录存储区,
所述处理器,还用于根据所述页面记录所指的页面搜索所述Li中的数据记录存储区,以搜索所述指定对象;
所述处理器,还用于当所述指定对象为指定键值时,则在所述Li中的数据记录存储区中未搜索到所述指定对象后,搜索所述Li的页面记录存储区以搜索用于指向所述Li的下一数据区的符合所述第一条件的页面记录;
所述处理器,还用于当所述指定对象为指定键值范围时,则搜索所述Li的页面记录存储区以搜索用于指向所述Li的下一数据区的符合所述第二条件的页面记录;
所述处理器,还用于根据所述第i-1层存储单元返回的页面记录搜索所述Li’中的数据记录存储区以搜索所述指定对象;
所述处理器,还用于当所述指定对象为指定键值时,则在所述Li’中的数据记录存储区中未搜索到所述指定对象后,则搜索所述Li’中的页面记录存储区以搜索用于指向所述Li的符合所述第一条件的页面记录;
当所述指定对象为指定键值范围时,则搜索所述Li’的页面记录存储区以搜索用于指向所述Li的符合所述第二条件的页面记录;,
其中,所述Li的下一数据区第i+1层的主数据区Li+1或第i+1层的从数据区Li+1’。
结合第七方面、第七方面的第一种可能的实施方式、第七方面的第二种可能的实施方式或者第七方面的第三种可能的实施方式,在第四种可能的实施方式中,所述处理器,还用于在所述第0层存储单元接收搜索请求,所述搜索请求中包括所述指定对象;
所述处理器,还用于在接收到所述搜索请求之后,判断所述第0层存储单元是否存在从数据区L0’;
所述处理器,还用于在判断结果为所述第0层存储单元存在从数据区L0’时,则根据所述L0’搜索所述指定对象;
所述处理器,还用于当所述指定对象为指定键值时,则根据所述L0’未搜索到所述指定对象后,则搜索所述第0层存储单元的主数据区L0以搜索所述指定对象;
所述处理器,还用于当所述指定对象为指定键值范围时,则在搜索完所述L0’之后,搜索所述L0以搜索所述指定对象;
所述处理器,还用于在判断结果为所述第0层存储单元不存在从数据区L0’时,则根据所述L0搜索所述指定对象。
本发明实施例提供的技术方案带来的有益效果是:
通过在第i层存储单元的主数据区Li达到容量上限后,若第i+1层存储单元的主数据区Li+1正在合并,则将Li与第i+1层存储单元的从数据区Li+1’进行合并,合并后的Li为有序搜索树,其中,i为大于0的自然数;解决了现有技术中索引机制FD树在合并过程中占用较长时间的问题;由于在Li+1正在合并的过程中,可以同时进行Li与Li+1’的合并过程,因此实现了多线程合并,达到了可以很大程度上提高了合并速率的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术中提供的FD树的结构示意图;
图2A是本发明部分实施例中提供的存储装置的示意图;
图2B是本发明部分实施例中提供的存储装置中存储单元的示意图;
图2C是本发明部分实施例中提供的索引机制中任意两层存储单元之间的指向关系的示意图;
表2D是本发明部分实施例中提供的主数据区层次目录表;
表2E是本发明部分实施例中提供的从数据区层次目录表;
图3是本发明一个实施例提供的索引机制合并方法的方法流程图;
图4是本发明另一个实施例提供的索引机制合并方法的方法流程图;
图5是本发明再一个实施例中索引机制合并方法的方法流程图;
图6是本发明再一个实施例中索引机制合并方法的方法流程图;
图7是本发明再一个实施例中索引机制合并方法的方法流程图;
图8是本发明一个实施例中提供的搜索方法的方法流程图;
图9是本发明另一个实施例中提供的搜索方法的方法流程图;
图10是本发明一个实施例中第0层搜索数据记录的流程图;
图11是本发明一个实施例中第i层搜索数据记录的流程图;
图12是本发明另一个实施例中第0层搜索指定范围的流程图;
图13是本发明另一个实施例中第i层搜索指定范围的流程图;
图14是本发明再一个实施例中第i层搜索数据记录的流程图;
图15是本发明再一个实施例中第i层搜索数据记录的流程图;
图16是本发明一个实施例中索引机制合并装置的结构示意图;
图17是本发明另一个实施例中索引机制合并装置的结构示意图;
图18是本发明一个实施例中搜索装置的结构示意图;
图19是本发明另一个实施例中搜索装置的结构示意图;
图20是本发明一个实施例中存储设备的结构示意图;
图21是本发明另一个实施例中存储设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。下文中所讲的“i”为大于0的自然数。
请参见图2A,其示出了本发明部分实施例中提供的存储装置的示意图。该存储装置包含内存和闪存,其中内存中可以包含合并管理单元和层次目录单元,闪存中可以包括层次目录单元和日志单元。此外,该存储装置通常还会包含有设置在内存中的一层存储单元(即第0层存储单元)和设置在闪存中的至少两层存储单元。
需要说明的是,在包含有该存储装置的系统刚开始运行时,闪存中可能并不包含存储单元,随着内存不断的存储数据,当内存达到容量上限后,在闪存中建立存储单元,以用于存储数据,当数据越来越多时,闪存中建立的存储单元也越来越多。
存储单元用于存储并组织数据记录,请参见图2B,其示出了本发明部分实施例中提供的存储装置中存储单元的示意图。该存储装置中的每层存储单元可以包括主数据区,至少一层存储单元还可以包括从数据区。
第0层存储单元的主数据区L0可以为有序搜索树,当第0层存储单元存在从数据区L0’时,第0层存储单元的从数据区L0’也可以为有序搜索树,第0层存储单元中的有序搜索树可以包括数据记录和/或页面记录。
第i层存储单元的主数据区Li可以为有序搜索树,也可以为有序数组,当该第i层存储单元存在从数据区Li’时,该第i层存储单元的从数据区Li’可以为有序数组,其中,i为大于0的自然数。比如,图2B中的第1层存储单元中的主数据区L1为有序搜索树,从数据区L1’为有序数组,第2层存储单元中主数据区L2和从数据区L2’均为有序数组。
第i层存储单元中的有序搜索树可以包括页面记录,第i层存储单元中的有序数组中可以包括数据记录和/或页面记录,其中,数据记录可以包括键值和记录值,页面记录可以包括键值和页面地址。
当第i层存储单元中存在从数据区Li’时,从数据区Li’为该第i层存储单元的第一搜索数据区,该第i层存储单元中的主数据区Li为该第i层存储单元的第二搜索数据区;当该第i层存储单元中不存在从数据区Li’时,主数据区Li为该第i层存储单元的第一搜索数据区。也就是说,如果第i层存储单元同时存在主数据区Li和从数据区Li’时,则该从数据区Li’为该第i层存储单元的第一搜索数据区,如果该第i层存储单元仅存在主数据区Li时,则该主数据区Li为该第i层存储单元的第一搜索数据区。通常来讲,在第i层存储单元上进行搜索时,先从该第i层存储单元的第一搜索数据区开始搜索,如果该第i层存储单元存在第二搜索数据区时,再从该第二搜索数据区开始搜索。
在实际应用中,第i层存储单元中主数据区和从数据区之间的指向关系以及第i层与第i+1层存储单元的指向关系可以参见图2C所示,图2C为本发明部分实施例中提供的索引机制中其中两层存储单元之间的指向关系的示意图。其中,从数据区Li’为该第i层存储单元中的第一搜索数据区,该第一搜索数据区按序保存指向第i层存储单元的第二搜索数据区Li的所有页面对应的页面记录;Li按序保存指向第i+1层存储单元中的第一搜索数据区的所有页面对应的页面记录,从数据区Li’按序保存指向主数据区Li的所有页面对应的页面记录。
在实际应用中,当第i+1层存储单元中的第一搜索数据区为有序搜索树时,则Li的页面记录是无效记录,也即在对第i+1层存储单元中的第一搜索数据区进行实际搜索的过程中,直接从第i+1层存储单元中的第一搜索数据区的根节点开始搜索,而不需要利用Li的页面记录搜索第i+1层存储单元中的第一搜索数据区;当Li为有序搜索树时,则Li’的页面记录为无效记录,也即在对Li进行实际搜索的过程中,直接从Li的根节点开始搜索,而不需要利用Li’的页面记录搜索Li。
而通常,第0层存储单元的主数据区和从数据区是没有指向关系,也即当主数据区达到容量上限之后,将主数据区中的内容转移到第1层存储单元,将该从数据区作为第0层存储单元中最新的主数据区,并指向第1层存储单元,然后还可以释放掉第0层存储单元的原有的主数据区。
层次目录单元管理存储单元中的层次的相关信息,层次目录单元分别为主数据区和从数据区组织信息,请参见表2D所示,其示出了本发明部分实施例中提供的主数据区层次目录表,如下:
层次 | 形式 | 地址 |
0 | 树 | 页面1 |
1 | 树 | 页面10 |
2 | 数组 | 页面101 |
... | ... | ... |
由表2D可知,主数据区的信息主要包括层次编号、形式和地址三个字段,当主数据区的形式为有序搜索树时,主数据区的信息中的地址字段保持保存该有序搜索树根节点所在页面的地址,当主数据区的形式为有序数组时,主数据区的信息中的地址字段保存该有序数组的第一个页面的地址。
请参见表2E所示,其示出了本发明部分实施例中提供的从数据区层次目录表,如下:
层次 | 地址 |
0 | 页面8 |
1 | 页面26 |
... | ... |
由表2E可知,从数据区的信息主要包括层次编号和地址两个字段,从数据区的信息中的地址字段保存该数据区的有序数组的第一个页面的地址。当然,层次目录单元还可以保存其他有关层次及其这些层次的数据区的信息,以为其他层次的存储单元的功能提供必需的信息。
合并管理单元管理并调度存储单元之间的合并请求,来自外部的数据记录插入、修改、删除操作全部保存在0层的主从数据区,然后通过层次合并转移到下面位于闪存的层次。
日志单元保存有关数据记录修改的信息,以保证该存储装置能在故障后恢复到正确的状态。日志单元保存对0层的主从数据区的记录操作,以及层次合并的执行信息。在故障发生后,日志单元用保存的信息恢复位于0层的主从数据区的数据记录,及回滚失败的层次合并过程,使位于该存储装置中的索引机制恢复到故障之前的正确状态。
如上所述,对位于该存储装置中的索引机制的操作的结果都先保存在第0层存储单元的数据区中,且首先放在第0层存储单元的第一搜索数据区中。对于数据记录插入操作,将该数据记录直接按序插入到第0层存储单元的第一搜索数据区的某个位置。对于数据记录更改操作,如果该数据记录位于第0层存储单元的第一搜索数据区中,则直接修改该数据记录;如果该数据记录位于其他数据区,则用新的记录值和键值组成新的数据记录并添加到第0层存储单元的第一搜索数据区中。对于数据记录删除操作,如果该数据记录位于第0层存储单元的第一搜索数据区中,则直接删除该数据记录;如果该数据记录位于其他数据区,则用键值和删除标志组成新的数据记录(可称之为数据删除记录),并按序插入到第0层存储单元的第一搜索数据区的某个位置。
根据具有上述结构的存储装置可以存储获取的数据,由于每层存储单元中的数据区都具有容量上限,因此在存储数据的过程中通常会涉及到存储单元之间的合并。通常,一个数据区(从数据区或主数据区)中可以混合存放数据记录和页面记录,具体下面结合图3至图7所示的实施例对该存储装置所提供的索引机制合并的过程进行举例说明。
请参见图3所示,其示出了本发明一个实施例提供的索引机制合并方法的方法流程图。该索引机制合并方法,可以包括:
301,在第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
其中,i为大于0的自然数。
302,若检测结果为Li+1正在合并,则检测第i+1层存储单元的从数据区Li+1’是否已经达到容量上限;
303,若检测结果为Li+1’未达到容量上限,则将Li中的数据记录添加至Li+1’中,将Li+1’中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1’中的所有页面所对应的页面记录的有序搜索树。
也就是说,在检测到Li+1正在合并且Li+1’未达到容量上限时,将Li与Li+1’合并,Li与Li+1’合并的过程可以包括:将Li中的数据记录添加至Li+1’中(此时,Li中的数据记录不再存于Li),将Li+1’中的所有页面所对应的页面记录添加至Li中,其中,合并后的Li为包含有用于指向合并后的Li+1’中的所有页面所对应的页面记录的有序搜索树。
较优的,在检测Li+1是否正在合并之前,还包括:
判断Li+1是否为有序搜索树以及第i+1层存储单元是否存在从数据区Li+1’;
若判断结果为Li+1为有序搜索树且第i+1层存储单元存在Li+1’时,则将Li和Li+1’中的数据记录添加至Li+1中(此时,Li中不再存有数据记录,并释放掉Li+1’),将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树;
若判断结果为Li+1不为有序搜索树时,则执行检测Li+1是否正在合并的步骤;
在检测Li+1是否正在合并之后,还包括:
若检测结果为Li+1未在合并,则将Li中的数据记录合并至Li+1中(此时,Li中不再存有数据记录),将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。
较优的,该索引机制合并方法,还包括:
当Li合并为有序搜索树后,判断第i-1层存储单元的主数据区Li-1是否正在合并以及第i层存储单元是否存在从数据区Li’;
若判断结果为Li-1未在合并且第i层存储单元存在Li’,则将Li’以及Li-1中的数据记录添加至Li中(此时,Li-1中不再存有数据记录,并释放掉Li’),将Li中的所有页面所对应的页面记录添加至Li-1中,合并后的Li-1为包含有用于指向合并后的Li中的所有页面所对应的页面记录的有序搜索树;
若判断结果为Li-1未在合并且第i层存储单元不存在Li’,则将Li-1中的数据记录添加至Li中(此时,Li-1中不再存有数据记录),将Li中的所有页面所对应的页面记录添加至Li-1中,合并后的Li-1为包含有用于指向合并后的Li中的所有页面所对应的页面记录的有序搜索树。
较优的,当具有有序数组形式的Li-1包括用于存放页面记录的页面记录存储区时,将Li中的所有页面所对应的页面记录添加至Li-1中,包括:
将Li中的所有页面所对应的页面记录添加至Li-1中的页面记录存储区中。
较优的,在检测Li+1’是否已经达到容量上限之后,还包括:
若检测结果为Li+1’达到容量上限,则在预定时间段后判断Li+1是否合并完成;
若判断结果为在预定时间段后Li+1合并完成,则将Li以及Li+1’中的数据记录添加至Li+1中(此时,Li中不再存有数据记录,并释放掉Li+1’),将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树;
若判断结果为在预定时间段后Li+1未合并完成,则执行将Li中的数据记录添加至Li+1’中,将Li+1’中的页面记录添加至Li中的步骤。
较优的,在检测Li+1’是否已经达到容量上限之前,还包括:
从检测到Li+1正在合并起的预定时间段后,判断Li+1是否合并完成;
若判断结果为Li+1合并完成,则执行检测Li+1’是否已经达到容量上限的步骤;
若判断结果为Li+1未合并完成,则将Li以及Li+1’中的数据记录添加至Li+1中(此时,Li中不再存有数据记录,并释放掉Li+1’),将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。
综上所述,本发明实施例提供的索引机制合并方法,通过在第i层存储单元的主数据区Li达到容量上限后,若第i+1层存储单元的主数据区Li+1正在合并,则将Li与第i+1层存储单元的从数据区Li+1’进行合并,合并后的Li为有序搜索树,其中,i为大于0的自然数;解决了现有技术中索引机制FD树在合并过程中占用较长时间的问题;由于在Li+1正在合并的过程中,可以同时进行Li与Li+1’的合并过程,因此实现了多线程合并,达到了可以很大程度上提高了合并速率的效果。
请参见图4所示,其示出了本发明另一个实施例中提供的索引机制合并方法的方法流程图。该索引机制合并方法,可以包括:
401,在第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
其中,i为大于0的自然数。
通常来讲,当Li达到容量上限后,会将Li与第i+1层存储单元合并,在将Li与第i+1层存储单元进行合并的过程中,需要将Li中的数据记录移动至第i+1层存储单元中。
很显然,在实际应用中,当Li达到容量上限后,如果检测到Li+1已满,也无法直接对Li与Li+1进行合并,因此检测Li+1是否正在合并等价于检测Li+1是否已经达到容量上限。
402,若检测结果为Li+1正在合并,则检测第i+1层存储单元的从数据区Li+1’是否已经达到容量上限;
若检测结果为Li+1正在合并,则表明此时无法直接对Li与Li+1进行合并,为了加快合并速度,缩短合并时间,此时可以进一步判断Li是否能与Li+1’进行合并,因此需要首先检测Li+1’是否已经达到容量上限。
对应的,在检测到Li+1已满时,也同样表明此时无法直接对Li与Li+1进行合并,为了加快合并速度,缩短合并时间,此时可以进一步判断Li是否能与Li+1’进行合并,因此需要首先检测Li+1’是否已经达到容量上限。
403,若检测结果为Li+1’未达到容量上限,则将Li中的数据记录添加至Li+1’中,将Li+1’中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1’中的所有页面所对应的页面记录的有序搜索树;
若Li+1’未达到容量上限,为了缩短合并时间,此时可以先将Li与Li+1’进行合并。将Li与Li+1’进行合并的过程可以包括:将Li中的数据记录添加至Li+1’中(此时,Li中不再存有数据记录),将Li+1’中的所有页面所对应的页面记录添加至Li中。这样,在Li与Li+1’合并完成之后,合并后的Li为包含有用于指向合并后的Li+1’中的所有页面所对应的页面记录的有序搜索树。
404,若检测结果为Li+1’达到容量上限,则等待Li+1合并完成;
也就是说,当Li+1正在合并且Li+1’达到容量上限时,Li无法与第i+1层存储单元中任何一个数据区进行合并,此时则需要等待Li+1合并完成。
405,若检测结果为Li+1未在合并,则将Li中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。
当Li达到容量上限后,检测到Li+1未在合并,则直接将Li与Li+1进行合并。将Li与Li+1进行合并的过程可以包括:将Li中的数据记录添加至Li+1中(此时,Li中不再存有数据记录),将Li+1中的所有页面所对应的页面记录添加至Li中。这样,在Li与Li+1合并完成之后,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。
在实际应用中,由于每一层中的主数据区与下一层合并完成后都是以有效搜索树的形式存在,因此在较优的实施例中,为了较大程度上缩短合并时间,可以先检测Li+1的形式,在Li+1的形式为有序搜索树时,则表明Li+1已经合并完成,此时可以直接将Li与Li+1以及Li+1’进行合并。此时,在检测Li+1是否正在合并之前,还可以包括:
406,判断Li+1是否为有序搜索树以及第i+1层存储单元是否存在从数据区Li+1’;
需要说明的是,这里所讲判断Li+1是否为有序搜索树,即判断Li+1是否为搜索树形式,而由于本实施例中的索引机制都是建立在搜索树为有序搜索树的前提下的,因此如果判断出Li+1为搜索树形式,即为Li+1为有序搜索树。
407,若判断结果为Li+1为有序搜索树且第i+1层存储单元存在Li+1’时,则将Li和Li+1’中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。
当Li+1为有序搜索树且第i+1层存储单元存在Li+1’时,同时将Li与Li+1以及Li+1’进行合并。将Li与Li+1以及Li+1’进行合并的过程可以包括:将Li和Li+1’中的数据记录添加至Li+1中(此时,Li中不再存有数据记录,并释放掉Li+1’),将Li+1中的所有页面所对应的页面记录添加至Li中。这样,在Li与Li+1以及Li+1’合并完成之后,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。此时,由于Li+1’中的数据记录已经添加Li+1中了,且Li+1’中的页面记录是用于指向Li+1中页面的页面记录,为了减少占用的闪存空间,此时则通常会释放掉Li+1’,并将Li+1中的所有页面所对应的页面记录添加至Li中,此时,Li中会包含有用于指向Li+1中的所有页面所对应的页面记录。
若判断结果为Li+1不为有序搜索树时,则执行步骤401。
综上所述,本发明实施例提供的索引机制合并方法,通过在第i层存储单元的主数据区Li达到容量上限后,若第i+1层存储单元的主数据区Li+1正在合并或已达到Li+1的容量上限,则先将Li与第i+1层存储单元的从数据区Li+1’进行合并,合并后的Li为有序搜索树;若Li+1未达到Li+1的容量上限且未在合并,则直接将Li与Li+1进行合并;若Li+1为搜索树,则直接将Li与Li+1以及Li+1’进行合并;解决了现有技术中索引机制FD树在合并过程中占用较长时间的问题;由于在Li+1正在合并的过程中,可以同时进行Li与Li+1’的合并过程,因此实现了多线程合并,达到了可以很大程度上提高了合并速率的效果。
索引机制根据图3和图4中所示的索引机制合并方法将需要合并的存储单元均合并完成后,由于合并后的每一层存储单元只存在具有页面记录的有序搜索树,而该有序搜索树中的页面记录相较于合并之前发生了变化,因此为了保证从第0层可以搜索到指定键值或指定键值范围,需要将合并后的每一层存储单元中最新的页面记录反馈给上一层存储单元,也即需要通过回滚过程将下一层存储单元中最新的页面记录告知上一层存储单元。通常,一个具有有序数组形式的数据区(从数据区或主数据区)中可以混合存放数据记录和页面记录,下面结合图5对合并过程中的回滚过程进行说明。
请参见图5所示,其示出了本发明再一个实施例中索引机制合并方法的方法流程图。该索引机制合并方法,可以包括:
501,当Li合并为有序搜索树后,判断第i-1层存储单元的主数据区Li-1是否正在合并以及第i层存储单元是否存在从数据区Li’;
502,若判断结果为Li-1未在合并且第i层存储单元存在Li’,则将Li’以及Li-1中的数据记录添加至Li中,将Li中的所有页面所对应的页面记录添加至Li-1中,合并后的Li-1为包含有用于指向合并后的Li中的所有页面所对应的页面记录的有序搜索树;
503,若判断结果为Li-1未在合并且第i层存储单元不存在Li’,则将Li-1中的数据记录添加至Li中,将Li中的所有页面所对应的页面记录添加至Li-1中,合并后的Li-1为包含有用于指向合并后的Li中的所有页面所对应的页面记录的有序搜索树。
需要说明的是,步骤501的所提及的“当Li合并为有序搜索树后”中的Li,可以是通过图3中所示的实施例合并后得到的Li,也可以是通过图4中所示的实施例合并后得到的Li。
综上所述,本发明实施例提供的索引机制合并方法,通过在Li合并为有序搜索树后,将Li以及Li’中的页面记录反馈给上一层的存储单元中的Li-1;这样,当整个索引机制合并完成之后,通过回滚过程可以将所有下层存储单元中合并后的页面记录反馈给上一层存储单元中,从而可以保证从第0层存储单元搜索闪存中的数据记录时,可以通过正确的路径搜索该数据记录。
在一个可能实现的实施方式中,一个具有有序数组形式的数据区(从数据区或主数据区)中可以将数据记录和页面记录分别独立存放,也就是说一个具有有序数组形式的数据区可以报用于存放页面记录的页面记录存储区以及用于存放数据记录的数据记录存储区。举例来讲,当具有有序数组形式的Li-1包括用于存放页面记录的页面记录存储区时,步骤502中的将Li中的所有页面所对应的页面记录添加至Li-1中,可以包括:将Li中的所有页面所对应的页面记录添加至Li-1中的页面记录存储区中。步骤503中的将Li中的所有页面所对应的页面记录添加至Li-1中,可以包括:将Li中的所有页面所对应的页面记录添加至Li-1中的页面记录存储区中。也就是说,当需要将第一数据区中的所有页面所对应的页面记录添加至第二数据区时,只需要将第一数据区中的所有页面所对应的页面记录添加至第二数据区中的页面记录存储区中即可;当需要将第一数据区中的数据记录添加至第二数据区时,只需要将第一数据区中的数据记录添加至第二数据区中的数据记录存储区中即可。
在图3和图4中所示的实施例中,当第i+1层存在Li+1’时,将第i层存储单元和第i+1层存储单元的合并过程通常可以包括:首先,在Li+1正在合并时,先将Li与Li+1’,然后,当Li+1合并完成后,再将合并后的Li与Li+1以及合并后的Li+1’进行合并。也就是说,只要第i+1层存在Li+1’,最终都需要将Li与Li+1以及Li+1’进行合并。因此为了减少合并过程的繁琐,在Li+1正在合并时,可以先等待Li+1完成合并,再同时将Li与Li+1以及Li+1’进行合并。下面结合图6和图7所示的实施例进行举例说明。
请参见图6所示,其示出了本发明再一个实施例中索引机制合并方法的方法流程图。该索引机制合并方法,可以包括:
601,在第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
602,若检测结果为Li+1正在合并,则检测第i+1层存储单元的从数据区Li+1’是否已经达到容量上限;
603,若检测结果为Li+1’未达到容量上限,则在预定时间段后判断Li+1是否合并完成;
604,若判断结果为在预定时间段后Li+1合并完成,则将Li以及Li+1’中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树;
也即,当判断结果为在预定时间段后Li+1合并完成时,将Li、Li+1’以及Li+1进行合并。
同理,由于Li+1’中的数据记录已经添加Li+1中了,且Li+1’中的页面记录是用于指向Li+1中页面的页面记录,为了减少占用的闪存空间,此时则通常会释放掉Li+1’,并将Li+1中的所有页面所对应的页面记录添加至Li中,此时,Li中会包含有用于指向Li+1中的所有页面所对应的页面记录。
605,若判断结果为在预定时间段后Li+1未合并完成,则将Li中的数据记录添加至Li+1’中,将Li+1’中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1’中的所有页面所对应的页面记录的有序搜索树;
也即,当判断结果为在预定时间段后Li+1未合并完成时,将Li以及Li+1’进行合并。
606,若判断结果为Li+1’达到容量上限,则等待Li+1合并完成;
607,若判断结果为Li+1未在合并,则将Li中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。
也即,在Li+1未在合并时,将Li以及Li+1进行合并。
综上所述,本发明实施例提供的索引机制合并方法,通过在检测到Li达到容量上限且Li+1正在合并时,先等待预定时间,在预定时间后若Li+1完成合并时,则直接将Li与Li+1以及Li+1’合并,较大程度上缩短合并时间;由于等待预定时间之后,可以将原来先将Li与Li+1’合并、再将合并后的Li与Li+1以及合并后的Li+1’合并的过程变为直接将Li与Li+1以及Li+1’合并的过程,因此减少了合并过程的繁琐,降低总写输入/输出次数。
请参见图7所示,其示出了本发明再一个实施例中索引机制合并方法的方法流程图。该索引机制合并方法,可以包括:
701,在第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
702,若检测结果为Li+1正在合并,则从检测到Li+1正在合并起的预定时间段后,判断Li+1是否合并完成;
703,若判断结果为Li+1未合并完成,则检测Li+1’是否已经达到容量上限;
704,若检测结果为Li+1’未达到容量上限,则将Li中的数据记录添加至Li+1’中,将Li+1’中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1’中的所有页面所对应的页面记录的有序搜索树;
也即,当Li+1未合并完成且Li+1’未达到容量上限时,将Li与Li+1’合并。
705,若检测结果为Li+1’达到容量上限,则等待Li+1合并完成;
706,若判断结果为Li+1合并完成,则将Li以及Li+1’中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树;
也即,等待预定时间段后,如果Li+1合并完成,则将Li、Li+1以及Li+1’合并。
同理,由于Li+1’中的数据记录已经添加Li+1中了,且Li+1’中的页面记录是用于指向Li+1中页面的页面记录,为了减少占用的闪存空间,此时则通常会释放掉Li+1’,并将Li+1中的所有页面所对应的页面记录添加至Li中,此时,Li中会包含有用于指向Li+1中的所有页面所对应的页面记录。
707,若判断结果为Li+1未在合并,则将Li中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。
也即,在Li达到容量上限且检测到Li+1未在合并时,则将Li以及Li+1合并。
综上所述,本发明实施例提供的索引机制合并方法,通过在检测到Li达到容量上限且Li+1正在合并时,先等待预定时间,在预定时间后若Li+1完成合并时,则直接将Li与Li+1以及Li+1’合并,较大程度上缩短合并时间;由于等待预定时间之后,可以将原来先将Li与Li+1’合并、再将合并后的Li与Li+1以及合并后的Li+1’合并的过程变为直接将Li与Li+1以及Li+1’合并的过程,因此减少了合并过程的繁琐,降低总写输入/输出次数。
根据具有上述结构的存储装置所提供的索引机制可以搜索该存储单元中的数据,由于该索引机制为分层结构,因此,在搜索时,先从第0层存储单元的第一搜索数据区开始,依次往下搜索各层次的各个数据区,直至找到满足条件的记录或者搜索完所有的层次为止。而由该索引机制的特性可知,指向下一搜索数据区的页面记录可能失效,所以在搜索下一搜索数据区前,需要判断下一搜索数据区的形式,如果下一搜索数据区是数组,则指向该下一搜索数据区的页面记录有效;如果下一搜索数据区是搜索树,则指向该下一搜索数据区的页面记录无效。下面结合图8至图15中所示的实施例进行举例说明。
请参见图8所示,其示出了本发明一个实施例中提供的搜索方法的方法流程图。该搜索方法,可以包括:
801,获取对第i层存储单元的主数据区Li的上一数据区搜索指定对象时返回的页面记录,上一数据区为第i-1层存储单元的主数据区Li-1或第i层存储单元的从数据区Li’;
这里的i为大于0的自然数,指定对象可以为指定搜索的指定键值,也可以为指定搜索的指定键值范围。
指定键值范围可以包括从左边界值至右边界值的值,其中左边界值小于右边界值。
需要说明的是,在搜索时,为了便于描述,这里将指定对象定义为指定键值和指定键值范围,但最终想要得到的搜索结果应当为指定对象所对应的数据记录,即搜索到的指定键值所对应的数据记录以及搜索到的位于指定键值范围中的键值所对应的数据记录。
802,当Li为有序数组时,根据页面记录所指的位于Li的页面搜索指定对象;
803,当Li为有序搜索树时,从Li的根节点所在页面搜索用于指向第i+1层存储单元中符合条件的页面记录。
较优的,从Li的根节点所在页面搜索指向下一数据区符合条件的页面记录,包括:
当指定对象为指定键值时,则从Li的根节点所在页面搜索指向第i+1层存储单元中符合第一条件的页面记录;
当指定对象为指定键值范围时,则从Li的根节点所在页面搜索指向第i+1层存储单元中符合第二条件的页面记录,
其中,指定键值范围包括从左边界值至右边界值的值,第一条件为不大于指定键值的最大键值,第二条件为不大于左边界值的最大键值,或,大于左边界值且不大于右边界值的最小键值,左边界值小于右边界值。
较优的,获取对Li的上一数据区搜索指定对象时返回的页面记录,包括:
获取根据第i-1层存储单元搜索指定对象时返回的页面记录;
判断第i层存储单元是否存在Li’;
若判断结果为第i层存储单元存在Li’,则根据第i-1层存储单元返回的页面记录搜索Li’以搜索指定对象;
当指定对象为指定键值时,则在Li’中未搜索到指定对象时,返回Li’中用于指向Li中符合第一条件的页面记录;
当指定对象为指定键值范围时,则返回Li’中用于指向Li中符合第二条件的页面记录;
将符合第一条件或第二条件的页面记录作为对Li的上一数据区搜索指定对象时返回的页面记录;
若判断结果为第i层存储单元不存在Li’,则将获取的根据第i-1层存储单元搜索指定对象时返回的页面记录作为对Li的上一数据区搜索时返回的页面记录。
较优的,返回Li’中用于指向Li中符合条件的页面记录,包括:
当指定对象为指定搜索的键值为p的指定数据记录时,返回Li’中用于指向Li中具有不大于p的最大键值的页面记录;
当指定对象为指定搜索的键值范围为(x,y)的指定范围时,返回Li’中用于指向Li中具有不大于x的最大键值,或,大于x且不大于y的最小键值的页面记录。
较优的,具有有序数组形式的主数据区或从数据区包括用于存放数据记录的数据记录存储区和用于存放页面记录的页面记录存储区,
根据页面记录所指的位于Li的页面搜索指定对象,包括:
根据页面记录所指的页面搜索Li中的数据记录存储区,以搜索指定对象;
当指定对象为指定键值时,则在Li中的数据记录存储区中未搜索到指定对象后,搜索Li的页面记录存储区以搜索用于指向Li的下一数据区的符合第一条件的页面记录;
当指定对象为指定键值范围时,则搜索Li的页面记录存储区以搜索用于指向Li的下一数据区的符合第二条件的页面记录;
根据第i-1层存储单元返回的页面记录搜索Li’以搜索指定对象,包括:
根据第i-1层存储单元返回的页面记录搜索Li’中的数据记录存储区以搜索指定对象;
当指定对象为指定键值时,则在Li’中的数据记录存储区中未搜索到指定对象后,则搜索Li’中的页面记录存储区以搜索指定对象;
当指定对象为指定键值范围时,则搜索Li’的页面记录存储区以搜索用于指向Li的符合第二条件的页面记录;,
其中,Li的下一数据区第i+1层的主数据区Li+1或第i+1层的从数据区Li+1’。
较优的,该搜索方法,还包括:
在第0层存储单元接收搜索请求,搜索请求中包括指定对象;
在接收到搜索请求之后,判断第0层存储单元是否存在从数据区L0’;
若判断结果为第0层存储单元存在从数据区L0’,则根据L0’搜索指定对象;
当指定对象为指定键值时,则在根据L0’未搜索到指定对象后,则搜索第0层存储单元的主数据区L0以搜索用于指向第1层存储单元的符合第一条件的页面记录;
当指定对象为指定键值范围时,则搜索L0以搜索用于指向第1层存储单元的符合第二条件的页面记录;
若判断结果为第0层存储单元不存在从数据区L0’,则根据L0搜索指定对象。
综上所述,本发明实施例提供的搜索方法,通过获取对Li的上一数据区搜索指定对象时返回的页面记录,在Li为有序数组时,根据该页面记录所指的位于Li的页面搜索指定对象;而在Li为有序搜索树时,从Li的根节点所在页面搜索指定对象;根据该存储装置所提供的索引机制的特性可知,有序搜索树形式的数据区可以加快对指定对象进行搜索的速度,达到了可以大大缩短搜索到指定对象的时间的效果。
请参见图9所示,其示出了本发明另一个实施例中提供的搜索方法的方法流程图。该搜索方法,可以包括:
901,获取根据第i-1层存储单元搜索指定对象时返回的页面记录;
这里的i为大于0的自然数,指定对象可以为指定搜索的指定数据记录,也可以为指定搜索的指定范围。
902,判断第i层存储单元是否存在Li’;
903,若判断结果为第i层存储单元存在Li’,则根据第i-1层存储单元返回的页面记录搜索Li’以搜索指定对象;
通常来讲,当第i层存储单元存在Li’时,第i-1层存储单元的主数据区指向的是Li’,即第i-1层存储单元返回的页面记录指向的页面位于Li’中,因此可以根据第i-1层存储单元返回的页面记录搜索Li’以搜索指定对象。
904,当所述指定对象为所述指定键值时,则在Li’中未搜索到指定对象时,返回Li’中用于指向Li中符合第一条件的页面记录;
通常来讲,Li’指向的是Li,即Li’返回的页面记录指向的页面位于Li中,因此当Li’中未搜索到指定对象时,返回Li’中用于指向Li中符合条件的页面记录。
第一条件为不大于所述指定键值。举例来讲,返回Li’中用于指向Li中符合第一条件的页面记录,可以包括:当指定对象为指定搜索的键值为p的指定数据记录时,返回Li’中用于指向Li中具有不大于p的最大键值的页面记录。
905,当所述指定对象为所述指定键值范围时,则返回所述Li’中用于指向所述Li中符合第二条件的页面记录;
指定键值范围包括从左边界值至右边界值的值,第二条件为不大于左边界值的最大键值,或,大于左边界值且不大于所述右边界值的最小键值,左边界值小于右边界值。举例来讲,返回Li’中用于指向Li中符合第二条件的页面记录,可以包括:当指定对象为指定搜索的键值范围为(x,y)的指定范围时,返回Li’中用于指向Li中具有不大于x的最大键值,或,大于x且不大于y的最小键值的页面记录。
906,将该符合第一条件或第二条件的页面记录作为对Li的上一数据区搜索指定对象时返回的页面记录;
907,若判断结果为第i层存储单元不存在Li’,则将获取的根据第i-1层存储单元搜索指定对象时返回的页面记录作为对Li的上一数据区搜索时返回的页面记录;
通常来讲,当第i层存储单元不存在Li’时,第i-1层存储单元的主数据区指向的是Li,即第i-1层存储单元返回的页面记录指向的页面位于Li中,因此可以将获取的根据第i-1层存储单元搜索指定对象时返回的页面记录作为对Li的上一数据区搜索时返回的页面记录。
908,获取对第i层存储单元的主数据区Li的上一数据区搜索指定对象时返回的页面记录,上一数据区为第i-1层存储单元的主数据区Li-1或第i层存储单元的从数据区Li’;
也即,可以获取步骤906或步骤907中返回的页面记录。
909,当Li为有序数组时,根据该页面记录所指的位于Li的页面搜索指定对象;
910,当Li为有序搜索树时,从Li的根节点所在页面搜索用于指向第i+1层存储单元中符合条件的页面记录。
从Li的根节点所在页面搜索指向下一数据区符合条件的页面记录,包括:
当指定对象为指定键值时,则从Li的根节点所在页面搜索指向第i+1层存储单元中符合第一条件的页面记录;
当指定对象为指定键值范围时,则从Li的根节点所在页面搜索指向第i+1层存储单元中符合第二条件的页面记录,
其中,指定键值范围包括从左边界值至右边界值的值,第一条件为不大于指定键值的最大键值,第二条件为不大于左边界值的最大键值,或,大于左边界值且不大于右边界值的最小键值,左边界值小于右边界值。
根据上述结构的索引机制的特性可知,当Li为有序搜索树时,指向Li的页面记录均无效,此时则从Li的根节点所在页面搜索指定对象。
综上所述,本发明实施例提供的搜索方法,通过获取对Li的上一数据区搜索指定对象时返回的页面记录,在Li为有序数组时,根据该页面记录所指的位于Li的页面搜索指定对象;而在Li为有序搜索树时,从Li的根节点所在页面搜索指定对象;根据该存储装置所提供的索引机制的特性可知,有序搜索树形式的数据区可以加快对指定对象进行搜索的速度,达到了可以大大缩短搜索到指定对象的时间的效果。
在实际应用中,由于指定对象可以为指定搜索的指定数据记录,也可以为指定搜索的指定范围,且第0层存储单元和第i层存储单元的结构不同,在每一次存储单元搜索时的搜索过程有部分区别。通常,具有有序数组形式的主数据区或从数据区中的数据记录和页面记录可以混合存储,以下结合图10至图13分别对搜索方法进行举例说明。
请参见图10所示,其示出了本发明一个实施例中第0层搜索数据记录的流程图。图10中所示的是指定对象为指定搜索的具有指定键值为p的指定数据记录时第0层搜索数据记录的流程图。该搜索方法可以包括:
1001,判断是否存在L0’;
这里所讲的L0’为索引机制中第0层的从数据区。
1002,若判断结果为存在L0’,则搜索L0’以获取指定键值为p的指定数据记录;
在实际搜索的过程中,首先判断L0’是否存在,当L0’存在时,先在L0’进行搜索指定对象,本实施例将指定对象的指定键值设定为p。
当L0’不存在时,则直接执行步骤1004。
1003,判断L0’中是否存在该指定数据记录;
1004,若判断结果为L0’中不存在该指定数据记录,则搜索L0以获取键值为p的指定数据记录;
若判断结果为L0’中存在该指定数据记录,则直接执行步骤1006。
1005,判断L0中是否存在该指定数据记录;
1006,若判断结果为L0中存在该指定数据记录,则返回指定数据记录;
1007,若判断结果为L0中不存在该指定数据记录,则返回L0中用于指向第1层中具有不大于p的最大键值的页面记录。
通常来讲,如果第1层存储单元中包括从数据区L1’,则返回L0中用于指向L1’中具有不大于p的最大键值的页面记录;如果第1层存储单元中不包括从数据区L1’,则返回L0中用于指向L1中具有不大于p的最大键值的页面记录。
综上所述,本发明实施例提供的搜索方法,可以对第0层存储单元进行搜索,当获取到指定数据记录时,返回该指定数据记录;当未获取到指定数据记录时,返回L0中用于指向L1中具有不大于p的最大键值的页面记录;由此可知,当第0层存储单元未获取到指定数据记录时,可以将对指定数据记录的搜索工作移步到第1层存储单元中。
请参见图11所示,其示出了本发明一个实施例中第i层搜索数据记录的流程图。图11中所示的是指定对象为指定搜索的具有指定键值p的指定数据记录时第i层搜索数据记录的流程图。该搜索方法可以包括:
1101,判断是否存在Li’;
这里所讲的i为大于0的自然数。
1102,若判断结果为存在Li’,则根据上一数据区搜索返回的页面记录搜索Li’的页面;
这里的上一数据区通常为在Li-1中搜索该指定数据记录但未搜索到该指定数据时返回的页面记录。
若判断结果为不存在Li’,则直接执行步骤1104。
1103,判断Li’中是否存在该指定数据记录;
1104,若判断结果为Li’中不存在该指定数据记录,则获取指向Li中具有不大于p的最大键值的页面记录;
若判断结果为Li’中存在该指定数据记录,则直接执行步骤1108。
1105,判断Li是否为数组;
1106,若判断结果为Li是数组,则根据上一数据区搜索返回的页面记录读取页面;
当存在Li’时,这里所讲的上一数据区即为Li’,当不存在Li’时,这里所讲的上一数据区即为Li-1。
1107,判断Li是否存在该指定数据记录;
1108,若判断结果为Li存在该指定数据记录,则返回该指定数据记录;
若判断结果为Li不存在该指定数据记录,则直接执行步骤1111。
1109,若判断结果为Li不是数组,则读取Li根节点所在页面;
1110,在Li中搜索用于指向第i+1层的具有不大于p的最大键值的页面记录;
1111,返回指向第i+1层的具有不大于p的最大键值的页面记录。
这里所讲的第i+1层即为第i+1层存储单元。
综上所述,本发明实施例提供的搜索方法,可以对第i层存储单元进行搜索,当获取到具有指定键值p的指定数据记录时,返回该指定数据记录;当未获取到指定数据记录时,返回用于指向Li+1中具有不大于p的最大键值的页面记录;由此可知,当第i层存储单元未获取到指定数据记录时,可以将对指定数据记录的搜索工作移步到第i+1层存储单元中。
需要说明的是,图10和图11中所示的实施例可以作为一个实施例,该实施例可以实现对指定数据记录进行搜索的方法。
请参见图12所示,其示出了本发明另一个实施例中第0层搜索指定范围的流程图。图12中所示的是指定对象为指定搜索的指定范围(对应的键值范围为(x,y))时第0层搜索指定范围的流程图。该搜索方法可以包括:
1201,检测是否存在L0’;
这里所讲的L0’为索引机制中第0层的从数据区。
1202,若判断结果为存在L0’,则从L0’的根节点开始前序搜索,将指定范围内的数据记录加到结果集;
由于搜索范围中可能包括多个数据记录,因此,可以将搜索到的数据记录统一放入到设定的结果集中。本实施例将指定范围的键值设定为(x,y)。
1203,从L0的根节点开始前序搜索,将不小于x且不大于y的所有记录加到该结果集,且返回L0中用于指向第1层中具有不大于x的最大键值或大于x且不小于y的最小键值的页面记录;
这里的第1层为第1层存储单元,通常来讲,如果第1层存储单元中包括从数据区L1’,则返回L0中用于指向L1’中具有不大于p的最大键值的页面记录;如果第1层存储单元中不包括从数据区L1’,则返回L0中用于指向L1中具有不大于p的最大键值的页面记录。
1204,返回该结果集以及指向第1层的页面记录。
指向第1层的页面记录即为:L0中用于指向第1层中具有不大于x的最大键值或大于x且不小于y的最小键值的页面记录。
综上所述,本发明实施例提供的搜索方法,可以对第0层存储单元进行搜索,当获取到指定范围时,返回该指定范围中的数据记录;当未获取到指定范围中的数据记录时,返回L0中用于指向L1中具有不大于x的最大键值或大于x且不小于y的最小键值的页面记录;由此可知,当第0层存储单元未获取到指定范围中的数据记录时,可以将对指定范围中的数据记录的搜索工作移步到第1层存储单元中。
请参见图13所示,其示出了本发明另一个实施例中第i层搜索指定范围的流程图。图13中所示的是指定对象为指定搜索的指定范围时第i层搜索指定范围的流程图。该搜索方法可以包括:
1301,判断是否存在Li’;
这里所讲的i为大于0的自然数。
1302,若判断结果为存在Li’,则根据第i-1层搜索返回的页面记录定位到指定范围的起始搜索页面;
若判断结果为不存在Li’,则直接执行步骤1304。
1303,顺序扫描该起始搜索页面的后续页面,将不小于x且不大于y的数据记录加到结果集中,并返回Li’中用于指向Li的具有不大于x的最大键值或大于x且不大于y的最小键值的页面记录;
1304,判断Li是否为数组;
1305,若判断结果Li为数组,则利用Li’搜索返回的页面记录定位到指定范围的起始搜索页面;
1306,顺序扫描该起始搜索页面的后续页面,将不小于x且不大于y的数据记录加到结果集,并记录指向第i+1层的具有不大于x的最大键值或大于x且不大于y的最小键值的页面记录;
1307,若判断结果Li不为数组,则从Li的根节点开始前序搜索,找到指向第i+1层的的具有不大于x的最大键值或大于x且不大于y的最小键值的页面记录;
1308,返回该结果集以及指向第i+1层的页面记录。
指向第i+1层的页面记录即为:指向第i+1层的的具有不大于x的最大键值或大于x且不大于y的最小键值的页面记录。
需要说明的是,在对指定键值范围进行搜索时,为了搜索到该存储结构中该指定键值范围内的所有数据记录,需要搜索到最后一个存储区。
综上所述,本发明实施例提供的搜索方法,可以对第i层存储单元进行搜索,当获取到指定范围中的数据记录时,返回指定范围中的指定数据记录;当还存在有未获取到的指定范围中的数据记录时,返回用于指向第i+1层的具有不大于x的最大键值或大于x且不大于y的最小键值的页面记录;由此可知,当第i层存储单元未完全获取到指定范围中的数据记录时,可以将对指定范围中的数据记录的搜索工作移步到第i+1层存储单元中。
需要说明的是,图12和图13中所示的实施例可以作为一个实施例,该实施例可以实现对指定范围进行搜索的方法。
值得指明的是,具有有序数组形式的主数据区或从数据区中的数据记录和页面记录还可以单独存放,换句话说,具有有序数组形式的主数据区或从数据区可以包括用于存放数据记录的数据记录存储区和用于存放页面记录的页面记录存储区,步骤908中根据所述页面记录所指的位于所述Li的页面搜索所述指定对象,可以包括:根据所述页面记录所指的页面搜索所述Li中的数据记录存储区,以搜索所述指定对象;在所述Li中的数据记录存储区中未搜索到所述指定对象后,搜索所述Li的页面记录存储区,以搜索所述指定对象。步骤903中根据所述第i-1层存储单元返回的页面记录搜索所述Li’以搜索所述指定对象,可以包括:根据所述第i-1层存储单元返回的页面记录搜索所述Li’中的数据记录存储区以搜索所述指定对象;在所述Li’中的数据记录存储区中未搜索到所述指定对象后,则搜索所述Li’中的页面记录存储区以搜索所述指定对象。
在一个可能实现的实施方法中,当指定对象为指定搜索的指定数据记录,且具有有序数组形式的主数据区或从数据区包括数据记录存储区和页面记录存储区时,请参见图14所示,其示出了本发明再一个实施例中第i层搜索数据记录的流程图。该搜索方法可以包括:
1401,判断是否存在Li’;
这里所讲的i为大于0的自然数。
1402,若判断结果为存在Li’,则根据上一数据区搜索返回的页面记录搜索Li’中的数据记录存储区的页面;
这里的上一数据区通常为在Li-1中搜索该指定数据记录但未搜索到该指定数据时返回的页面记录。
当数据区包括数据记录存储区和页面记录存储区时,首先搜索数据记录存储区,然后在搜索页面记录存储区。
若判断结果为不存在Li’,则直接执行步骤1404。
1403,判断Li’中的数据记录存储区是否存在该指定数据记录;
1404,若判断结果为Li’中的数据记录存储区不存在该指定数据记录,则在Li’中的页面记录存储区中搜索该指定数据记录,获取指向Li中具有不大于p的最大键值的页面记录;
若判断结果为Li’中存在该指定数据记录,则直接执行步骤1408。
1405,判断Li是否为数组;
1406,若判断结果为Li是数组,则根据上一数据区搜索返回的页面记录读取Li中数据记录存储区的页面;
当存在Li’时,由于先搜索Li’的数据记录存储区,再搜索Li’的页面记录存储区,所以这里所讲的上一数据区即为Li’的页面记录存储区;同理,当不存在Li’时,在第i-1层存储单元中,由于先搜索Li-1的数据记录存储区,再搜索Li-1的页面记录存储区,这里所讲的上一数据区即为Li-1的页面记录存储区。
1407,判断Li中数据记录存储区是否存在该指定数据记录;
1408,若判断结果为Li中数据记录存储区存在该指定数据记录,则返回该指定数据记录;
1409,若判断结果为Li中数据记录存储区不存在该指定数据记录,则在Li中的页面记录存储区中搜索下一搜索区的页面记录;
1410,判断Li中页面记录存储区中是否存在该指定数据记录;
若判断结果为Li中页面记录存储区中不存在该指定数据记录,则直接执行步骤1413。
若判断结果为Li中页面记录存储区中存在该指定数据记录,则直接执行步骤1408。
1411,若判断结果为Li不是数组,则读取Li根节点所在页面;
1412,在Li中搜索用于指向Li+1中的第一搜索数据区的数据记录存储区的不大于p的最大键值的页面记录;
1413,返回指向Li+1中的第一搜索数据区的数据记录存储区的具有不大于p的最大键值的页面记录。
综上所述,本发明实施例提供的搜索方法,可以对第i层存储单元进行搜索,在对第i层存储单元中的数据区进行搜索时,先对数据区中数据记录存储区进行搜索,如果搜索不到,则对该数据区中页面记录存储区进行搜索,当获取到指定数据记录时,返回该指定数据记录;当未获取到指定数据记录时,返回指向Li+1中的第一搜索数据区的数据记录存储区的具有不大于p的最大键值的页面记录;由此可知,当第i层存储单元未获取到指定数据记录时,可以将对指定数据记录的搜索工作移步到第i+1层存储单元中。
在再一个可能实现的实施方法中,当指定对象为指定搜索的指定范围,且具有有序数组形式的主数据区或从数据区中的数据记录和页面记录单独存放时(即具有有序数组形式的主数据区或从数据区可以包括数据记录存储区和页面记录存储区),请参见图15所示,其示出了本发明再一个实施例中第i层搜索数据记录的流程图。该搜索方法可以包括:
1501,判断是否存在Li’;
这里所讲的i为大于0的自然数。
1502,若判断结果为存在Li’,则根据Li-1搜索返回的页面记录搜索定位到Li’中的数据记录存储区的起始搜索页面;
当数据区包括数据记录存储区和页面记录存储区时,首先搜索数据记录存储区,然后在搜索页面记录存储区。
若判断结果为不存在Li’,则直接执行步骤1505。
1503,顺序扫描该起始搜索页面的后续页面,将不小于x且不大于y的数据记录加到结果集;
1504,搜索Li’页面记录存储区,获取指向Li的不大于x的最大键值或大于x且不大于y的最小键值的页面记录;
1505,判断Li是否为数组;
1506,若判断结果Li为数组,则利用Li’搜索返回的页面记录定位到Li的数据记录存储区的起始搜索页面;
1507,顺序扫描该起始搜索页面的后续页面,将不小于x且不大于y的数据记录加到结果集;
1508,搜索Li的页面记录存储区,获取指向i+1层的不大于x的最小键值或大于x且不大于y的最小键值的页面记录;
1509,若判断结果Li不为数组,则从Li的根节点开始前序搜索,获取指向i+1层的不大于x的最大键值或大于x且不大于y的最小键值的页面记录;
1510,返回该结果集以及指向第i+1层的该页面记录。
该指向第i+1层的该页面记录即为:指向i+1层的不大于x的最大键值或大于x且不大于y的最小键值的页面记录。
需要说明的是,在对指定键值范围进行搜索时,为了搜索到该存储结构中该指定键值范围内的所有数据记录,需要搜索到最后一个存储区。
综上所述,本发明实施例提供的搜索方法,可以对第i层存储单元进行搜索,在对第i层存储单元中的数据区进行搜索时,先对数据区中数据记录存储区进行搜索,然后对该数据区中页面记录存储区进行搜索,当获取到指定范围内的所有数据记录时,返回包含有所有数据记录的结果集;当未完全获取到指定范围内的数据记录时,返回指向i+1层的不大于x的最大键值或大于x且不大于y的最小键值的页面记录;由此可知,当第i层存储单元未获取到指定数据记录时,可以将对指定数据记录的搜索工作移步到第i+1层存储单元中。
请参见图16所示,其示出了本发明一个实施例中索引机制合并装置的结构示意图。该索引机制合并装置可以用于图2A至图2C以及表2D和表2E所示特性的存储装置的设备中。该索引机制合并装置可以包括:第一检测模块1601、第二检测模块1602和第一合并模块1603。
第一检测模块1601,可以用于在第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
第二检测模块1602,可以用于在第一检测模块1601的检测结果为Li+1正在合并时,检测第i+1层存储单元的从数据区Li+1’是否已经达到容量上限;
第一合并模块1603,可以用于在第二检测模块1602的检测结果为Li+1’未达到容量上限时,将Li中的数据记录添加至Li+1’中,将Li+1’中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1’中的所有页面所对应的页面记录的有序搜索树,
其中,i为大于0的自然数。
综上所述,本发明实施例提供的索引机制合并装置,通过在第i层存储单元的主数据区Li达到容量上限后,若第i+1层存储单元的主数据区Li+1正在合并,则将Li与第i+1层存储单元的从数据区Li+1’进行合并,合并后的Li为有序搜索树,其中,i为大于0的自然数;解决了现有技术中索引机制FD树在合并过程中占用较长时间的问题;由于在Li+1正在合并的过程中,可以同时进行Li与Li+1’的合并过程,因此实现了多线程合并,达到了可以很大程度上提高了合并速率的效果。
请参见图17所示,其示出了本发明另一个实施例中索引机制合并装置的结构示意图。该索引机制合并装置可以用于图2A至图2C以及表2D和表2E所示特性的存储装置的设备中。该索引机制合并装置可以包括:第一检测模块1701、第二检测模块1702和第一合并模块1703。
第一检测模块1701,可以用于在第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
第二检测模块1702,可以用于在第一检测模块1701的检测结果为Li+1正在合并时,检测第i+1层存储单元的从数据区Li+1’是否已经达到容量上限;
第一合并模块1703,可以用于在第二检测模块1702的检测结果为Li+1’未达到容量上限时,将Li中的数据记录添加至Li+1’中,将Li+1’中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1’中的所有页面所对应的页面记录的有序搜索树,
其中,i为大于0的自然数。
较优的,该索引机制合并装置还可以包括:第一判断模块1704、第二合并模块1705和第一执行模块1706。
第一判断模块1704,可以用于判断Li+1是否为有序搜索树以及第i+1层存储单元是否存在从数据区Li+1’;
第二合并模块1705,可以用于在第一判断模块1704的判断结果为Li+1为有序搜索树且第i+1层存储单元存在Li+1’时,将Li和Li+1’中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树;
第一执行模块1706,可以用于在第一判断模块1704的判断结果为Li+1不为有序搜索树时,执行检测Li+1是否正在合并的步骤;
该索引机制合并装置还可以包括:第三合并模块1707。
第三合并模块1707,可以用于在第一检测模块1701的检测结果为Li+1未在合并时,将Li中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。
较优的,该索引机制合并装置还可以包括:第二判断模块1708、第四合并模块1709和第五合并模块1710。
第二判断模块1708,可以用于当Li合并为有序搜索树后,判断第i-1层存储单元的主数据区Li-1是否正在合并以及第i层存储单元是否存在从数据区Li’;
第四合并模块1709,可以用于在第二判断模块1708的判断结果为Li-1未在合并且第i层存储单元存在Li’时,将Li’以及Li-1中的数据记录添加至Li中,将Li中的所有页面所对应的页面记录添加至Li-1中,合并后的Li-1为包含有用于指向合并后的Li中的所有页面所对应的页面记录的有序搜索树;
第五合并模块1710,可以用于在第二判断模块1708的判断结果为Li-1未在合并且第i层存储单元不存在Li’,则将Li-1中的数据记录添加至Li中,将Li中的所有页面所对应的页面记录添加至Li-1中,合并后的Li-1为包含有用于指向合并后的Li中的所有页面所对应的页面记录的有序搜索树。
较优的,当具有有序数组形式的Li-1包括用于存放页面记录的页面记录存储区时,第四合并模块1709,还可以用于:
将Li中的所有页面所对应的页面记录添加至Li-1中的页面记录存储区中;
第五合并模块1710,还可以用于:
将Li中的所有页面所对应的页面记录添加至Li-1中的页面记录存储区中。
较优的,该索引机制合并装置还可以包括:第三判断模块1711、第六合并模块1712和第二执行模块1713。
第三判断模块1711,可以用于在第二检测模块1702的检测结果为Li+1’未达到容量上限时,在预定时间段后判断Li+1是否合并完成;
第六合并模块1712,可以用于在第三判断模块1711的判断结果为在预定时间段后Li+1合并完成时,将Li以及Li+1’中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树;
第二执行模块1713,可以用于在第三判断模块1711的判断结果为在预定时间段后Li+1未合并完成时,执行将Li中的数据记录添加至Li+1’中,将Li+1’中的所有页面所对应的页面记录添加至Li中步骤。
较优的,该索引机制合并装置还可以包括:第四判断模块1714、第三执行模块1715和第七合并模块1716。
第四判断模块1714,可以用于从第一检测模块检测到Li+1正在合并起的预定时间段后,判断Li+1是否合并完成;
第三执行模块1715,可以用于在第四判断模块1714的判断结果为Li+1未合并完成时,执行检测Li+1’是否已经达到容量上限的步骤;
第七合并模块1716,可以用于在第四判断模块1714的判断结果为Li+1合并完成时,将Li以及Li+1’中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。
综上所述,本发明实施例提供的索引机制合并装置,通过在第i层存储单元的主数据区Li达到容量上限后,若第i+1层存储单元的主数据区Li+1正在合并,则将Li与第i+1层存储单元的从数据区Li+1’进行合并,合并后的Li为有序搜索树,其中,i为大于0的自然数;解决了现有技术中索引机制FD树在合并过程中占用较长时间的问题;由于在Li+1正在合并的过程中,可以同时进行Li与Li+1’的合并过程,因此实现了多线程合并,达到了可以很大程度上提高了合并速率的效果。
请参见图18所示,其示出了本发明一个实施例中搜索装置的结构示意图。该搜索装置可以用于在具有图2A至图2C以及表2D和表2E所示特性的存储装置的设备中搜索数据。该搜索装置可以包括:获取模块1801、第一搜索模块1802和第二搜索模块1803。
获取模块1801,可以用于获取对第i层存储单元的主数据区Li的上一数据区搜索指定对象时返回的页面记录,上一数据区为第i-1层存储单元的主数据区Li-1或第i层存储单元的从数据区Li’;
第一搜索模块1802,可以用于当Li为有序数组时,根据获取模块获取到的页面记录所指的位于Li的页面搜索指定对象;
第二搜索模块1803,可以用于当Li为有序搜索树时,从Li的根节点所在页面搜索用于指向第i+1层存储单元中符合条件的页面记录,其中,i为大于0的自然数,指定对象为指定搜索的指定键值或指定搜索的指定键值范围。
综上所述,本发明实施例提供的搜索装置,通过获取对Li的上一数据区搜索指定对象时返回的页面记录,在Li为有序数组时,根据该页面记录所指的位于Li的页面搜索指定对象;而在Li为有序搜索树时,从Li的根节点所在页面搜索指定对象;根据该存储装置所提供的索引机制的特性可知,有序搜索树形式的数据区可以加快对指定对象进行搜索的速度,达到了可以大大缩短搜索到指定对象的时间的效果。
请参见图19所示,其示出了本发明另一个实施例中搜索装置的结构示意图。该搜索装置可以用于在具有图2A至图2C以及表2D和表2E所示特性的存储装置的设备中搜索数据。该搜索装置可以包括:获取模块1901、第一搜索模块1902和第二搜索模块1903。
获取模块1901,可以用于获取对第i层存储单元的主数据区Li的上一数据区搜索指定对象时返回的页面记录,上一数据区为第i-1层存储单元的主数据区Li-1或第i层存储单元的从数据区Li’;
第一搜索模块1902,可以用于当Li为有序数组时,根据获取模块获取到的页面记录所指的位于Li的页面搜索指定对象;
第二搜索模块1903,可以用于当Li为有序搜索树时,从Li的根节点所在页面搜索用于指向第i+1层存储单元中符合条件的页面记录,其中,i为大于0的自然数,指定对象为指定搜索的指定键值或指定搜索的指定键值范围。
较优的,该第二搜索模块1903还可以包括第一搜索单元1903a和第二搜索单元1903b。
第一搜索单元1903a,用于当指定对象为指定键值时,则从Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第一条件的页面记录;
第二搜索单元1903b,用于当指定对象为指定键值范围时,则从Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第二条件的页面记录,
其中,指定键值范围包括从左边界值至右边界值的值,第一条件为不大于指定键值的最大键值,第二条件为不大于左边界值的最大键值,或,大于左边界值且不大于右边界值的最小键值,左边界值小于右边界值。
较优的,该获取模块1901可以包括:获取单元1901a、判断单元1901b、搜索单元1901c、第一返回单元1901d、第二返回单元1901e、第一作为单元1901f和第二作为单元1901g。
获取单元1901a,可以用于获取根据第i-1层存储单元搜索指定对象时返回的页面记录;
判断单元1901b,可以用于判断第i层存储单元是否存在Li’;
搜索单元1901c,可以用于在判断单元1901a的判断结果为第i层存储单元存在Li’时,根据第i-1层存储单元返回的页面记录搜索Li’以搜索指定对象;
第一返回单元1901d,可以用于当指定对象为指定键值时,则在搜索单元1901c在Li’中未搜索到指定对象时,返回Li’中用于指向Li中符合条件的页面记录;
第二返回单元1901e,可以用于当指定对象为指定键值范围时,则返回Li’中用于指向Li中符合第二条件的页面记录;
第一作为单元1901f,可以用于将符合第一返回单元1901d返回的第一条件或第二返回单元1901e返回的第二条件的页面记录作为对Li的上一数据区搜索指定对象时返回的页面记录;
第二作为单元1901g,可以用于在判断单元1901a的判断结果为第i层存储单元不存在Li’时,将获取的根据第i-1层存储单元搜索指定对象时返回的页面记录作为对Li的上一数据区搜索时返回的页面记录。
较优的,具有有序数组形式的主数据区或从数据区包括用于存放数据记录的数据记录存储区和用于存放页面记录的页面记录存储区,第一搜索模块1902,可以包括:第三搜索单元1902a、第四搜索单元1902b和第五搜索单元1902c。
第三搜索单元1902a,可以用于根据获取模块获取到的页面记录所指的页面搜索Li中的数据记录存储区,以搜索指定对象;
第四搜索单元1902b,可以用于当指定对象为指定键值时,则在第三搜索单元1902a在Li中的数据记录存储区中未搜索到指定对象后,搜索Li的页面记录存储区以搜索用于指向所述Li的下一数据区的符合所述第一条件的页面记录;
第五搜索单元1902c,用于当指定对象为指定键值范围时,则搜索Li的页面记录存储区以搜索用于指向Li的下一数据区的符合第二条件的页面记录;
搜索单元1901c可以包括:第一搜索子单元和第二搜索子单元。
第一搜索子单元,可以用于根据第i-1层存储单元返回的页面记录搜索Li’中的数据记录存储区以搜索指定对象;
第二搜索子单元,可以用于当指定对象为指定键值时,则在在第一搜索子单元在Li’中的数据记录存储区中未搜索到指定对象后,搜索Li’中的页面记录存储区以搜索用于指向所述Li的符合所述第一条件的页面记录;
第三搜索子单元,用于当指定对象为指定键值范围时,则搜索Li’的页面记录存储区以搜索用于指向Li的符合第二条件的页面记录,
其中,Li的下一数据区第i+1层的主数据区Li+1或第i+1层的从数据区Li+1’。
较优的,该搜索装置还可以包括:接收模块1904、第五判断模块1905、第三搜索模块1906、第四搜索模块1907、第五搜索模块1908和第六搜索模块1909。
接收模块1904,可以用于在第0层存储单元接收搜索请求,搜索请求中包括指定对象;
第五判断模块1905,可以用于在接收模块1904接收到搜索请求之后,判断第0层存储单元是否存在从数据区L0’;
第三搜索模块1906,可以用于在第五判断模块1905的判断结果为第0层存储单元存在从数据区L0’时,根据L0’搜索指定对象;
第四搜索模块1907,可以用于当指定对象为指定键值时,则在第三搜索模块1906根据L0’未搜索到指定对象后,则搜索第0层存储单元的主数据区L0以搜索该指定对象;
第五搜索模块1908,用于当指定对象为指定键值范围时,则在搜索完L0’之后,搜索L0以搜索该指定对象;
第六搜索模块1909,可以用于在第五判断模块1905的判断结果为第0层存储单元不存在从数据区L0’时,根据L0搜索指定对象。
综上所述,本发明实施例提供的搜索装置,通过获取对Li的上一数据区搜索指定对象时返回的页面记录,在Li为有序数组时,根据该页面记录所指的位于Li的页面搜索指定对象;而在Li为有序搜索树时,从Li的根节点所在页面搜索指定对象;根据该存储装置所提供的索引机制的特性可知,有序搜索树形式的数据区可以加快对指定对象进行搜索的速度,达到了可以大大缩短搜索到指定对象的时间的效果。
需要说明的是:上述实施例提供的索引机制合并装置以及搜索装置在进行合并和搜索指定对象时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的索引机制合并装置、搜索装置分别与索引机制合并方法、搜索方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
请参见图20所示,其示出了本发明一个实施例中存储设备的结构示意图。该存储设备可以具有图2A至图2C以及表2D和表2E所示的特性。该存储设备可以包括:处理器2001和存储器2002,该处理器2001和存储器2002之间耦合连接,存储器2002中通常包含有至少一种计算机应用程序,处理器2001可以根据存储器2002中设置的计算机应用程序实现相应的功能。
处理器2001,可以用于在第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
处理器2001,还可以用于在检测结果为Li+1正在合并时,检测第i+1层存储单元的从数据区Li+1’是否已经达到容量上限;
处理器2001,还可以用于在检测结果为Li+1’未达到容量上限时,将Li中的数据记录添加至Li+1’中,将Li+1’中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1’中的所有页面所对应的页面记录的有序搜索树,其中,i为大于0的自然数。
较优的,在检测Li+1是否正在合并之前,处理器2001,还可以用于判断Li+1是否为有序搜索树以及第i+1层存储单元是否存在从数据区Li+1’;
处理器2001,还可以用于在判断结果为Li+1为有序搜索树且第i+1层存储单元存在Li+1’时,则将Li和Li+1’中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树;
处理器2001,还可以用于在判断结果为Li+1不为有序搜索树时,则执行检测Li+1是否正在合并的步骤;
在检测Li+1是否正在合并之后,处理器2001,还可以用于在检测结果为Li+1未在合并时,则将Li中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。
较优的,处理器2001,还可以用于当Li合并为有序搜索树后,判断第i-1层存储单元的主数据区Li-1是否正在合并以及第i层存储单元是否存在从数据区Li’;
处理器2001,还可以用于在判断结果为Li-1未在合并且第i层存储单元存在Li’时,则将Li’以及Li-1中的数据记录添加至Li中,将Li中的所有页面所对应的页面记录添加至Li-1中,合并后的Li-1为包含有用于指向合并后的Li中的所有页面所对应的页面记录的有序搜索树;
处理器2001,还可以用于在判断结果为Li-1未在合并且第i层存储单元不存在Li’时,则将Li-1中的数据记录添加至Li中,将Li中的所有页面所对应的页面记录添加至Li-1中,合并后的Li-1为包含有用于指向合并后的Li中的所有页面所对应的页面记录的有序搜索树。
较优的,当具有有序数组形式的Li-1包括用于存放页面记录的页面记录存储区时,处理器2001,还可以用于将Li中的所有页面所对应的页面记录添加至Li-1中的页面记录存储区中;
处理器2001,还可以用于将Li中的页面记录添加至Li-1中的页面记录存储区中。
较优的,在检测Li+1’是否已经达到容量上限之后,处理器2001还可以用于在检测结果为Li+1’未达到容量上限时,则在预定时间段后判断Li+1是否合并完成;
处理器2001还可以用于在判断结果为在预定时间段后Li+1合并完成时,将Li以及Li+1’中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树;
处理器2001还可以用于在判断结果为在预定时间段后Li+1未合并完成时,执行将Li中的数据记录添加至Li+1’中,将Li+1’中的所有页面所对应的页面记录添加至Li中的步骤。
较优的,在检测Li+1’是否已经达到容量上限之前,处理器2001还可以用于从检测到Li+1正在合并起的预定时间段后,判断Li+1是否合并完成;
处理器2001,还可以用于在判断结果为Li+1未合并完成时,执行检测Li+1’是否已经达到容量上限的步骤;
处理器2001,还可以用于在判断结果为Li+1合并完成时,将Li以及Li+1’中的数据记录添加至Li+1中,将Li+1中的所有页面所对应的页面记录添加至Li中,合并后的Li为包含有用于指向合并后的Li+1中的所有页面所对应的页面记录的有序搜索树。
综上所述,本发明实施例提供的存储设备,通过在第i层存储单元的主数据区Li达到容量上限后,若第i+1层存储单元的主数据区Li+1正在合并,则将Li与第i+1层存储单元的从数据区Li+1’进行合并,合并后的Li为有序搜索树,其中,i为大于0的自然数;解决了现有技术中索引机制FD树在合并过程中占用较长时间的问题;由于在Li+1正在合并的过程中,可以同时进行Li与Li+1’的合并过程,因此实现了多线程合并,达到了可以很大程度上提高了合并速率的效果。
请参见图21所示,其示出了本发明另一个实施例中存储设备的结构示意图。该存储设备可以具有图2A至图2C以及表2D和表2E所示的特性。该存储设备可以包括:处理器2101和存储器2102,该处理器2101和存储器2102之间耦合连接,存储器2102中通常包含有至少一种计算机应用程序,处理器2101可以根据存储器2102中设置的计算机应用程序实现相应的功能。
处理器2101,可以用于获取对第i层存储单元的主数据区Li的上一数据区搜索指定对象时返回的页面记录,上一数据区为第i-1层存储单元的主数据区Li-1或第i层存储单元的从数据区Li’;
处理器2101,还可以用于当Li为有序数组时,根据页面记录所指的位于Li的页面搜索指定对象;
处理器2101,还可以用于当Li为有序搜索树时,从Li的根节点所在页面搜索用于指向第i+1层存储单元中符合条件的页面记录,其中,i为大于0的自然数,指定对象为指定搜索的指定键值或指定搜索的指定键值范围。
较优的,处理器2101,还可以用于当指定对象为指定键值时,则从Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第一条件的页面记录;
处理器2101,还可以用于当指定对象为指定键值范围时,则从Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第二条件的页面记录,
其中,指定键值范围包括从左边界值至右边界值的值,第一条件为不大于指定键值的最大键值,第二条件为不大于左边界值的最大键值,或,大于左边界值且不大于右边界值的最小键值,左边界值小于右边界值。
较优的,处理器2101,还可以用于获取根据第i-1层存储单元搜索指定对象时返回的页面记录;
处理器2101,还可以用于判断第i层存储单元是否存在Li’;
处理器2101,还可以用于在判断结果为第i层存储单元存在Li’时,根据第i-1层存储单元返回的页面记录搜索Li’以搜索指定对象;
处理器2101,还可以用于当指定对象为指定键值时,则在Li’中未搜索到指定对象时,返回Li’中用于指向Li中符合第一条件的页面记录;
处理器2101,还可以用于当指定对象为指定键值范围时,则返回Li’中用于指向Li中符合第二条件的页面记录;
处理器2101,还可以用于将符合第一条件或第二条件的页面记录作为对Li的上一数据区搜索指定对象时返回的页面记录;
处理器2101,还可以用于在判断结果为第i层存储单元不存在Li’时,将获取的根据第i-1层存储单元搜索指定对象时返回的页面记录作为对Li的上一数据区搜索时返回的页面记录。
较优的,具有有序数组形式的主数据区或从数据区包括用于存放数据记录的数据记录存储区和用于存放页面记录的页面记录存储区,
处理器2101,还可以用于根据页面记录所指的页面搜索Li中的数据记录存储区,以搜索指定对象;
处理器2101,还可以用于当指定对象为指定键值时,则在Li中的数据记录存储区中未搜索到指定对象后,搜索Li的页面记录存储区以搜索用于指向Li的下一数据区的符合第一条件的页面记录;
处理器2101,还可以用于当指定对象为指定键值范围时,则搜索Li的页面记录存储区以搜索用于指向Li的下一数据区的符合第二条件的页面记录;
处理器2101,还可以用于根据第i-1层存储单元返回的页面记录搜索Li’中的数据记录存储区以搜索指定对象;
处理器2101,还可以用于当指定对象为指定键值时,则在Li’中的数据记录存储区中未搜索到指定对象后,则搜索Li’中的页面记录存储区以搜索用于指向Li的符合第一条件的页面记录;
处理器2101,还可以用于当指定对象为指定键值范围时,则搜索Li’的页面记录存储区以搜索用于指向Li的符合第二条件的页面记录;,
其中,Li的下一数据区第i+1层的主数据区Li+1或第i+1层的从数据区Li+1’。
较优的,处理器2101,还可以用于在第0层存储单元接收搜索请求,搜索请求中包括指定对象;
处理器2101,还可以用于在接收到搜索请求之后,判断第0层存储单元是否存在从数据区L0’;
处理器2101,还可以用于在判断结果为第0层存储单元存在从数据区L0’时,根据L0’搜索指定对象;
处理器2101,还可以用于当指定对象为指定键值时,则根据L0’未搜索到指定对象后,则搜索第0层存储单元的主数据区L0以搜索该指定对象;
处理器2101,还可以用于当指定对象为指定键值范围时,则在搜索完L0’之后,搜索L0以搜索该指定对象;
处理器2101,还可以用于在判断结果为第0层存储单元不存在从数据区L0’时,根据L0搜索指定对象。
综上所述,本发明实施例提供的搜索设备,通过获取对Li的上一数据区搜索指定对象时返回的页面记录,在Li为有序数组时,根据该页面记录所指的位于Li的页面搜索指定对象;而在Li为有序搜索树时,从Li的根节点所在页面搜索指定对象;根据该存储装置所提供的索引机制的特性可知,有序搜索树形式的数据区可以加快对指定对象进行搜索的速度,达到了可以大大缩短搜索到指定对象的时间的效果。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (23)
1.一种存储装置,其特征在于,所述存储装置包括至少三层存储单元,第0层存储单元位于内存中,第i层存储单元位于闪存中,每层存储单元包括主数据区,其中:
所述第0层存储单元中的主数据区为有序搜索树,当所述第0层存储单元中存在从数据区时,所述从数据区为有序搜索树,所述有序搜索树包括数据记录和/或页面记录;
所述第i层存储单元中的主数据区为有序搜索树或有序数组,当所述第i层存储单元中存在从数据区时,所述从数据区为有序数组,所述有序搜索树包括页面记录,所述有序数组包括数据记录和/或页面记录;
所述数据记录包括键值和记录值,所述页面记录包括键值和页面地址;
当所述第i层存储单元中存在从数据区Li’时,所述Li’为所述第i层存储单元的第一搜索数据区,所述第i层存储单元中的主数据区Li为所述第i层存储单元的第二搜索数据区;当所述第i层存储单元中不存在所述Li’时,所述Li为所述第i层存储单元的所述第一搜索数据区;
所述Li按序保存指向第i+1层存储单元中的第一搜索数据区的所有页面对应的页面记录;当所述第i+1层存储单元中的第一搜索数据区为有序搜索树时,则所述Li的页面记录是无效记录;
所述Li’按序保存指向所述Li的所有页面对应的页面记录;当所述Li为有序搜索树时,则所述Li’的页面记录为无效记录,
其中,所述i为大于0的自然数。
2.一种索引机制合并方法,其特征在于,用于包括有权利要求1所述的存储装置的设备中,所述方法,包括:
在所述第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
若检测结果为所述Li+1正在合并,则检测所述第i+1层存储单元的从数据区Li+1’是否已经达到容量上限;
若检测结果为所述Li+1’未达到容量上限,则将所述Li中的数据记录添加至所述Li+1’中,将所述Li+1’中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1’中的所有页面所对应的页面记录的有序搜索树,
其中,所述i为大于0的自然数。
3.根据权利要求2所述的方法,其特征在于,在所述检测Li+1是否正在合并之前,还包括:
判断所述Li+1是否为有序搜索树以及所述第i+1层存储单元是否存在从数据区Li+1’;
若判断结果为所述Li+1为有序搜索树且所述第i+1层存储单元存在Li+1’时,则将所述Li和所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树;
若判断结果为所述Li+1不为有序搜索树时,则执行所述检测Li+1是否正在合并的步骤;
在所述检测Li+1是否正在合并之后,还包括:
若检测结果为所述Li+1未在合并,则将所述Li中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树。
4.根据权利要求3所述的方法,其特征在于,所述方法,还包括:
当所述Li合并为有序搜索树后,判断第i-1层存储单元的主数据区Li-1是否正在合并以及所述第i层存储单元是否存在从数据区Li’;
若判断结果为所述Li-1未在合并且所述第i层存储单元存在Li’,则将所述Li’以及所述Li-1中的数据记录添加至所述Li中,将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,合并后的所述Li-1为包含有用于指向合并后的所述Li中的所有页面所对应的页面记录的有序搜索树;
若判断结果为所述Li-1未在合并且所述第i层存储单元不存在Li’,则将所述Li-1中的数据记录添加至所述Li中,将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,合并后的所述Li-1为包含有用于指向合并后的所述Li中的所有页面所对应的页面记录的有序搜索树。
5.根据权利要求4所述的方法,其特征在于,当具有有序数组形式的所述Li-1包括用于存放页面记录的页面记录存储区时,所述将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,包括:
将所述Li中的所有页面所对应的页面记录添加至所述Li-1中的所述页面记录存储区中;
所述将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,包括:
将所述Li中的所有页面所对应的页面记录添加至所述Li-1中的所述页面记录存储区中。
6.根据权利要求2至5中任一所述的方法,其特征在于,在所述检测所述Li+1’是否已经达到容量上限之后,还包括:
若检测结果为所述Li+1’未达到容量上限,则在预定时间段后判断所述Li+1是否合并完成;
若判断结果为在预定时间段后所述Li+1合并完成,则将所述Li以及所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中所有页面所对应的页面记录的有序搜索树;
若判断结果为在预定时间段后所述Li+1未合并完成,则执行所述将所述Li中的数据记录添加至所述Li+1’中,将所述Li+1’中的所有页面所对应的页面记录添加至所述Li中的步骤。
7.根据权利要求2至5中任一所述的方法,其特征在于,在所述检测所述Li+1’是否已经达到容量上限之前,还包括:
从检测到所述Li+1正在合并起的所述预定时间段后,判断所述Li+1是否合并完成;
若判断结果为所述Li+1未合并完成,则执行所述检测所述Li+1’是否已经达到容量上限的步骤;
若判断结果为所述Li+1合并完成,则将所述Li以及所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树。
8.一种搜索方法,其特征在于,用于在包括有权利要求1所述的存储装置的设备中搜索数据,所述方法,包括:
获取对所述第i层存储单元的主数据区Li的上一数据区搜索指定对象时返回的页面记录,所述上一数据区为第i-1层存储单元的主数据区Li-1或所述第i层存储单元的从数据区Li’;
当所述Li为有序数组时,根据所述页面记录所指的位于所述Li的页面搜索所述指定对象;
当所述Li为有序搜索树时,从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合条件的页面记录,
其中,所述i为大于0的自然数,所述指定对象为指定搜索的指定键值或指定搜索的指定键值范围。
9.根据权利要求8所述的方法,其特征在于,所述从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合条件的页面记录,包括:
当所述指定对象为指定键值时,则从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第一条件的页面记录;
当所述指定对象为指定键值范围时,则从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第二条件的页面记录,
其中,所述指定键值范围包括从左边界值至右边界值的值,所述第一条件为不大于所述指定键值的最大键值,所述第二条件为不大于所述左边界值的最大键值,或,大于所述左边界值且不大于所述右边界值的最小键值,所述左边界值小于所述右边界值。
10.根据权利要求9所述的方法,其特征在于,所述获取对所述Li的上一数据区搜索指定对象时返回的页面记录,包括:
获取根据所述第i-1层存储单元搜索所述指定对象时返回的页面记录;
判断所述第i层存储单元是否存在所述Li’;
若判断结果为所述第i层存储单元存在所述Li’,则根据所述第i-1层存储单元返回的页面记录搜索所述Li’以搜索所述指定对象;
当所述指定对象为所述指定键值时,则在所述Li’中未搜索到所述指定对象时,返回所述Li’中用于指向所述Li中符合所述第一条件的页面记录;
当所述指定对象为所述指定键值范围时,则返回所述Li’中用于指向所述Li中符合所述第二条件的页面记录;
将符合所述第一条件或所述第二条件的页面记录作为对所述Li的上一数据区搜索指定对象时返回的页面记录;
若判断结果为所述第i层存储单元不存在所述Li’,则将获取的根据所述第i-1层存储单元搜索所述指定对象时返回的页面记录作为对所述Li的上一数据区搜索时返回的页面记录。
11.根据权利要求10所述的方法,其特征在于,具有有序数组形式的主数据区或从数据区包括用于存放数据记录的数据记录存储区和用于存放页面记录的页面记录存储区,
所述根据所述页面记录所指的位于所述Li的页面搜索所述指定对象,包括:
根据所述页面记录所指的页面搜索所述Li中的数据记录存储区,以搜索所述指定对象;
当所述指定对象为指定键值时,则在所述Li中的数据记录存储区中未搜索到所述指定对象后,搜索所述Li的页面记录存储区以搜索用于指向所述Li的下一数据区的符合所述第一条件的页面记录;
当所述指定对象为指定键值范围时,则搜索所述Li的页面记录存储区以搜索用于指向所述Li的下一数据区的符合所述第二条件的页面记录;
所述根据所述第i-1层存储单元返回的页面记录搜索所述Li’以搜索所述指定对象,包括:
根据所述第i-1层存储单元返回的页面记录搜索所述Li’中的数据记录存储区以搜索所述指定对象;
当所述指定对象为指定键值时,则在所述Li’中的数据记录存储区中未搜索到所述指定对象后,则搜索所述Li’中的页面记录存储区以搜索用于指向所述Li的符合所述第一条件的页面记录;
当所述指定对象为指定键值范围时,则搜索所述Li’的页面记录存储区以搜索用于指向所述Li的符合所述第二条件的页面记录,
其中,所述Li的下一数据区为第i+1层的主数据区Li+1或第i+1层的从数据区Li+1’。
12.根据权利要求8至11任一所述的方法,其特征在于,所述方法,还包括:
在所述第0层存储单元接收搜索请求,所述搜索请求中包括所述指定对象;
在接收到所述搜索请求之后,判断所述第0层存储单元是否存在从数据区L0’;
若判断结果为所述第0层存储单元存在从数据区L0’,则根据所述L0’搜索所述指定对象;
当所述指定对象为指定键值时,则在根据所述L0’未搜索到所述指定对象后,则搜索所述第0层存储单元的主数据区L0以搜索所述指定对象;
当所述指定对象为指定键值范围时,则在搜索完所述L0’之后,搜索所述L0以搜索所述指定对象;
若判断结果为所述第0层存储单元不存在从数据区L0’,则根据所述L0搜索所述指定对象。
13.一种索引机制合并装置,其特征在于,用于包括有权利要求1所述的存储装置的设备中,所述装置,包括:
第一检测模块,用于在所述第i层存储单元的主数据区Li达到容量上限后,检测第i+1层存储单元的主数据区Li+1是否正在合并;
第二检测模块,用于在所述第一检测模块的检测结果为所述Li+1正在合并时,检测所述第i+1层存储单元的从数据区Li+1’是否已经达到容量上限;
第一合并模块,用于在所述第二检测模块的检测结果为所述Li+1’未达到容量上限时,将所述Li中的数据记录添加至所述Li+1’中,将所述Li+1’中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1’中的所有页面所对应的页面记录的有序搜索树,
其中,所述i为大于0的自然数。
14.根据权利要求13所述的装置,其特征在于,所述装置,还包括:
第一判断模块,用于判断所述Li+1是否为有序搜索树以及所述第i+1层存储单元是否存在从数据区Li+1’;
第二合并模块,用于在所述第一判断模块的判断结果为所述Li+1为有序搜索树且所述第i+1层存储单元存在Li+1’时,将所述Li和所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树;
第一执行模块,用于在所述第一判断模块的判断结果为所述Li+1不为有序搜索树时,执行所述检测Li+1是否正在合并的步骤;
所述装置,还包括:
第三合并模块,用于在所述第一检测模块的检测结果为所述Li+1未在合并时,将所述Li中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树。
15.根据权利要求14所述的装置,其特征在于,所述装置,还包括:
第二判断模块,用于当所述Li合并为有序搜索树后,判断第i-1层存储单元的主数据区Li-1是否正在合并以及所述第i层存储单元是否存在从数据区Li’;
第四合并模块,用于在所述第二判断模块的判断结果为所述Li-1未在合并且所述第i层存储单元存在Li’时,将所述Li’以及所述Li-1中的数据记录添加至所述Li中,将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,合并后的所述Li-1为包含有用于指向合并后的所述Li中的所有页面所对应的页面记录的有序搜索树;
第五合并模块,用于在所述第二判断模块的判断结果为所述Li-1未在合并且所述第i层存储单元不存在Li’,则将所述Li-1中的数据记录添加至所述Li中,将所述Li中的所有页面所对应的页面记录添加至所述Li-1中,合并后的所述Li-1为包含有用于指向合并后的所述Li中的所有页面所对应的页面记录的有序搜索树。
16.根据权利要求15所述的装置,其特征在于,当具有有序数组形式的所述Li-1包括用于存放页面记录的页面记录存储区时,所述第四合并模块,用于:
将所述Li中的所有页面所对应的页面记录添加至所述Li-1中的所述页面记录存储区中;
所述第五合并模块,用于:
将所述Li中的所有页面所对应的页面记录添加至所述Li-1中的所述页面记录存储区中。
17.根据权利要求13至16中任一所述的装置,其特征在于,所述装置,还包括:
第三判断模块,用于在所述第二检测模块的检测结果为所述Li+1’未达到容量上限时,在预定时间段后判断所述Li+1是否合并完成;
第六合并模块,用于在所述第三判断模块的判断结果为在预定时间段后所述Li+1合并完成时,将所述Li以及所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树;
第二执行模块,用于在所述第三判断模块的判断结果为在预定时间段后所述Li+1未合并完成时,执行所述将所述Li中的数据记录添加至所述Li+1’中,将所述Li+1’中的所有页面所对应的页面记录添加至所述Li中步骤。
18.根据权利要求13至16中任一所述的装置,其特征在于,所述装置,还包括:
第四判断模块,用于从所述第一检测模块检测到所述Li+1正在合并起的所述预定时间段后,判断所述Li+1是否合并完成;
第三执行模块,用于在所述第四判断模块的判断结果为所述Li+1未合并完成时,执行所述检测所述Li+1’是否已经达到容量上限的步骤;
第七合并模块,用于在所述第四判断模块的判断结果为所述Li+1合并完成时,将所述Li以及所述Li+1’中的数据记录添加至所述Li+1中,将所述Li+1中的所有页面所对应的页面记录添加至所述Li中,合并后的所述Li为包含有用于指向合并后的所述Li+1中的所有页面所对应的页面记录的有序搜索树。
19.一种搜索装置,其特征在于,用于在包括有权利要求1所述的存储装置的设备中搜索数据,所述装置,包括:
获取模块,用于获取对所述第i层存储单元的主数据区Li的上一数据区搜索指定对象时返回的页面记录,所述上一数据区为第i-1层存储单元的主数据区Li-1或所述第i层存储单元的从数据区Li’;
第一搜索模块,用于当所述Li为有序数组时,根据所述获取模块获取到的页面记录所指的位于所述Li的页面搜索所述指定对象;
第二搜索模块,用于当所述Li为有序搜索树时,从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合条件的页面记录,
其中,所述i为大于0的自然数,所述指定对象为指定搜索的指定键值或指定搜索的指定键值范围。
20.根据权利要求19所述的装置,其特征在于,所述第二搜索模块,包括:
第一搜索单元,用于当所述指定对象为指定键值时,则从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第一条件的页面记录;
第二搜索单元,用于当所述指定对象为指定键值范围时,则从所述Li的根节点所在页面搜索用于指向第i+1层存储单元中符合第二条件的页面记录,
其中,所述指定键值范围包括从左边界值至右边界值的值,所述第一条件为不大于所述指定键值的最大键值,所述第二条件为不大于所述左边界值的最大键值,或,大于所述左边界值且不大于所述右边界值的最小键值,所述左边界值小于所述右边界值。
21.根据权利要求20所述的装置,其特征在于,所述获取模块,包括:
获取单元,用于获取根据所述第i-1层存储单元搜索所述指定对象时返回的页面记录;
判断单元,用于判断所述第i层存储单元是否存在所述Li’;
搜索单元,用于在所述判断单元的判断结果为所述第i层存储单元存在所述Li’时,根据所述第i-1层存储单元返回的页面记录搜索所述Li’以搜索所述指定对象;
第一返回单元,用于当所述指定对象为所述指定键值时,则在所述搜索单元在所述Li’中未搜索到所述指定对象时,返回所述Li’中用于指向所述Li中符合所述第一条件的页面记录;
第二返回单元,当所述指定对象为所述指定键值范围时,则返回所述Li’中用于指向所述Li中符合所述第二条件的页面记录;
第一作为单元,用于将所述第一返回单元返回的符合所述第一条件或所述第二返回单元返回的符合所述第二条件的页面记录作为对所述Li的上一数据区搜索指定对象时返回的页面记录;
第二作为单元,用于在所述判断单元的判断结果为所述第i层存储单元不存在所述Li’时,将获取的根据所述第i-1层存储单元搜索所述指定对象时返回的页面记录作为对所述Li的上一数据区搜索时返回的页面记录。
22.根据权利要求21所述的装置,其特征在于,具有有序数组形式的主数据区或从数据区包括用于存放数据记录的数据记录存储区和用于存放页面记录的页面记录存储区,
所述第一搜索模块,包括:
第三搜索单元,用于根据所述获取模块获取到的页面记录所指的页面搜索所述Li中的数据记录存储区,以搜索所述指定对象;
第四搜索单元,用于当所述指定对象为指定键值时,则在所述第三搜索单元在所述Li中的数据记录存储区中未搜索到所述指定对象后,搜索所述Li的页面记录存储区以搜索用于指向所述Li的下一数据区的符合所述第一条件的页面记录;
第五搜索单元,用于当所述指定对象为指定键值范围时,则搜索所述Li的页面记录存储区以搜索用于指向所述Li的下一数据区的符合所述第二条件的页面记录;
所述搜索单元,包括:
第一搜索子单元,用于根据所述第i-1层存储单元返回的页面记录搜索所述Li’中的数据记录存储区以搜索所述指定对象;
第二搜索子单元,用于当所述指定对象为指定键值时,则在所述第一搜索子单元在所述Li’中的数据记录存储区中未搜索到所述指定对象后,搜索所述Li’中的页面记录存储区以搜索用于指向所述Li的符合所述第一条件的页面记录;
第三搜索子单元,用于当所述指定对象为指定键值范围时,则搜索所述Li’的页面记录存储区以搜索用于指向所述Li的符合所述第二条件的页面记录,
其中,所述Li的下一数据区第i+1层的主数据区Li+1或第i+1层的从数据区Li+1’。
23.根据权利要求20至22任一所述的装置,其特征在于,所述装置,还包括:
接收模块,用于在所述第0层存储单元接收搜索请求,所述搜索请求中包括所述指定对象;
第五判断模块,用于在所述接收模块接收到所述搜索请求之后,判断所述第0层存储单元是否存在从数据区L0’;
第三搜索模块,用于在所述第五判断模块的判断结果为所述第0层存储单元存在从数据区L0’时,根据所述L0’搜索所述指定对象;
第四搜索模块,用于当所述指定对象为指定键值时,则在所述第三搜索模块根据所述L0’未搜索到所述指定对象后,则搜索所述第0层存储单元的主数据区L0以搜索所述指定对象;
第五搜索模块,用于当所述指定对象为指定键值范围时,则在搜索完所述L0’之后,搜索所述L0以搜索所述指定对象;
第六搜索模块,用于在所述第五判断模块的判断结果为所述第0层存储单元不存在从数据区L0’时,根据所述L0搜索所述指定对象。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310367741.9A CN104424204B (zh) | 2013-08-21 | 2013-08-21 | 索引机制合并方法、搜索方法、装置及设备 |
PCT/CN2014/080916 WO2015024416A1 (zh) | 2013-08-21 | 2014-06-27 | 索引机制合并方法、搜索方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310367741.9A CN104424204B (zh) | 2013-08-21 | 2013-08-21 | 索引机制合并方法、搜索方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104424204A true CN104424204A (zh) | 2015-03-18 |
CN104424204B CN104424204B (zh) | 2017-08-11 |
Family
ID=52483039
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310367741.9A Active CN104424204B (zh) | 2013-08-21 | 2013-08-21 | 索引机制合并方法、搜索方法、装置及设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104424204B (zh) |
WO (1) | WO2015024416A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109376156A (zh) * | 2015-06-08 | 2019-02-22 | 南京航空航天大学 | 读取具有存储感知的混合索引的方法 |
CN109933584A (zh) * | 2019-01-31 | 2019-06-25 | 北京大学 | 一种多级无序索引方法与系统 |
CN112307016A (zh) * | 2019-07-29 | 2021-02-02 | 华为技术有限公司 | 一种数据单元的合并方法及装置 |
WO2021017647A1 (zh) * | 2019-07-29 | 2021-02-04 | 华为技术有限公司 | 一种数据单元的合并方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1573746A (zh) * | 2003-05-30 | 2005-02-02 | 微软公司 | 使用b树的位置访问 |
US20050234876A1 (en) * | 2004-03-30 | 2005-10-20 | Mchardy William B | Method of indexing into an extensible data table |
CN101741708A (zh) * | 2008-11-13 | 2010-06-16 | 华为技术有限公司 | 一种存储数据的方法、装置及系统 |
CN101799783A (zh) * | 2009-01-19 | 2010-08-11 | 中国人民大学 | 一种数据存储处理方法、查找方法及其装置 |
CN101884043A (zh) * | 2007-12-05 | 2010-11-10 | 新叶股份有限公司 | 比特序列合并排序装置、方法以及程序 |
CN102096679A (zh) * | 2009-12-15 | 2011-06-15 | 北大方正集团有限公司 | 一种索引段合并和写入磁盘的方法及装置 |
CN102135969A (zh) * | 2010-01-22 | 2011-07-27 | 富士通株式会社 | 构造索引库的方法和设备以及查询方法 |
-
2013
- 2013-08-21 CN CN201310367741.9A patent/CN104424204B/zh active Active
-
2014
- 2014-06-27 WO PCT/CN2014/080916 patent/WO2015024416A1/zh active Application Filing
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1573746A (zh) * | 2003-05-30 | 2005-02-02 | 微软公司 | 使用b树的位置访问 |
US20050234876A1 (en) * | 2004-03-30 | 2005-10-20 | Mchardy William B | Method of indexing into an extensible data table |
CN101884043A (zh) * | 2007-12-05 | 2010-11-10 | 新叶股份有限公司 | 比特序列合并排序装置、方法以及程序 |
CN101741708A (zh) * | 2008-11-13 | 2010-06-16 | 华为技术有限公司 | 一种存储数据的方法、装置及系统 |
CN101799783A (zh) * | 2009-01-19 | 2010-08-11 | 中国人民大学 | 一种数据存储处理方法、查找方法及其装置 |
CN102096679A (zh) * | 2009-12-15 | 2011-06-15 | 北大方正集团有限公司 | 一种索引段合并和写入磁盘的方法及装置 |
CN102135969A (zh) * | 2010-01-22 | 2011-07-27 | 富士通株式会社 | 构造索引库的方法和设备以及查询方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109376156A (zh) * | 2015-06-08 | 2019-02-22 | 南京航空航天大学 | 读取具有存储感知的混合索引的方法 |
CN109376156B (zh) * | 2015-06-08 | 2021-09-21 | 南京航空航天大学 | 读取具有存储感知的混合索引的方法 |
CN109933584A (zh) * | 2019-01-31 | 2019-06-25 | 北京大学 | 一种多级无序索引方法与系统 |
CN109933584B (zh) * | 2019-01-31 | 2021-04-02 | 北京大学 | 一种多级无序索引方法与系统 |
CN112307016A (zh) * | 2019-07-29 | 2021-02-02 | 华为技术有限公司 | 一种数据单元的合并方法及装置 |
WO2021017647A1 (zh) * | 2019-07-29 | 2021-02-04 | 华为技术有限公司 | 一种数据单元的合并方法及装置 |
CN112307016B (zh) * | 2019-07-29 | 2022-08-26 | 华为技术有限公司 | 一种数据单元的合并方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104424204B (zh) | 2017-08-11 |
WO2015024416A1 (zh) | 2015-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100565530C (zh) | 一种快照系统及其使用方法 | |
JP5425541B2 (ja) | マルチプロセッサ・システム上でデータ・セットを区分化およびソートするための方法および装置 | |
CN109416694A (zh) | 包括资源有效索引的键值存储系统 | |
CN104809182B (zh) | 基于动态可分裂Bloom Filter的网络爬虫URL去重方法 | |
CN106445416B (zh) | 一种数据记录的存储、查询和检索的方法及装置 | |
CN103765381B (zh) | 对b+树的并行操作 | |
Bender et al. | Exponential structures for efficient cache-oblivious algorithms | |
CN104424204A (zh) | 索引机制合并方法、搜索方法、装置及设备 | |
CN107783988A (zh) | 一种目录树的加锁方法及设备 | |
CN105830041A (zh) | 元数据的恢复方法及装置 | |
CN104346384A (zh) | 一种小文件处理方法及装置 | |
CN105159616A (zh) | 一种磁盘空间管理方法及装置 | |
CN105959419A (zh) | 基于一致性树的分布式存储结构的构建方法及系统 | |
CN105912601A (zh) | 能量管理系统分布式实时内存数据库的分区存储方法 | |
CN103970795A (zh) | 一种数据处理方法、装置及系统 | |
CN104573112B (zh) | Oltp集群数据库中页面查询方法及数据处理节点 | |
CN102508866B (zh) | 基于数字寻址的指挥关系树结构化存储与快速处理方法 | |
CN108920105A (zh) | 基于社区结构的图数据分布式存储方法及装置 | |
CN101833511A (zh) | 数据管理方法、装置和系统 | |
CN100405373C (zh) | 一种文件系统的目录项整理方法 | |
CN106294189A (zh) | 内存碎片整理方法及装置 | |
CN103294714B (zh) | 索引字段的字段属性值的存储位置的确定方法以及装置 | |
US20100106682A1 (en) | Database Index | |
CN102306187A (zh) | 二维表hash排序方法 | |
CN106528294A (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 |