一种基于b+树异步更新索引的读优化方法
【专利摘要】本发明涉及一种基于B+树异步更新索引的读优化方法,包括以下步骤:1)生成索引缓存文件;2)获取所有索引缓存文件;3)过滤并剔除不完整或正在写的索引缓存文件;4)判断是否满足发起异步更新的条件,若满足则继续执行步骤4);5)分别读取过滤后的各个索引缓存文件相同存储区域编号对应的存储区域的索引数据;6)读取存储区域编号在索引库中对应的存储区域的索引数据;7)将索引数据按B+树的规则组织成一棵B+树;8)将步骤7)中生成的B+树序列化成二进制流;9)将步骤8)执行后的数据覆盖更新到存储区域编号在索引库中对应的存储区域。与现有技术相比,本发明具有减少了每次从海量索引记录中查询读取的索引数据量。
【专利说明】—种基于B+树异步更新索引的读优化方法
【技术领域】
[0001]本发明涉及数据存储领域,尤其是涉及一种基于B+树异步更新索引的读优化方法,适用于因存在海量的索引记录而无法将全部索引记录加载到内存的场景。
【背景技术】
[0002]随着计算机的不断发展,计算机中存在的有效数据越来越多,有效数据的增多将导致用户无法快速的在大量有效数据中找到需要的数据;如果没有一个有效的方式能够快速找到用户需要的数据,那么有效数据的增大只能增加用户的负担。
[0003]索引技术的引进很好的解决了这个问题。数据在写的过程中同时会记录一些重要信息用来唯一标识该数据并记录该数据的存储位置及大小信息等,该信息我们称之为索弓I。索引能帮助我们的快速的查找需要的数据,然而随着数据量不断增长,索引数据也相应的增长。在索引增长到海量级别时,尤其是索引记录达到上亿甚至百亿级别时,索引的查询性能将直接影响了整个读性能,这时候就需要一种方法能够快速的在海量索引中找到需要的索引。
[0004]为了解决索引数据量增大导致的读性能问题,一般我们对索引采用分流的技术将索引分成很多类,每一个类对应一个存储区域,每一个存储区域存储了对应的索引。在查询时只需要根据分流技术的规则定位到对应的存储区域,然后再在存储区域中索引数据中查询即可。该方法能减少查询时读取索引数据的大小,降低了磁盘10,从而在一定程度上提升了查询性能。然而利用这种方法也不能完美的解决查询性能问题,当存在海量索引时,单个存储区域的索引数据也将很多。若每秒钟的查询量很大时则将因为磁盘1瓶颈导致性能低下。若能有一种方法能只需读取部分少量数据而达到成功查询索引的效果将顺利的解决该读性能问题。
【发明内容】
[0005]本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种高性能的、能减少每次读磁盘的数据量及次数的基于B+树异步更新索引的读优化方法,从而减少了每次从海量索引记录中查询读取的索引数据量从而优化性能。
[0006]本发明的目的可以通过以下技术方案来实现:
[0007]一种基于B+树异步更新索引的读优化方法,其特征在于,包括以下步骤:
[0008]I)批量写索引,生成按存储区域编号序列化成数据流的索引缓存文件;
[0009]2)获取步骤I)中生成的所有索引缓存文件;
[0010]3)过滤并剔除步骤2)中获取的索引缓存文件中不完整或正在写的索引缓存文件;
[0011]4)判断步骤3)过滤后的索引缓存文件总个数是否满足发起异步更新的条件,若满足则继续执行步骤5),否则等待下一次执行步骤I);
[0012]5)分别读取步骤3)过滤后的各个索引缓存文件相同存储区域编号对应的存储区域的索引数据;
[0013]6)读取步骤5)中存储区域编号在索引库中对应的存储区域的索引数据;
[0014]7)将步骤5)中读取的索引数据及步骤6中读取的索引数据按B+树的规则组织成一棵B+树;
[0015]8)将步骤7)中生成的B+树序列化成二进制流;
[0016]9)将步骤8)执行后的数据覆盖更新到步骤5)中存储区域编号在索引库中对应的存储区域并更新元数据;
[0017]10)判断步骤5)中的索引缓存文件是否读到文件尾,若为否则,返回步骤5)并将步骤5)中的存储区域编号加1,若为是则继续执行步骤11);
[0018]11)删除步骤3)过滤后的索引缓存文件及步骤3)过滤掉的不完整索引缓存文件。
[0019]所述的步骤I)具体为:
[0020]1.1)将各个存储区域编号在内存中对应的索引进行排序;
[0021]1.2)将步骤1.1)中各个存储区域编号对应排序后的索引序列化成数据流;
[0022]1.3)将步骤1.2)中的数据流按存储区域编号按从小到大的顺序组合成唯一的一个数据流;
[0023]1.4)将步骤1.3)执行后的数据流写入到磁盘生成一个索引缓存文件。
[0024]所述的步骤5)、6)中的存储区域编号与步骤1.3中存储区域编号一一对应。
[0025]所述的步骤7)具体为:
[0026]7.1)建立一个空的B+树;
[0027]7.2)将步骤5)中读取的索引数据及步骤6)中读取的索引数据依次解析成索引;
[0028]7.3)将步骤7.2)中解析的索引依次插入到步骤7.1)中建立的B+树中。
[0029]所述的步骤8)具体为:
[0030]8.1)将步骤7)生成的B+树的节点中各个值及值对应的下一节点信息依次序列化成二进制流;
[0031]8.2)将步骤7)生成的B+树从根节点开始按照广度遍历的方式依次按步骤8.1)中方法序列化成二进制流;
[0032]8.3)将步骤8.2)中序列化后的二进制流对应各个节点中各个值对应的下一节点信息,修改为下一节点在二进制流中偏移位置。
[0033]与现有技术相比,本发明通过分流技术和B+树减少了每次查询时读取的索引数据量从而大大的提升了索引的查询性能,通过异步更新减少了写数据对查询的阻塞时间并均衡了磁盘的10。
【专利附图】
【附图说明】
[0034]图1为本发明的流程图。
【具体实施方式】
[0035]下面结合附图和具体实施例对本发明进行详细说明。
[0036]实施例
[0037]假设索引的记录条数为I亿,索引库对索引按500000分流成500000个存储区域。内存中的索引记录每达到100万条即发起一次批量写操作,假设所以的索引缓存文件排除不完整和正在写的索引缓存文件后的总数达到3个则认为满足条件并可以发起异步更新的操作。如图1所示,该实例包含如下步骤:
[0038]1、将内存中缓存的100万条索引记录按照存储区域编号O至499999对应分流。
[0039]2、将步骤I中每一个存储区域编号对应的索引按照从小到大的顺序排序。
[0040]3、将步骤2中每一个存储区域编号对应的排序后的索引分别序列化成数据流。
[0041]4、将步骤3中序列化后的数据流按照存储区域编号从小到大的顺序一一对应组合成唯一的一个数据流。
[0042]5、将步骤4中组合后的数据流写入磁盘生成一个索引缓存文件。
[0043]6、异步获取所有索引缓存文件。
[0044]7、过滤并剔除不完整及正在写的索引缓存文件。
[0045]8、判断步骤7过滤后的索引缓存文件总个数是否满足发起异步更新的条件,即过滤后的索引缓存文件总个数达到3个。若满足则继续执行,若不满足则结束并等待下一次执行步骤I。
[0046]9、分别读取步骤7过滤后的各个索引缓存文件相同存储区域编号对应的存储区域的数据。该存储区域的编号范围为O至499999,初始值为0,该存储区域编号与步骤4中的存储区域编号对应。
[0047]10、读取步骤9中存储区域编号在索引库中对应的存储区域的数据。
[0048]11、将步骤9中读取的索引数据及步骤10中读取的索引数据按B+树的规则组织成一棵B+树。
[0049]11.1、建立一个空的B+树。
[0050]11.2、将步骤9中读取的索引数据及步骤10中读取的索引数据依次解析成索引。
[0051]11.3、将步骤11.2中解析的索引依次插入到步骤11.1中建立的B+树中。
[0052]12、将步骤11中生成的B+树序列化成二进制流。
[0053]12.1、将步骤11生成的B+树的节点中各个值及值对应的下一节点信息依次序列化成二进制流。
[0054]12.2、将步骤11生成的B+树从根节点开始按照广度遍历的方式依次按步骤12.1中方法序列化成二进制流。
[0055]12.3、将步骤12.2中序列化后的二进制流对应各个节点中各个值对应的下一节点信息,修改为下一节点在二进制流中偏移位置。
[0056]13、将步骤12执行后的数据覆盖更新到步骤9中存储区域编号在索引库中对应的存储区域并更新元数据。
[0057]14、判断步骤9中的索引缓存文件是否读到文件尾。若否则执行步骤9并将步骤9中的存储区域编号加1,若是则继续执行。
[0058]15、删除步骤7过滤后满足条件的索引缓存文件及步骤7过滤掉的不完整索引缓存文件。
【权利要求】
1.一种基于8+树异步更新索引的读优化方法,其特征在于,包括以下步骤: 1)批量写索引,生成按存储区域编号序列化成数据流的索引缓存文件; 2)获取步骤1)中生成的所有索引缓存文件; 3)过滤并剔除步骤2)中获取的索引缓存文件中不完整或正在写的索引缓存文件; 4)判断步骤3)过滤后的索引缓存文件总个数是否满足发起异步更新的条件,若满足则继续执行步骤5),否则等待下一次执行步骤1); 5)分别读取步骤3)过滤后的各个索引缓存文件相同存储区域编号对应的存储区域的索引数据; 6)读取步骤5)中存储区域编号在索引库中对应的存储区域的索引数据; 7)将步骤5)中读取的索引数据及步骤6中读取的索引数据按8+树的规则组织成一棵8+树; 8)将步骤7)中生成的8+树序列化成二进制流; 9)将步骤8)执行后的数据覆盖更新到步骤5)中存储区域编号在索引库中对应的存储区域并更新元数据; 10)判断步骤5)中的索引缓存文件是否读到文件尾,若为否则返回步骤5)并将步骤5)中的存储区域编号加1,若为是则继续执行步骤11); 11)删除步骤3)过滤后的索引缓存文件及步骤3)过滤掉的不完整索引缓存文件。
2.根据权利要求1所述的一种基于8+树异步更新索引的读优化方法,其特征在于,所述的步骤1)具体为: .1.1)将各个存储区域编号在内存中对应的索引进行排序; . 1.2)将步骤1.1)中各个存储区域编号对应排序后的索引序列化成数据流; . 1.3)将步骤1.2)中的数据流按存储区域编号按从小到大的顺序组合成唯一的一个数据流; .1.4)将步骤1.3)执行后的数据流写入到磁盘生成一个索引缓存文件。
3.根据权利要求2所述的一种基于8+树异步更新索引的读优化方法,其特征在于,所述的步骤5) ,6)中的存储区域编号与步骤1.3中存储区域编号一一对应。
4.根据权利要求1所述的一种基于8+树异步更新索引的读优化方法,其特征在于,所述的步骤7)具体为: .7.1)建立一个空的8+树; .7.2)将步骤5)中读取的索引数据及步骤6)中读取的索引数据依次解析成索引; .7.3)将步骤7.2)中解析的索引依次插入到步骤7.1)中建立的8+树中。
5.根据权利要求1所述的一种基于8+树异步更新索引的读优化方法,其特征在于,所述的步骤8)具体为: .8.1)将步骤7)生成的8+树的节点中各个值及值对应的下一节点信息依次序列化成二进制流; .8.2)将步骤7)生成的8+树从根节点开始按照广度遍历的方式依次按步骤8.1)中方法序列化成二进制流;.8.3)将步骤8.2)中序列化后的二进制流对应各个节点中各个值对应的下一节点信息,修改为下一节点在二进制流中偏移位置。
【文档编号】G06F17/30GK104408128SQ201410697537
【公开日】2015年3月11日 申请日期:2014年11月26日 优先权日:2014年11月26日
【发明者】吴植民 申请人:上海爱数软件有限公司