一种在大数据量存储中快速检索的方法转让专利

申请号 : CN201110116710.7

文献号 : CN102184222B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 范渊杨永清李凯

申请人 : 杭州安恒信息技术有限公司

摘要 :

本发明涉及数据库审计技术领域,旨在提供一种在大数据量存储中快速检索的方法。该方法包括:采用关系型数据库存储审计记录,每条记录拥有唯一ID,并以惯常使用的检索特性为字段;议解析模块获取审计记录并入库;使用独立的全文索引引擎监控审计记录入库情况,对新入库的审计记录建立全文索引,并逐级建立和维护当前索引、单位小时索引、单位天索引;以检索特性为关键字使用全文索引进行检索,获取符合特性的审计记录的主ID集,再通过主ID集获取符合检索特性的所有审计记录的完整信息。本发明在建立全文索引过程中无需为检索特性增加检索属性,全文索引文件的开销比审计记录本身的存储更小。极大提升数据库审计系统的存储能力和检索性能。

权利要求 :

1.一种在大数据量存储中快速检索的方法,其特征在于,包括如下步骤:A、采用关系型数据库存储审计记录,每条记录拥有唯一ID,并以惯常使用的检索特性为字段;

B、协议解析模块获取审计记录后,对该审计记录进行入库,而不对该审计记录对应的SQL语句进行语义分析所产生的细粒度信息进行入库;

C、使用独立的全文索引引擎监控审计记录入库情况,对新入库的审计记录建立全文索引,并逐级建立和维护当前索引、单位小时索引、单位天索引;

D、检索时,以检索特性为关键字使用全文索引进行检索,获取符合检索特性的审计记录的ID集,再通过ID集获取符合检索特性的所有审计记录的完整信息;

步骤A中所述的检索特性是在对数据进行检索时惯常使用的数据特征值,是下述内容中的至少一种:登录用户名、客户端IP、服务端IP、访问时间、SQL语句、被访问的数据库名、被访问的表、被访问的字段或SQL操作类型。

2.根据权利要求1所述的一种在大数据量存储中快速检索的方法,其特征在于,所述的步骤B进一步包括如下:B1、通过网络采集模块和协议解析模块获取审计记录;

B2、获取的审计记录被存入入库文件,当该入库文件包含的审计记录数达到某一设定门限、或该入库文件存在周期超过某一设定时间门限时,将把该入库文件移动到可入库目录,并打开新的入库文件用以记录新的审计记录;

B3、移动入库文件到可入库目录后,登记该入库文件所包含的审计记录ID范围及入库文件名的对应关系;

B4、使用关系型数据库数据导入工具Mysqlimport对入库文件进行入库,入库后删除入库文件。

3.根据权利要求2所述的一种在大数据量存储中快速检索的方法,其特征在于,执行所述步骤C时,进一步包括:C4、监控步骤B3中的登记信息;

C5、如果步骤C4中发现有新入库文件产生,则检查该入库文件是否存在;

C6、如果步骤C5中新入库文件已被删除,根据步骤B4,说明该入库文件已经入库完成,该入库文件所对应登记信息中ID范围内的审计记录需要建立全文索引;

C7、在当前索引文件中,为步骤C6中需要建立全文索引的审计记录建立全文索引,并删除步骤B3中对应的登记信息;

C8、把当前索引文件合并到当前小时索引文件中,并初始化当前索引文件。

4.根据权利要求3所述的一种在大数据量存储中快速检索的方法,其特征在于,所述的步骤C7进一步包括如下:C71、步骤C6中需要建立全文索引的ID范围所对应的审计记录,是本次全文索引的数据源;

C72、审计记录中可以被用来做检索条件的字段,都将被建立全文索引,可根据这些字段来检索获取审计记录ID;

C73、对于惯常使用的检索特性中除SQL语句外的其他检索特性,在获取数据源数据时为每一个字段内容加上特殊的前后缀,以极大减少该内容作为一个单词出现在其他字段内容中的概率,确保全文检索准确性;

C74、根据步骤C73的规则,以步骤C6中ID范围的审计记录为数据源,在当前索引中建立全文索引;

