一种日志数据库检索装置及检索方法_2

文档序号:9524249阅读:来源:国知局
065]查询请求收集组件2021,用于接收查询请求;
[0066]查询组件2022,用于根据所述查询请求及内存中的索引进行查询,并返回查询结果;
[0067]索引管理模块203,包括:
[0068]索引判断组件2031,用于判断检索模块接收到的查询请求所涉及的索引是否已在内存中,如果不在内存中,则触发索引加载组件;
[0069]索引加载组件2032,用于从磁盘加载查询请求所涉及的索引到内存。
[0070]在本实施例或本发明其他某些实施例中,所述数据格式转化组件可以包括:
[0071]文本转换子组件,用于将所述新的日志数据转换为文本;
[0072]分词及映射子组件,用于对所述文本进行全文分词,在分词后得到的关键词与所属日志数据之间建立映射关系;
[0073]索引生成子组件,用于对关键词进行排序,形成由关键词指向日志数据的全文索引。
[0074]在本实施例或本发明其他某些实施例中,所述映射关系包括:
[0075]关键词、出现该关键词的日志数据编号;或者,
[0076]关键词、出现该关键词的日志数据编号,以及该关键词的出现次数、出现频率、出现位置中的一种或多种。
[0077]在本实施例或本发明其他某些实施例中,所述索引加载组件包括:
[0078]内存判断子组件,用于判断内存中的索引数量是否超出配置的最大值;
[0079]索引切换子组件,用于当所述内存判断子组件判断出内存中的索引数量超出配置的最大值时,将最近最少使用的索引移出内存,并将查询请求所涉及的索引加载到内存中;当所述内存判断子组件判断出内存中的索引数量未超出配置的最大值时,则直接将查询请求所涉及的索引加载到内存中。
[0080]在本实施例或本发明其他某些实施例中,所述装置还可以包括:
[0081]日志采集模块,用于从数据源实时接收新的日志数据,并将所述新的日志数据发送给所述索引创建模块中的数据采集组件。
[0082]在本实施例或本发明其他某些实施例中,所述索引文件写入组件,具体用于:
[0083]按照自然日对索引进行划分,将每个自然日得到的索引以一个或多个文件的形式存储在磁盘中。
[0084]关于上述实施例中的装置,其中各个模块执行操作的具体方式可参见下面方法实施例中的详细描述,此处将不做详细阐述说明。
[0085]图3是根据一示例性实施例示出的一种日志数据库检索方法的流程图。所述方法的执行主体为上述日志数据库检索装置。其中,磁盘中存储有日志数据的全文索引,所述全文索引是根据获取的新的日志数据,将所述新的日志数据进行格式转化后建立的,并以文件形式存储。
[0086]所述方法包括:
[0087]S301,接收查询请求;
[0088]S302,判断所述查询请求所涉及的索引是否已在内存中,如果不在内存中,则从所述磁盘加载所述查询请求所涉及的索引到内存;
[0089]S303,根据所述查询请求及内存中的索引进行查询,并返回查询结果。
[0090]在本实施例中,新的日志数据的索引被创建后都将会以文件形式存储在设备的磁盘中。在现有技术中,为日志数据库建立的索引通常保存在系统的内存,并未进行文件化存储,当用户调用索引时,会从内存找到该日志在数据库中的唯一标识,然后到数据库中进行检索,这种关系型数据的检索方式大大增加了数据库的负荷,检索效率也相对较低。
[0091]而本发明则反其道行之,将索引以文件的形式保存在磁盘中形成文件数据库,当查询用到时再加载到内存,检索日志时,便可从磁盘中的文件数据库中直接读取出完整的日志,不再进行关系型数据的检索,从而可以提高检索效率。而且,本发明也不是维护一个索引文件,不会因为数据源有一点变动就重建索引,而是针对旧日志数据通常不会被修改的特点采取增量的索引(Append)方式,即为新的日志数据不断创建新的索引文件,使索引分块化,实现索引递增式的扩展,这就可以避免因索引更新而导致的大量10操作,提高了索引的效率,进而提高了日志数据的检索效率。
[0092]在本实施例或本发明其他某些实施例中,参见图4所示,所述索引通过如下步骤建立后存储到所述磁盘中:
[0093]S401,将所述日志数据转换为文本。当然如果日志本身就已经是文本则不需转换,而pdf、xml、html等格式的数据需要进行转换。
[0094]S402,对所述文本进行全文分词,在分词后得到的关键词与所属日志数据之间建立映射关系。
[0095]S403,对关键词进行排序,形成由关键词指向日志数据的全文索引。
[0096]建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制。具体实施时,可以将输入的数据转换为文本格式的文档。然后将文档分词,可以采用分词器将输入的文档分隔成一个一个的单词,将英文按照空格和标点符号进行分割,将中文按照单个字进行分词,去掉标点符号,去掉停词(停词是在语言环境中经常出现但对索引无意义的一些词汇,例如英文中的:this、the、a、an等,中文中的一个、这个等)。经过分词后的词成为词元(即关键词),为了索引不区分大小写,将词元全部转换为小写。将词元与词元所属的文档建立关联关系,或者说是映射关系,然后将词元排序,合并相同的词元,并且修正与文档关联链表,形成反向索引表,该反向索引表即由关键词指向日志数据的全文索引。
[0097]其中,所述映射关系可以包括:
[0098]关键词、出现该关键词的日志数据编号;或者,
[0099]关键词、出现该关键词的日志数据编号,以及该关键词的出现次数、出现频率、出现位置中的一种或多种。
[0100]换句话说,映射关系中至少要包括关键词和出现该关键词的日志数据编号,此外还可以包括出现次数,甚至可以包括出现位置(起始偏移量,结束偏移量)、出现频率等。
[0101]在现有技术中,使用模糊查询语句(如like〃% keyword % 〃)进行查询时,数据库索引通常不起作用,导致查询过程非常缓慢的问题。而本发明采用了全文索引的方式,将日志数据转换为文本,对文本进行全文分词,形成由关键词指向日志数据的反向索引表,实现全文的倒排索引,这样就可以把模糊查询变成多个可以利用索引的精确查询的逻辑组合,克服了现有技术中模糊查询时效率非常低的问题,大大提高了查询效率。并且由于在创建全文索引时,在索引中加入了完整的日志数据信息,以文件形式存储在磁盘中,从而实现用户在调用全文检索功能,检索日志时,便可直接从磁盘中的文件数据库中直接读取出包含完整日志数据的索引加载到内存中,并从内存中进行查询,不再进行关系型数据的检索。
[0102]在本实施例或本发明其他某些实施例中,所述索引按照自然日进行划分,每个自然日得到的索引以一个或多个文件的形式存储在所述磁盘中。
[0103]举例来讲,按照自然日划分索引文件,一个自然日一个索引,一个索引由多个文件组成,一个自然日内的日志数据存放在当日的索引文件中,索引名称可以按照日期来定义,索引的名称为“index”字符串和自然日的日期缩写构成,格式如“indeX2013010100”,表示是2013年1月1日0点的索引。每个索引在物理存储上是文件系统的一个文件夹,在索引文件夹内存放索弓I数据的文件。
[0104]索引是文档的集合,文档类似于关系数据库表中的一条记录,文档中分为若干域,域类似于关系数据库表的一个字段,索引的每个域包含该域的数据,也有该域的数据索引,作为示例可参见图5所示,图5中Document为文档,Field为域,Index为域的索引,Data为域的数据。域的索引是为索引的检索使用的,索引检索服务根据域的索引搜索到域,然后读取出该域的数据和该域所在文档的中的其他域的数据。
[0105]在本实施例或本发明其他某些实施例中,参见图6所示,从所述磁盘加载所述查询请求所涉及的索引到内存,包括:
[0106]S601,判断内存中的索引数量是否超出配置的最大值;
[0107]S602,当内存中的索引数量超出配置的最大值时,将最近最少使用的索引移出内存,并将查询请求所涉及的索引加载到内存中;当内存中的索引数量未超出配置的最大值时,则直接将查询请求所涉及的索引加载到内存中。
[0108]下面结合具体序列图对以上索引创建、索引管理、索引检索三个模块作进一步说明。
[0109]i)索引创建模块
[0110]索引创建模块负责将日志数据转化为索引数据的格式,按照索引要求的文件格式存储到索引文件中。索引创建模块由数据采集组件、数据格式转化组件、索引文件写入组件等构成。索引创建模块支持两种方式创建索引,一种是实时创建,此时还包括日志采集模块,日志采集模块从日志数据库实时获取日志数据并发送给数据采集组件,日志数据格式采用key-value键值对的数组格式;另一种是数据采集组件定期读取日志数据库中的日志来创建索引文件。实时创建是一种被动的方式,通过被动接收日志数据然后创建索引;从数据库读取日志数据则是一种主动的方式,由索引创建模块主动读取数据库中日志数据创建索引文件。
[0111]图7是根据一示例性实施例示出的实时(即被动)创建索引的序列图。说
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1