本发明属于数据存储领域,尤其涉及一种数据索引方法及装置。
背景技术:
随着社会的发展,各行业、各领域的数据量都会不断地增长,特别是电信和互联网行业更是如此。服务器硬件及数据库配置等条件固定的情况下,存储数据量的增加导致占用资源过大,进而会影响数据查询效率。采用传统的查询方式,查询效率随着数据量不断增大,会不断的降低。用户查询的响应时间会越来越慢,甚至会出现由于查询访问量过多导致数据库无法使用的情况。
现有技术中,一般采用Hadoop数据库(HBase,Hadoop Database)对数据进行存储。HBase是一个分布式的、面向列的开源数据库。现有的查询方式是通过索引条件对单个行主键(Rowkey)访问,然后按照该Rowkey所在的域(Region),将查询数据的请求路由到该Region,以获取查询数据。使用HBase的现有的查询方式,获取100万条记录需要1000秒时间。如果全部数据均匀分布在100个Region上,那么利用并行计算特性,该100个Region同时向客户端输出数据,那么需要10秒就能将所有数据取下来,但是对于一些特殊的企业,如电信行业,每天查询的数据量在千亿条,按照这样的查询数据量,如果使用现有的HBase数据库的查询方式,及时使用并行计算特性,读取所有数据的时间也是很长的。由此可见,一旦数据量暴增,使用现有的查询方法需要很长的查询时间,从而影响查询数据的效率。
技术实现要素:
本发明提供一种数据索引方法及装置,旨在解决由于数据量的增加,现有技术中的查询方法查询数据的时间过长,查询效率降低的问题。
本发明提供的一种数据索引方法,包括:判断数据库中是否存在重复存储的索引字段,并判断重复存储的索引字段的存储重复数是否大于预置数值;若是,则从预置起始时间开始,将预置存储时间粒度下的索引字段和所述预置存储时间粒度作为索引信息,并将所述索引信息和所述索引信息对应的行主键值缓存于内存中;当缓存完成后,将所述索引信息和所述索引信息对应的行主键值,按照预置数据存储格式生成一条批索引记录;将所述批索引记录写入到数据库中,使得在查询时通过所述批索引记录查找到目标数据。
本发明提供的一种数据索引装置,包括:判断模块用于判断数据库中是否存在重复存储的索引字段,并判断重复存储的索引字段的存储重复数是否大于预置数值;存储控制模块用于若是,则从预置起始时间开始,将预置存储时间粒度下的索引字段和所述预置存储时间粒度作为索引信息,并将所述索引信息和所述索引信息对应的行主键值缓存于内存中;生成模块用于当缓存完成后,将所述索引信息和所述索引信息对应的行主键值,按照预置数据存储格式生成一条批索引记录;所述存储控制模块还用于将所述批索引记录写入到数据库中,使得在查询时通过所述批索引记录查找到目标数据。
本发明提供的数据索引方法及装置,判断数据库中是否存在重复存储的索引字段,并判断重复存储的索引字段的存储重复数是否大于预置数值,若是,则从预置起始时间开始,将预置存储时间粒度下的索引字段和该预置存储时间粒度作为索引信息,并将该索引信息和该索引信息对应的行主键值缓存于内存中,当缓存完成后,将该索引信息和该索引信息对应的行主键值,按照预置数据存储格式生成一条批索引记录,将该批索引记录写入到数据库中,使得在查询时通过该批索引记录查找到目标数据,这样针对存储重复度高的索引字段利用生成的批索引记录可以一次查询到大量的数据,提高了查询速度,进而提高了查询效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1是本发明第一实施例提供的数据索引方法的实现流程示意图;
图2是本发明第二实施例提供的数据索引方法的实现流程示意图;
图3是本发明第三实施例提供的数据索引装置的结构示意图;
图4是本发明第四实施例提供的数据索引装置的结构示意图。
具体实施方式
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,图1为本发明第一实施例提供数据索引方法的实现流程示意图,可应用于具有数据处理功能的终端中,如计算机,图1所示的数据索引方法,主要包括以下步骤:
S101、判断数据库中是否存在重复存储的索引字段,并判断重复存储的索引字段的存储重复数是否大于预置数值。
该预置数值可以为50次,也可以为1000次,本领域技术人员可以根据实际情况对预置数值进行调整。一般重复存储次数比较高的索引字段包括:网元、小区、业务类型等,该等索引字段一般运营商使用的较多。若是,则执行步骤S102,若否,则进程结束。
S102、从预置起始时间开始,将预置存储时间粒度下的索引字段和该预置存储时间粒度作为索引信息,并将该索引信息和该索引信息对应的行主键值缓存于内存中。
S103、当缓存完成后,将该索引信息和该索引信息对应的行主键值,按照预置数据存储格式生成一条批索引记录。
HBase数据库是采用键值(key value)的列存储,行主键值(rowkey)值为keyvalue的key,表示唯一一行。rowkey为一段二进制码流,最大长度为64KB。该预置存储时间粒度表示时间间隔,该预置存储时间粒度不做限定,可以为5分钟,也可以为10分钟,还可以为2分钟。若预置存储时间粒度为3分钟,则从预置起始时间开始,每3分钟,对索引字段和该3分钟内索引字段对应的所有rowkey值进行存储,该预置起始时间为初始状态下的时间。例如,索引字段为小区ID:xxx,预置时间段为2分钟,预置起始时间为2012年6月2日10:00,则从2012年6月2日10:00开始,每2分钟对小区ID:xxx的索引字段生成一条批索引记录。
S104、将该批索引记录写入到数据库中,使得在查询时通过该批索引记录查找到目标数据。
需要说明的是,本发明是基于HBase数据库的数据索引方法及装置。
本发明实施例中,判断数据库中是否存在重复存储的索引字段,并判断重复存储的索引字段的存储重复数是否大于预置数值,若是,则从预置起始时间开始,将预置存储时间粒度下的索引字段和该预置存储时间粒度作为索引信息,并将该索引信息和该索引信息对应的行主键值缓存于内存中,当缓存完成后,将该索引信息和该索引信息对应的行主键值,按照预置数据存储格式生成一条批索引记录,将该批索引记录写入到数据库中,使得在查询时通过该批索引记录查找到目标数据,这样针对存储重复度高的索引字段利用生成的批索引记录可以一次查询到大量的数据,提高了查询速度,进而提高了查询效率。
请参阅图2,图2为本发明第二实施例提供的数据索引方法的实现流程示意图,可应用于具有数据处理功能的终端中,如计算机,图2所示的数据索引方法,主要包括以下步骤:
S201、判断数据库中是否存在重复存储的索引字段,并判断重复存储的索引字段的存储重复数是否大于预置数值。
该预置数值可以为50次,也可以为1000次,本领域技术人员可以根据实际情况对预置数值进行调整。一般重复存储次数比较高的索引字段包括:网元、小区、业务类型等,该等索引字段一般运营商使用的较多。若是,则执行步骤S202,若否,则进程结束。
S202、从预置起始时间开始,将预置存储时间粒度下的索引字段和该预置存储时间粒度作为索引信息,并将该索引信息和该索引信息对应的行主键值缓存于内存中。
HBase数据库是采用key value的列存储,rowkey值为key value的key,表示唯一一行。rowkey为一段二进制码流,最大长度为64KB。该预置存储时间粒度表示时间间隔,该预置存储时间粒度不做限定,可以为5分钟,也可以为10分钟,还可以为2分钟。若预置存储时间粒度为3分钟,则从预置起始时间开始,每3分钟,对索引字段和该3分钟内索引字段对应的所有rowkey值进行存储,该预置起始时间为初始状态下的时间。
S203、确定缓存时间粒度,并等待缓存完成。
S204、当缓存完成后,将该索引信息和该索引信息对应的行主键值,按照预置数据存储格式生成一条批索引记录。
可选地,当缓存完成后,将该索引信息和该索引信息对应的行主键值,按照预置数据存储格式生成一条批索引记录具体为:
将该索引信息对应的行主键值整合为行主键集合;
将该索引信息和该索引信息对应的行主键集合生成该批索引记录。
在该存储时间粒度下,该索引字段对应的rowkey值可以有多个,这样将多个rowkey值整合为一个rowkey集合中。
预置数据存储格式可以为表格的形式,也可以为其他存储格式。下面以表格形式作为预置数据存储格式生成一条批索引记录,具体详见表1。
表1
在实际应用中,每条批索引记录对应一个索引序号,该索引序号用于区分不同的批索引记录。
S205、将该批索引记录写入到数据库中,使得在查询时通过该批索引记录查找到目标数据。
然后生成的批索引记录写入到HBase数据库中。
S206、根据预置公式,计算预置时间段内的待存储的批索引记录中索引记录的数目。
其中该预置公式为:待存储的批索引记录中索引记录的数目等于该索引字段的总数乘以该预置时间段与该缓存时间粒度之间的比值,该预置时间为分子,该缓存时间粒度为分母。
该预置公式是用于计算在固定的时间内处理索引记录的总数。假设该预置时间段为一天,即24小时,则该预置公式为:一天内存储索引记录的总数=(一天总的时间/缓存时间粒度)*索引字段总个数。例如,缓存时间粒度为10分钟,索引字段为cell ID,而且cell ID总个数是6500个,那么一天时间内,一共存储的索引记录数=(24*60分钟/10分钟)*6500=936000条。
S207、在待查询时间段内,从该数据库中查找与待查询索引字段对应的行主键集合。
S208、根据该行主键集合所在的域,从该域中获取目标数据。
当用户需要从数据库中提取数据时,首先接收到用户输入的待查询时间,例如,该待查询时间为4月12日上午10:00-11:00,那么从数据库提取的数据为4月12日上午10:00-11:00内存储的数据。例如,在服务网关(SGW,service gateway)下,工作人员需要查询的是4月12日上午10:00-11:00内cell ID=xxxx的所有用户上网记录,待查询索引字段为cell ID=xxxx,待查询时间为4月12日上午10:00-11:00。首先按照要待查询索引字段,从数据库中筛选出所有该待查询索引字段对应的rowkey集合,然后再按照待查询时间筛选出符合待查询时间的rowkey集合。若按照存储时间粒度为5分钟,则4月12日上午10:00-11:00内一共可以找到12条批索引记录,然后根据该12条批索引记录中rowkey集合确定该rowkey集合所在的域(Region),然后将查询请求路由到该Region,以从Region中获取目标数据。
本发明实施例中,判断数据库中是否存在重复存储的索引字段,并判断重复存储的索引字段的存储重复数是否大于预置数值,若是,则从预置起始时间开始,将预置存储时间粒度下的索引字段和该预置存储时间粒度作为索引信息,并将该索引信息和该索引信息对应的行主键值缓存于内存中,确定缓存时间粒度,并等待缓存完成,当缓存完成后,将该索引信息和该索引信息对应的行主键值,按照预置数据存储格式生成一条批索引记录,将该批索引记录写入到数据库中,使得在查询时通过该批索引记录查找到目标数据,根据预置公式,计算预置时间段内的待存储的批索引记录中索引记录的数目,其中该预置公式为:待存储的批索引记录中索引记录的数目等于该索引字段的总数乘以该预置时间段与该缓存时间粒度之间的比值,该预置时间为分子,该缓存时间粒度为分母,在待查询时间段内,从该数据库中查找与待查询索引字段对应的行主键集合,根据该行主键集合所在的域,从该域中获取目标数据,这样针对存储重复度高的索引字段利用生成的批索引记录可以一次查询到大量的数据,提高了查询速度,进而提高了查询效率。
请参阅图3,图3是本发明第三实施例提供的数据索引装置的结构示意图,为了便于说明,仅示出了与本发明实施例相关的部分。图3示例的数据索引装置可以是前述图1和图2所示实施例提供的数据索引方法的执行主体。图3示例的数据索引装置,主要包括:判断模块301、存储控制模块302和生成模块303。以上各功能模块详细说明如下:
判断模块301,用于判断数据库中是否存在重复存储的索引字段,并判断重复存储的索引字段的存储重复数是否大于预置数值;
存储控制模块302,用于若是,则从预置起始时间开始,将预置存储时间粒度下的索引字段和该预置存储时间粒度作为索引信息,并将该索引信息和该索引信息对应的行主键值缓存于内存中;
生成模块303,用于当缓存完成后,将该索引信息和该索引信息中该索引字段对应的行主键值,按照预置数据存储格式生成一条批索引记录;
存储控制模块302,还用于将该批索引记录写入到数据库中,使得在查询时通过该批索引记录查找到目标数据。
本实施例未尽之细节,请参阅前述图1所示实施例的描述,此处不再赘述。
需要说明的是,以上图3示例的数据索引装置的实施方式中,各功能模块的划分仅是举例说明,实际应用中可以根据需要,例如相应硬件的配置要求或者软件的实现的便利考虑,而将上述功能分配由不同的功能模块完成,即将数据索引装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。而且,实际应用中,本实施例中的相应的功能模块可以是由相应的硬件实现,也可以由相应的硬件执行相应的软件完成。本说明书提供的各个实施例都可应用上述描述原则,以下不再赘述。
本发明实施例中,判断模块301判断数据库中是否存在重复存储的索引字段,并判断重复存储的索引字段的存储重复数是否大于预置数值,存储控制模块302若是,则从预置起始时间开始,将预置存储时间粒度下的索引字段和该预置存储时间粒度作为索引信息,并将该索引信息和该索引信息对应的行主键值缓存于内存中,生成模块303当缓存完成后,将该索引信息和该索引信息对应的行主键值,按照预置数据存储格式生成一条批索引记录,存储控制模块302将该批索引记录写入到数据库中,使得在查询时通过该批索引记录查找到目标数据,这样针对存储重复度高的索引字段利用生成的批索引记录可以一次查询到大量的数据,提高了查询速度,进而提高了查询效率。
请参阅图4,图4为本发明第四实施例提供的数据索引装置的结构示意图,为了便于说明,仅示出了与本发明实施例相关的部分。图4示例的数据索引装置可以是前述图1和图2所示实施例提供的数据索引方法的执行主体。图4示例的数据索引装置,主要包括:判断模块401、存储控制模块402、确定模块403、生成模块404、计算模块405、查找模块406和获取模块407,其中生成模块404包括整合子模块4041和生成子模块4042。以上各功能模块详细说明如下:
判断模块401,用于判断数据库中是否存在重复存储的索引字段,并判断重复存储的索引字段的存储重复数是否大于预置数值。
该预置数值可以为50次,也可以为1000次,本领域技术人员可以根据实际情况对预置数值进行调整。一般重复存储次数比较高的索引字段包括:网元、小区、业务类型等,该等索引字段一般运营商使用的较多。
存储控制模块402,用于若是,则从预置起始时间开始,将预置存储时间粒度下的索引字段和该预置存储时间粒度作为索引信息,并将该索引信息和该索引信息对应的行主键值缓存于内存中。
HBase数据库是采用key value的列存储,rowkey值为key value的key,表示唯一一行。rowkey为一段二进制码流,最大长度为64KB。该预置存储时间粒度表示时间间隔,该预置存储时间粒度不做限定,可以为5分钟,也可以为10分钟,还可以为2分钟。若预置存储时间粒度为3分钟,则从预置起始时间开始,每3分钟,对索引字段和该3分钟内索引字段对应的所有rowkey值进行存储,该预置起始时间为初始状态下的时间。
确定模块403,用于确定缓存时间粒度,并等待缓存完成。
生成模块404,用于当缓存完成后,将该索引信息和该索引信息对应的行主键值,按照预置数据存储格式生成一条批索引记录。
可选地,生成模块404包括:整合子模块4041和生成子模块4042;
整合子模块4041,用于将该索引信息对应的行主键值整合为行主键集合;
生成子模块4042,用于将该索引信息和该索引信息对应的行主键集合生成该批索引记录。
在该存储时间粒度下,该索引字段对应的rowkey值可以有多个,这样将多个rowkey值整合为一个rowkey集合中。
预置数据存储格式可以为表格的形式,也可以为其他存储格式。下面以表格形式作为预置数据存储格式生成一条批索引记录,具体详见上述表1。
在实际应用中,每条批索引记录对应一个索引序号,该索引序号用于区分不同的批索引记录。
存储控制模块402,用于将该批索引记录写入到数据库中,使得在查询时通过该批索引记录查找到目标数据。
然后存储控制模块402将生成的批索引记录写入到HBase数据库中。
计算模块405,用于根据预置公式,计算预置时间段内的待存储的批索引记录中索引记录的数目,其中该预置公式为:待存储的批索引记录中索引记录的数目等于该索引字段的总数乘以该预置时间段与该缓存时间粒度之间的比值,该预置时间为分子,该缓存时间粒度为分母。
该预置公式是用于计算在固定的时间内处理索引记录的总数。假设该预置时间段为一天,即24小时,则该预置公式为:一天内存储索引记录的总数=(一天总的时间/缓存时间粒度)*索引字段总个数。例如,缓存时间粒度为10分钟,索引字段为cell ID,而且cell ID总个数是6500个,那么一天时间内,一共存储的索引记录数=(24*60分钟/10分钟)*6500=936000条。
查找模块406,用于在待查询时间段内,从该数据库中查找与待查询索引字段对应的行主键集合。
获取模块407,用于根据该行主键集合所在的域,从该域中获取目标数据。
该装置还包括接收模块,用于当用户需要从数据库中提取数据时,首先接收到用户输入的待查询时间。例如,该待查询时间为4月12日上午10:00-11:00,那么从数据库提取的数据为4月12日上午10:00-11:00内存储的数据。例如,在服务网关(SGW,service gateway)下,工作人员需要查询的是4月12日上午10:00-11:00内cell ID=xxxx的所有用户上网记录,待查询索引字段为cell ID=xxxx,待查询时间为4月12日上午10:00-11:00。首先查找模块406按照要待查询索引字段,从数据库中查找出所有该待查询索引字段对应的rowkey集合,然后再按照待查询时间筛选出符合待查询时间的rowkey集合。若按照存储时间粒度为5分钟,则查找模块406在4月12日上午10:00-11:00内一共找到12条批索引记录。获取模块407根据该12条批索引记录中rowkey集合确定该rowkey集合所在的域(Region),然后将查询请求路由到该Region,以从Region中获取目标数据。
本实施例未尽之细节,请参阅前述图1和图2所示实施例的描述,此处不再赘述。
本发明实施例中,判断模块401判断数据库中是否存在重复存储的索引字段,并判断重复存储的索引字段的存储重复数是否大于预置数值,存储控制模块402若是,则从预置起始时间开始,将预置存储时间粒度下的索引字段和该预置存储时间粒度作为索引信息,并将该索引信息和该索引信息对应的行主键值缓存于内存中,确定模块403确定缓存时间粒度,并等待缓存完成,生成模块404当缓存完成后,将该索引信息和该索引信息对应的行主键值,按照预置数据存储格式生成一条批索引记录,存储控制模块402将该批索引记录写入到数据库中,使得在查询时通过该批索引记录查找到目标数据,计算模块405根据预置公式,计算预置时间段内的待存储的批索引记录中索引记录的数目,其中该预置公式为:待存储的批索引记录中索引记录的数目等于该索引字段的总数乘以该预置时间段与该缓存时间粒度之间的比值,该预置时间为分子,该缓存时间粒度为分母,查找模块406在待查询时间段内,从该数据库中查找与待查询索引字段对应的行主键集合,获取模块407根据该行主键集合所在的域,从该域中获取目标数据,这样针对存储重复度高的索引字段利用生成的批索引记录可以一次查询到大量的数据,提高了查询速度,进而提高了查询效率。
在本申请所提供的多个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信链接可以是通过一些接口,装置或模块的间接耦合或通信链接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上为对本发明所提供的数据索引方法及装置的描述,对于本领域的技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。