C75、删除步骤B3中对应的登记信息。

5.根据权利要求4所述的一种在大数据量存储中快速检索的方法,其特征在于,所述的步骤D进一步包括如下:D1、为用户输入的每个检索特性内容附加上步骤C73所述与该特性一致的特殊的前后缀,形成检索关键词;

D2、以步骤D1中的检索关键词为搜索条件,在当前小时索引文件、当前天索引文件以及根据搜索的时间段范围决定的包含日期的天索引文件中进行检索,获取审计记录ID;

D3、根据审计记录ID,在关系型数据库中获取符合条件的审计记录的完整信息。

6.根据权利要求1所述的一种在大数据量存储中快速检索的方法,其特征在于,所述的步骤C中,还进一步包括:C1、将全文索引文件分成当前索引文件、当前小时索引文件、当天索引文件、包含日期的天索引文件;

C2、根据时间判断是否需要把当前小时文件合并到当天索引中,如果离上一次该类合并动作超过一小时,则进行合并,并初始化当前小时索引文件;

C3、根据时间判断是否需要把当天索引文件演变为日期天索引文件,如果离上一次合并动作的日期发生变更,则把当天索引文件变更为包含日期的天索引文件,并初始化当天索引文件。

说明书 :

一种在大数据量存储中快速检索的方法

技术领域

[0001] 本发明涉及数据库审计技术领域,尤其涉及一种在大数据量存储中快速检索的方法。

背景技术

[0002] 对数据库审计系统而言,审计并存储上亿条甚至几十亿条审计记录的情况非常普遍,在这种海量记录中能够方便地按各种特性组合进行快速检索,对数据库审计系统的事后审计功能而言至关重要。
[0003] 数据库审计系统的事后审计,指的是通过某些已知特性进行反向回溯和定位,找出其他未知特性,从而完整地还原整个操作或事件。这类特性可以包括被访问的数据库名、被访问的表、被访问的字段、SQL操作类型、数据库登录用户名、客户端IP、服务端IP、时间范围以及SQL语句包含的内容。
[0004] 在海量的审计记录中进行精确检索,通常的方法是对SQL语句进行语义分析并形成细粒度记录,然后借助关系型数据库,对各种检索特性及特性组合建立索引,再根据索引实现快速检索。由于审计记录特性众多,存储各种特性对应关系并为各种特性组合都建立索引,将耗费比审计记录本身大得多的存储空间,另外还将极大消耗存储性能,这对存储容量和存储性能要求极高的数据库审计系统而言是无法忍受的。

发明内容

[0005] 本发明要解决的技术问题是,为数据库审计系统提供一种大数据量存储中快速检索的方法,该方法较SQL细粒度存储并为各种检索特性及特性组合建立索引的方法将极大节省存储空间,并将极大提升检索效率。
[0006] 鉴于数据库审计系统的审计记录数量十分庞大的事实,就必然要求单条审计记录尽可能地节约存储空间,并且当存储中已经包含海量审计记录时,仍然能够以任意特性或特性组合为条件进行快速检索。而全文索引就是解决在海量存储中实现快速检索的关键技术。把全文索引引入数据库审计系统中,将极大节省存储空间和性能,极大提升检索能力。
[0007] 为解决问题,本发明的解决方案是:
[0008] 提供一种在大数据量存储中快速检索的方法,包括如下步骤:
[0009] A、采用关系型数据库存储审计记录,每条记录拥有唯一ID,并以惯常使用的检索特性为字段;
[0010] B、协议解析模块获取审计记录后,对该审计记录进行入库,而不对该审计记录对应的SQL语句进行语义分析所产生的细粒度信息进行入库;
[0011] C、使用独立的全文索引引擎监控审计记录入库情况,对新入库的审计记录建立全文索引,并逐级建立和维护当前索引、单位小时索引、单位天索引;
[0012] D、检索时,以检索特性为关键字使用全文索引进行检索,获取符合特性的审计记录的主ID集,再通过主ID集获取符合检索特性的所有审计记录的完整信息。
[0013] 本发明中,所述的步骤B进一步包括如下:
[0014] B1、通过网络采集模块和协议解析模块获取审计记录;
[0015] B2、获取的审计记录被存入入库文件,当该入库文件包含的审计记录数达到某一设定门限、或该入库文件存在周期超过某一设定时间门限时,将把该入库文件移动到可入库目录,并打开新的入库文件用以记录新的审计记录;
[0016] B3、移动入库文件到可入库目录后,登记该入库文件所包含的审计记录ID范围及入库文件名的对应关系;
[0017] B4、使用关系型数据库数据导入工具Mysqlimport对入库文件进行入库,入库后删除入库文件。
[0018] 本发明中,执行所述步骤C时,进一步包括:
[0019] C4、监控步骤B3中的登记信息;
[0020] C5、如果步骤C4中发现有新入库文件产生,则检查该入库文件是否存在;
[0021] C6、如果步骤C5中新入库文件已被删除,根据步骤B4,说明该入库文件已经入库完成,该入库文件所对应登记信息中ID范围内的审计记录需要建立全文索引;
[0022] C7、在当前索引文件中,为步骤C6中需要建立全文索引的审计记录建立全文索引,并删除步骤B3中对应的登记信息;
[0023] C8、把当前索引文件合并到当前小时索引文件中,并初始化当前索引文件。
[0024] 本发明中,所述的步骤C7进一步包括如下:
[0025] C71、步骤C6中需要建立全文索引的ID范围所对应的审计记录,是本次全文索引的数据源;
[0026] C72、审计记录中可以被用来做检索条件的字段,都将被建立全文索引,可根据这些字段来检索获取审计记录ID;
[0027] C73、对于除SQL语句外的其他检索特性,在获取数据源数据时为每一个字段内容加上特殊的前后缀,以极大减少该内容作为一个单词出现在其他字段内容中的概率,确保全文检索准确性;
[0028] C74、根据步骤C73的规则,以步骤C6中ID范围的审计记录为数据源,在当前索引中建立全文索引;
[0029] C75、删除步骤B3中对应的登记信息。
[0030] 本发明中,所述的步骤D进一步包括如下:
[0031] D1、为用户输入的每个检索特性内容附加上步骤C73所述与该特性一致的特殊的前后缀,形成检索关键词;
[0032] D2、以步骤D1中的检索关键词为搜索条件,在当前小时索引文件、当前天索引文件以及根据搜索的时间段范围决定的包含日期的天索引文件中进行检索,获取审计记录ID;
[0033] D3、根据审计记录ID,在关系型数据库中获取符合条件的审计记录的完整信息。
[0034] 本发明中,步骤A中所述的检索特性是在对数据进行检索时惯常使用的数据特征值,是下述内容中的至少一种:登录用户名、客户端IP、服务端IP、访问时间、SQL语句、被访问的数据库名、被访问的表、被访问的字段或SQL操作类型。
[0035] 本发明中,所述的步骤C中,还进一步包括:
[0036] C1、将全文索引文件分成当前索引文件、当前小时索引文件、当天索引文件、包含日期的天索引文件;
[0037] C2、根据时间判断是否需要把当前小时文件合并到当天索引中,如果离上一次该类合并动作超过一小时,则进行合并,并初始化当前小时索引文件;
[0038] C3、根据时间判断是否需要把当天索引文件演变为日期天索引文件,如果离上一次合并动作的日期发生变更,则把当天索引文件变更为包含日期的天索引文件,并初始化当天索引文件。
[0039] 本发明的有益效果在于:
[0040] 本发明和存储庞大SQL细粒度信息和大量建立索引相比,由于不需要存储比审计记录庞大的多的细粒度信息,不需要存储和维护附着在细粒度信息上更为庞大的索引,仅需要增加全文索引文件的存储开销;而全文检索的检索结果模糊度通过为检索特性内容附加前后缀的方式得以解决后,在建立全文索引过程中就无需为检索特性增加检索属性,这样,全文索引文件的开销比审计记录本身的存储更小。如此,采用本发明,将极大提升数据库审计系统的存储能力及存储性能,极大提升检索性能。

附图说明

[0041] 图1为负责入库文件产生功能的引擎处理流程图;
[0042] 图2为负责对入库文件执行入库功能的引擎具体处理流程图;
[0043] 图3为负责创建全文索引功能的引擎具体处理流程图;
[0044] 图4为执行全文检索的功能具体处理流程图。

具体实施方式

[0045] 本发明提供了一种大数据量存储中快速检索的方法,本发明的核心思想为:以关系型数据库中审计记录为全文索引数据源,从数据源中提取数据后为每一检索特性附加特殊的前后缀再建立全文索引;全文检索过程同样为检索特性内容附加上建立全文索引过程一致的前后缀,以此产生的内容为关键词进行全文检索并获取审计记录ID,再通过关系型数据库获取符合条件的审计记录的完整信息。
[0046] 为确保理解准确、避免产生歧义或不清楚,首先对本发明涉及的部分术语进行解释如下:
[0047] 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
[0048] 网络采集模块、协议解析模块、数据导入工具Mysqlimport,均为软件功能模块,其具体的实现方式可以有很多种。本领域技术人员在了解本发明思路及各模块的功能描述之后,完全可以根据其掌握的基本技能实现各功能模块的编程与运行,不存在无法理解或无法再现的可能性。
[0049] 其中,网络采集模块用于采集审计对象的网络流量;协议解析模块用于对网络流量进行分析和获取审计记录;数据导入工具Mysqlimport用于对入库文件进行入库,入库后删除入库文件。通常所使用的Mysqlimport是一个命令行工具,两个参数以及大量的选项可供选择,是MySQL的一个载入(或者说导入)数据的非常有效的工具。
[0050] 下面结合附图来详细描述本发明所述方法,本发明所述方法包含四个独立运行的软件功能模块(以下均按业内惯例称之为引擎),分别负责入库文件产生、对入库文件执行入库、创建全文索引、执行全文检索的功能,各引擎具体处理流程分别如图1、图2、图3、图4所示。这些引擎均为软件功能模块,其具体的实现方式可以有很多种。本领域技术人员在了解本发明思路及各模块的功能描述之后,完全可以根据其掌握的基本技能实现各功能模块的编程与运行,不存在无法理解或无法再现的可能性。
[0051] 负责入库文件产生功能的引擎,具体处理流程如图1所示,包括如下步骤:
[0052] 步骤1-1:Mysql中创建审计表用以存储审计记录。
[0053] MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言一结构化查询语言(SQL)进行数据库管理。
[0054] 本发明采用Mysql数据库存储审计记录,对应的审计记录表包含唯一标识审计记录的ID,并为各种检索特性建立相应字段,这类字段包括但不限于登录用户名、客户端IP、服务端IP、访问时间以及SQL语句。还可以包括被访问的数据库名、被访问的表、被访问的字段、SQL操作类型等等。
[0055] 步骤1-2:打开新的入库文件用以保存审计记录。
[0056] 审计记录首先被写入文件中,这类文件被称为入库文件,当入库文件包含的审计记录数达到某一设定门限、或存在周期超过某一设定时间门限时,将被移动到入库目录,并打开新的入库文件。
[0057] 步骤1-3:协议解析模块产生新的审计记录。
[0058] 通过捕获网络流量并进行协议解析,对应用层SQL语句进行还原并形成审计记录,每条审计记录都有系统内唯一标识的ID,后来的审计记录ID总是比更早的审计记录的ID大。
[0059] 步骤1-4:把审计记录写到入库文件中。
[0060] 步骤1-5:判断入库文件中的审计记录数是否达到一定数量,或者处于打开状态是否达到一定时间。
[0061] 如果入库文件中审计记录数达到一定数量,或者入库文件处于打开状态已经达到一定时间,则关闭该入库文件,进入步骤1-6;反之,进入步骤1-3。
[0062] 步骤1-6:移动入库文件到入库目录供入库。
[0063] 步骤1-7:在Mysql中登记该入库文件所包含的审计记录ID范围及入库文件名的对应关系。
[0064] 负责对入库文件入库功能的引擎,具体处理流程如图2所示,包括如下步骤:
[0065] 步骤2-1:监控入库目录。
[0066] 扫描步骤1-6中的入库目录中是否有入库文件存在。
[0067] 步骤2-2:判断是否有入库文件等待入库。
[0068] 如果入库目录中存在文件,则进入步骤2-3;反之,进入步骤2-1。
[0069] 步骤2-3:把入库文件中的审计记录存入Mysql,并删除相应入库文件。
[0070] 把入库目录中的入库文件入库到Mysql数据库中,并删除相应入库文件,完成后进入步骤2-1。
[0071] 负责创建全文索引功能的引擎,具体处理流程如图3所示,包括如下步骤:
[0072] 步骤3-1:使用Sphinx建立和维护各级索引文件,启动全文索引检索服务。
[0073] 为增强建立索引的实时性和高效性,全文索引文件将分成当前索引文件、当前小时索引文件、当天索引文件、包含日期的天索引文件。
[0074] 步骤3-2:判断离上次当前小时索引合并到当天索引的动作是否达到一小时。
[0075] 如果当前时间离上次当前小时索引合并到当天索引的动作已经达到或超过一小时,则进入步骤3-3;反之,进入步骤3-4。
[0076] 步骤3-3:合并当前小时索引到当天索引,并初始化当前小时索引。
[0077] 步骤3-4:判断和上次当天索引演变为日期天索引的动作是否是同一天。
[0078] 如果当前系统日期和上次当天索引演变为日期天索引的动作不是同一天,则进入步骤3-5;反之,进入步骤3-7。
[0079] 步骤3-5:把当天索引改名为包含昨天日期的日期天索引文件,并初始化当天索引。
[0080] 步骤3-6:重启全文索引检索服务,开放当前小时索引、当天索引及所有日期天索引的检索服务。
[0081] 重启全文索引检索服务的目的是为了启动步骤3-5中新产生的包含昨天日期的日期天索引服务,及更新当天索引服务。
[0082] 步骤3-7:判断是否有入库文件登记信息。
[0083] 监控步骤1-7中是否有入库文件登记信息,如有,则进入步骤3-8;反之,进入步骤3-2。
[0084] 步骤3-8:判断登记信息中的入库文件是否已经删除。
[0085] 如果步骤3-7中监控到的登记信息所对应的入库文件已经被删除,根据步骤2-3,该入库文件已经入库完成,需要进一步建立全文索引,进入步骤3-9;反之,进入步骤3-2。
[0086] 步骤3-9:获取入库文件的审计记录ID范围。
[0087] 根据步骤3-8,进一步获取步骤1-7中所记录的已完成入库的审计记录的ID范围,该范围内的审计记录需要进一步建立全文索引。
[0088] 步骤3-10:从Mysql中获取ID范围内的审计记录,并为各检索字段添加前缀。
[0089] 步骤3-9中的ID范围所对应的审计记录,是本次全文索引的数据源;审计记录中可以被用来做检索条件的字段,都将被建立全文索引,可根据这些字段来检索获取审计记录ID;除SQL语句外的其他检索特性,包括但不限于登录用户名、客户端IP、服务端IP,在获取数据源数据时为每一个字段内容加上特殊的前后缀,以极大减少该内容作为一个单词出现在其他字段内容中的概率,以确保全文检索准确性。
[0090] 步骤3-11:使用Sphinx按审计记录ID对所有检索字段建立当前索引。
[0091] 步骤3-12:合并当前索引到当前小时索引,并初始化当前索引。进入步骤3-2。
[0092] 负责执行全文检索功能的引擎(即全文索引引擎),具体处理流程如图4所示,包括如下步骤:
[0093] 步骤4-1:输入检索条件。
[0094] 步骤4-2:为每个检索特性增加自身特性的前缀。
[0095] 步骤4-3:根据选定时间范围决定待检索的全文索引检索服务。
[0096] 步骤4-4:向当前小时索引、当天索引及需要的日期天索引发起检索请求。
[0097] 步骤4-5:获取符合条件的审计记录ID集。
[0098] 步骤4-6:在Mysql中根据ID获取审计记录的完整信息。
[0099] 在本发明所述方法中,能够为数据库审计系统极大节省存储空间,极大提升检索效率。
[0100] 以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。