使用行-列数据存储的查询汇总生成的制作方法
【专利摘要】数据存储系统(122)包括列存储(281)和行存储(282)。数据存储系统(122)可以生成查询汇总。数据存储系统(122)确定查询汇总字段,查询汇总字段包括来自用于在行存储(282)中存储数据的模式的字段的子集。数据存储系统(122)针对查询汇总字段中的查询结果搜索列存储(281)或行存储(282)。查询汇总字段从查询汇总字段中的查询结果生成。
【专利说明】使用行-列数据存储的查询汇总生成
【背景技术】
[0001]如果传统关系数据库管理系统(RDBMS)被用于存储大量的数据(这可能会包括数百万或甚至数十亿的条目),则在RDBMS中运行查询是有挑战性的。生成这个数据量的环境是不寻常的,诸如,从许多不同的源连续接收事件的事件管理系统。
[0002]索引可以被创建以改进查询的性能。然而,由于查询可能必须等待索引完成,所以在数据库中每个列的大量数据上索引可能减低查询的性能。此外,由于针对环境的索引的大小需要大量数据存储,所以索引增加数据库所需的存储的数量。此外,因为表格需要被重新索引,所以写操作花费更长的时间。
[0003]此外,由于这种大量的数据,审核查询结果可能变得难以处理。查询可以生数千或甚至数百万的命中(hit)。对于用户来说,解析这种大量的命中通常是困难的。在典型的情况下,前一百个命中被呈现给用户。用户通过图形用户界面(GUI)审核命中,以及然后点击按钮来检索接下来的一百个命中,等等,这是耗时且低效的过程。
【专利附图】
【附图说明】
[0004]在接下来的描述中,参考如下的附图详细地描述实施例。
[0005]图1图示了依据实施例的信息和事件管理系统;
图2图示了依据实施例的数据存储系统;
图3-8图示了依据实施例的方法;以及
图9图示了依据实施例的可以被用于所述方法和系统的计算机系统。
【具体实施方式】
[0006]为了简单和图示说明的目的,实施例的原理通过主要参考其示例而描述。在接下来的描述中,众多特定的细节被阐述以提供对实施例的彻底理解。显然的是:实施例可以在不限制到全部特定细节的情形下被实施。此外,实施例可以采用各种组合一起被使用。
[0007]依据实施例,混合数据存储系统在列和行数据存储二者中存储数据。所述系统选择列或行数据存储来依赖于各种参数执行查询,这可以改进运行查询的速度。数据存储系统可操作以优化查询,所述查询对使用列和行数据存储而存储在数据存储系统中的大量数据执行。例如,除了确定查询的命中之外,所述数据存储系统还生成命中的查询汇总。所述命中是来自运行查询的搜索结果。查询汇总包括在数据存储系统中存储数据的字段的子集。所述字段的子集被称为查询汇总字段。所述查询汇总可以包括针对所述子集中每个字段的柱状图。所述柱状图可以包括针对每个查询汇总字段的聚集计数。所述查询汇总允许用户快速识别查询结果的最相关数据。此外,所述数据存储系统允许在所述查询汇总中对信息向下钻取(drill-down)。
[0008]数据存储系统还执行优化,该优化可以允许所述查询汇总被存储在存储器中。例如,查询汇总可能过大而无法存储在存储器中,因此,数据存储系统执行优化来减小查询汇总中的数据量,但保留可能与所述用户最相关的数据。通过优化查询汇总以供在存储器中存储,向下钻取可以被更快地执行。在此描述的优化技术为大量数据提供了缩放查询汇总和向下钻取的方法。
[0009]数据存储系统还生成全局汇总。全局汇总针对在预定的时间周期内接收的全部数据而生成。相对于来自可用于查询汇总字段的模式的较少数量的字段,所述全局汇总可以包括存储模式中的全部或大部分的字段。通过示例和非限制的方式,全局汇总可以针对每个5分钟时段的数据而生成。当新的数据被存储时,旧数据可以出于规章遵从的原因或者为新的数据创建空间而被移除。全局汇总提供可缩放的方法用以维护所删除数据的信息。此外,时段全局汇总能够被用于优化在大的时间范围内执行的查询。例如,所述全局汇总能够被用于快速确定具有查询的命中的窄时间范围,而不是搜索整个时间范围。
[0010]在数据存储系统中存储的数据的类型的示例是事件数据。事件是在数据存储系统收集和存储的数据的实例。所述事件可以关联于或描述被执行的活动或动作。通常,事件被生成一次,并且以后不改变。事件数据包括一个或多个事件。事件数据可以包括日志数据,该日志数据可以由各种源(包括设备和应用)生成并且可以采用任何格式。例如,事件可以是日志文件中的条目、系统日志服务器中的条目、警告、警报、网络数据包、电子邮件、通知等。
[0011]事件数据可以被相关和分析以识别网络安全威胁。安全事件是一种类型的事件,并且是能够被分析以确定其是否与安全威胁相关联的任何活动。所述活动可以与用户(也被称为行动者)相关联,以识别安全威胁和所述安全威胁的原因。活动可以包括:登陆、退出、通过网络发送数据、发送电子邮件、访问应用、读取或写入数据等。安全威胁包括被确定为指示可疑或不当行为的活动,其可以被通过网络或在连接到网络的系统上执行。例如,通常的安全威胁是用户尝试通过网络获得对保密信息(诸如,社会安全号码、信用卡号码等)的未授权访问。
[0012]事件的数据源可以包括:网络设备、应用、或下面描述的其它类型的数据源,其可操作来提供可用于识别网络安全威胁的事件数据。事件数据是描述事件的数据。事件数据可在由数据源生成的日志或消息中捕获。例如,侵入检测系统(IDS)、侵入防御系统(IPS)、漏洞评估工具、防火墙、防病毒工具、反垃圾邮件工具和加密工具可以生成描述由所述源执行的活动的日志。例如,事件数据可以由日志文件或系统日志服务器中的条目、警告、警报、网络数据包、电子邮件或通知页面提供。
[0013]事件数据可以包括关于生成事件的设备或应用的信息。事件源是网络端点标识符(例如,IP地址或媒体访问控制(MAC)地址)和/或对所述源的描述,可能包括关于产品的供应商和版本的信息。时间属性、源信息和其它信息被用于把事件与用户相关,并针对安全威胁分析事件。
[0014]图1图示依据实施例的包括安全信息和事件管理系统(SIEM) 110的环境100。所述SIEM 110处理事件数据,其可以包括实时事件处理。SIEM 110可以处理所述事件数据来确定网络相关的条件,诸如,网络完全威胁。此外,例如,SIEM 110被描述为安全信息和事件管理系统。如上面所指出的,系统110是信息和事件管理系统,并且作为示例,它可以执行与网络安全相关的事件数据处理。它可操作来针对不与网络安全相关的事件执行事件数据处理。所述环境100包括为事件生成事件数据的数据源101,所述事件由SIEM 110收集并被存储在数据存储111中。数据存储111可以包括数据库或其它类型的数据存储系统。数据存储111可以包括用于执行存储器中处理的存储器和/或用于数据库存储和操作的非易失性存储。数据存储111存储由SIEM 110使用以相关和分析事件数据的任何数据。
[0015]数据源101可以包括网络设备、应用、其它类型的数据源,其可操作来提供可被分析的事件数据。事件数据可在由数据源101生成的日志或消息中被捕获。例如,侵入检测系统(IDS)、侵入防御系统(IPS)、漏洞评估工具、防火墙、防病毒工具、反垃圾邮件工具、力口密工具和商业应用可以生成描述由数据源执行的活动的日志。事件数据被从所述日志中检索并被存储在数据存储111中。例如,事件数据可以由日志文件或系统日志服务器中的条目、警告、警报、网络数据包、电子邮件或通知页面提供。数据源101可以把消息发送到包括事件数据的SIEM 110。
[0016]事件数据可以包括关于生成所述事件的源的信息和描述所述事件的信息。例如,事件数据可以标识作为用户登录或信用卡交易的事件。事件数据中的其它信息可以包括所述事件何时被从所述事件源接收(“接收时间”)。所述接收时间可以是日期/时间戳。事件数据可以描述所述源,诸如,事件源是网络端点标识符(例如,IP地址或媒体访问控制(MAC)地址)和/或对所述源的描述,可能包括关于产品供应商和版本的信息。然后,数据/时间戳、源信息和其它信息可以被用于由事件处理引擎121执行的相关。事件数据可以包括事件的元数据,诸如,它何时发生、它在哪发生、所涉及的用户等。
[0017]数据源101的示例在图1中被示为:数据库(DB)、UNIX、Appl (应用I)和App2(应用2)。DB和UNIX是包括网络设备(诸如,服务器)并生成事件数据的系统。Appl和App2是生成事件数据的应用。Appl和App2可以是商业应用(诸如,信用卡和股票交易的金融应用)、IT应用、人力资源应用、或任何其它类型的应用。
[0018]数据源101的其它示例可以包括:安全检测和代理系统、访问和策略控制、核心服务日志和日志整合器(consolidator)、网络硬件、加密设备、和物理安全。安全检测和代理系统的示例包括:IDS、IPS、多用途安全设备、漏洞评估和管理、防病毒、蜜罐(honeypot)、威胁响应技术、和网络监控。访问和策略控制系统的示例包括:访问和身份标识管理、虚拟专用网络(VPN)、高速缓存引擎、防火墙、和安全策略管理。核心服务日志和日志整合器的示例包括:操作系统日志、数据库审计日志、应用日志、日志整合器、网络(web)服务器日志、和管理控制台。网络设备的示例包括:路由器和交换机。加密设备的示例包括:数据安全和完整性。物理安全系统的示例包括:卡键读取器、生物计量技术、防盗警报器、和火灾警报器。其它的数据源可以包括与网络安全不相关的数据源。
[0019]连接器102可以包括代码,该代码包括把事件数据从数据源提供到SIEM 110的机器可读指令。连接器102可以提供来自一个或多个数据源101的高效、实时(或接近实时)的局部事件数据捕获和滤波。例如,连接器102从事件日志或消息收集事件数据。事件数据的收集被示出为“EVENTS (事件)”,其描述来自数据资源101、被发送到SIEM 110的事件数据。连接器可以不被用于全部的数据源101。事件过程延长器123可以为从数据源检索数据提供接口。
[0020]SIEM 110收集和分析事件数据。事件可以与规则交叉相关,以创建元事件。例如,相关包括:发现事件之间的关系、推断那些关系的意义(例如,通过生成元事件)、把事件和元数据按优先顺序排列、以及提供框架以采取动作。系统(其一个实施例表示为由计算机硬件(诸如处理器)执行的机器可读指令)实现对活动的聚集、相关、检测和调查跟踪。所述系统还支持:响应管理、即席(ad-hoc)查询解析、取证分析的报告和重放、以及网络威胁和活动的图形可视化。
[0021]SIEM 110可以包括执行在此描述的功能的模块。模块可以包括硬件和/或机器可读指令。例如,所述模块可以包括事件处理引擎121、数据存储系统122、和用户接口 123。事件处理引擎121依据可以在数据存储111中存储的规则和指令处理事件。例如,事件处理引擎121依照规则、指令和/或请求把事件相关。例如,规则指示:相同用户同时或在短的时间周期内在不同机器上执行的多次失败登陆将给系统管理员生成警告。另一个规则可以指示:相同用户在相同的小时内但从不同国家或城市进行的两次信用卡交易是潜在的欺诈表示。当应用所述规则时,事件处理引擎121可以提供时间、位置和多个事件之间的用户相关性。
[0022]用户接口 123可以被用于把关于事件和事件处理的报告或通知传送或显示给用户。用户接口 123可以被用于接收查询并把查询结果提供给用户。用户接口 123可以包括基于网络的⑶I。
[0023]数据存储系统122是混合列-行存储系统,如相对于图2进一步详细描述的。数据存储系统122存储事件,事件可以包括从数据源101接收的安全事件(有时被称为“日志数据”)。事件可以采用压缩的形式存储。然而,数据存储系统122能够根据需要检索这些事件,并且针对取证质量的数据把它们恢复到其最初的、未修改的形式。
[0024]数据存储系统122可以针对极高的事件吞吐量而被优化。数据存储系统122能够存储可以以高速率且大量被接收的事件。例如,包含300-500字段的事件可以以每秒10000-30000的速率被接收。数据存储系统122在包含百万兆字节数据的混合列-行存储系统中存储事件。数据存储系统122可以运行对事件的查询。数据存储系统122能够通过下面描述的查询汇总和优化技术来优化所述查询并且改进所述查询的执行时间。
[0025]数据存储111可以包括能够被包括在数据存储系统122中的数据库或其它类型的数据存储系统。例如可以被存储在数据存储111中的数据库表格、数据文件表格、以及数据文件可以是数据存储系统122的一部分,或由数据存储系统122管理。
[0026]图2图示了数据存储系统122。数据存储系统122可以被提供在SIEM 100中或在SIEM 100的外部。此外,数据存储系统122可以被用在不同于所述SIEM 100的系统中或与该系统一起被使用。
[0027]数据存储系统122接收可以包括数据块(data chunk)(如下面进一步描述的)的事件数据,并且存储事件数据,使得它可以被查询。数据存储系统122包括:控制系统270、数据文件表格275、块表格280、和数据文件285。控制系统270被通信地耦合到所述数据文件表格275、块表格280、和数据文件285。控制系统270控制用于存储事件和运行查询的操作。例如,控制系统270包括存储引擎271和查询引擎272,存储引擎271存储事件数据,包括管理和存储块,查询引擎272运行查询、生成查询汇总和全局汇总、执行查询优化、以及执行向下钻取。图2示出了接收事件数据(例如,块)250的控制系统270。事件数据250可以包括来自图1的事件。存储引擎271在如下所述的行存储282和列存储281中存储事件数据250。图2还示出了接收查询和向下钻取请求291的控制系统270。存储引擎271可以生成所述查询的搜索结果、向下钻取、查询汇总和全局汇总(示作290)。
[0028]事件数据可以包括时间属性,时间属性包括:管理器接收时间(MRT)和事件发生时间(ET)。MRT是事件由数据存储系统122接收的时间,以及ET是事件发生了的时间。ERT和MRT是事件模式中的字段。ERT或MET可以被用于查询,以把搜索结果限制到期望的时间范围。全局汇总的时段也可以基于ERT或MET。ERT或MET也可以被用于识别满足查询的块。
[0029]数据文件表格275存储关于数据文件285的信息。在一个实施例中,数据文件表格275中的每个条目表示已为其分配空间的数据文件285中的一个数据文件,并且所述条目包括与数据文件和数据文件的位置(例如,文件系统、其中的路径、和文件名称)相关联的唯一标识符。
[0030]事件数据可以被存储在块中。例如,事件数据被分割成块,并且所述块中的数据被存储在数据存储系统122中。例如,事件被解析成它们的字段值,并且所述字段值和接收时间可以被存储在缓冲器中。在某个时间点,根据缓冲器中的内容生成块。不同的块可以具有不同的大小。由于例如块中存储的字段值的类型以及导致所述块被生成的触发器的类型,块的大小可以不同。在一个实施例中,可以指定最大块的大小。每个块可以包括元数据,元数据包括块标识符(ChunkID)、带标识符(StripeID)、和一组索引位置标识符(IndexLocationID)。ChunkID相对于其它块唯一标识所述块。StripeID(其在一组块中被共享)被用于把块彼此相关联(因为,一组块可以涉及相同的事件组)。IndexLocationID的组包括块中每个字段值的一个IndexLocationID。IndexLocationID用于访问对应于相同事件的不同块中的字段值。IndexLocationID可以包括StripeID和偏移标识符(OffsetID)。OffsetID指示块内的哪个字段值对应于期望的事件。块可以被压缩。在事件数据在数据存储系统处被接收之前,其可以被分割成块。
[0031]块表280存储关于在数据文件285中接收和存储的一个或多个块250的信息。对于每个块250,这个信息可以包括块的元数据,元数据可以包括时间属性、以及关于块中的数据和块的位置的其它信息(例如,与存储块的数据文件相关联的唯一标识符以及所述块在数据文件内被存储的位置(例如,作为偏移))。
[0032]每个数据文件285存储可以包括多个块的事件数据。数据文件285可以是相同的大小或不同的大小,并且可以按时间顺序被组织。数据文件285可以被存储在硬盘上的文件系统中。
[0033]数据存储系统122可以在基于行的存储和基于列的存储中存储数据。基于行的存储被示出为行存储282,以及所述基于列的存储被示出为列存储281。如果不同的事件包括相同字段,则所述事件能够被以表格组织。所述表格的每个行表示不同的事件,以及所述表格的每个列表示不同的字段。
[0034]在基于行的存储中,数据存储是面向记录(行)的。记录的属性(字段值)在存储中连续地放置。在这个体系结构中,单个磁盘写入足以把单个记录的全部字段推出到磁盘。因此,高性能的写入被实现,并且具有行存储体系结构的数据库管理系统(DBMS)被称为写入优化系统(WOS)。
[0035]在基于列的存储中,数据存储是面向字段(列)的。在一个列中被存储的值(横跨多个记录)在存储中被连续地放置。在这个体系结构中,DBMS仅需要读取为处理给定查询所需的那些列的值,并且能够避免把不相关的字段值(属性)加载到存储器中。因此,高性能的即席查询被实现,并且具有列存储体系结构的DBMS被称为读取优化系统(R0S)。[0036]块包含一个或多个事件。因为事件可以被认为是表格的行,所以块可以被认为包含表格的一个或多个行。换言之,块可以被认为遵从行存储体系结构。例如,事件被连接在一起,一个事件接着另一个事件,从而被输入到(基于行的)块中。尽管块是基于行的,但也可以生成基于列的块。例如,构建块的不同方式是把事件表格的每个列存储为不同的(基于列的)块。每个基于列的块表示事件表格中的列(即,多个事件中的相同字段的一组值)。取代把表格表示为包含全部行(事件)的一个大的基于行的块,表格表示多个基于列的块(表格的每个列一个)。
[0037]控制系统270在行存储282和列存储281 二者中存储相同的事件数据。因此,每个事件可以被存储两次。例如,对于相同的事件,表示行的块和表示列的块分别存储在基于行的表格中和基于列的表格中。所述表格可以存储在数据文件285中。
[0038]基于行的块的生成和存储、以及基于列的块的生成和存储可以不被作为相同交易的一部分而被执行。如果事件正在以非常高的速率被接收,则基于列的块的生成和存储(“索引”)可能落后于基于行的块的生成和存储。没有数据由于索引的成本(例如,时间成本)而被删除或延迟。要注意的是:即使所述索引落后于基于行的块的生成和存储,但所述用户仍然能够使用基于行的块查询全部事件数据。
[0039]此外,基于行的块和基于列的块可以与不同的保留策略相关联。例如,存储一组事件的基于行的块可以与第一保留策略相关联,以及存储相同的事件组的基于列的块可以与第二保留策略相关联(或多个保留策略,如上所述的)。只要基于行的块存在,基于列的块就可以被再创建(如果必要)。同样地,只要基于列的块存在,基于行的块就可以被再创建(如果必要)。通常,在多个基于列的块中存储一组事件比在一个基于行的块中需要较少的空间。因此,(例如,对于相同的事件组),依据保留策略的一个示例,基于列的块比基于行的块存储得更久。
[0040]此外,对于事件的基于列的存储,全部的列可以不被存储。考虑使用基于行的块存储的一组事件。代替把事件的全部的列存储为基于列的块,仅所选择的列可以采用这种方式存储。因为基于列的块查询更快,所以,在一个示例中,最频繁被查询的列被存储为基于列的块。要注意的是,尽管剩余的列不被存储为基于列的块,但因为基于行的块包括全部事件数据,所以其字段值仍然能够通过使用基于行的块来查询。
[0041]在另一个示例中,优化对存储为基于行的块的事件的查询的一种方式是:为最频繁被查询的事件字段创建基于列的块。创建这些基于列的块可以在事件存储过程中的任何点处发生。存储对策(诸如,是否把事件存储为基于行和/或基于列的体系结构)、保留策略(哪些字段用于基于列的存储)可以由用户或另一个系统来选择,并可以在任何时间被改变。
[0042]控制系统270可以接收例如由用户生成的查询,并且所述查询引擎272生成查询汇总,并且还可以生成查询的完整搜索结果。查询汇总提供对查询汇总字段的搜索结果的聚集计数。计数包括每个查询汇总字段的完整搜索结果中的字段值的计数。所述计数可以按查询汇总字段布置。如上面所指出的,查询汇总字段可以包括:比用于存储数据的字段总数少的字段子集。例如,事件模式可以包括300-500个描述事件数据的字段。例如,查询汇总可以包括10-20个来自所述模式的字段。查询引擎272还提供了向下钻取的能力,其允许用户在计数上向下钻取,以精化所述搜索并收集更多关于数据的信息。[0043]在一个示例中,查询汇总包括查询汇总字段的柱状图(例如,排名前十的字段值)。例如,对于源设备字段,所述柱状图包括生成与所述查询匹配的事件的排名前十的源设备。查询汇总还可以指示每个源设备的命中百分比,例如,源设备A产生50%的命中。为了向下钻取,用户可以点击柱状图中的源设备A,并且查询引擎272提供由源设备A生成的命中的列表。
[0044]图3图示了使用数据存储系统122的混合数据存储生成查询汇总的方法300。方法300以及在此描述的其它方法的步骤可以由数据存储系统122和所述数据存储系统122的组件(图2中示出)执行。在301,查询引擎272接收查询。在302,查询引擎272确定查询汇总字段。查询汇总字段可以从存储中预先确定和检索、或可以由用户选择、或可以由计算机化的过程选择。在303,查询引擎272确定全部的查询汇总字段是否被存储在所述列存储281中。如果是,则在304,查询引擎272搜索列存储281来生成查询汇总。如果全部的查询汇总字段被存储在列存储281中,则在304可以不使用行存储282。如果至少一个查询汇总字段未被存储在列存储281中,则在305查询引擎272搜索行存储282来生成查询汇总。在305,可以不使用列存储281,并且所述搜索可以仅在行存储282上执行。在306,查询引擎271根据如在303-305所确定的对行存储282或列存储281的搜索来生成查询汇总。例如,在306,查询引擎272运行对所选择的存储的查询,并且确定对查询汇总字段的命中计数,从而生成查询汇总字段的柱状图。例如,如果查询汇总字段是源设备,则在完整的查询搜索结果中,生成每个源设备的计数。为了确定每个源设备的计数,每当查询搜索结果中的事件包括特定源设备时,针对特定源设备的计数被递增。这些计数可以在查询汇总中被提供。此外,计数可以被聚集以节约存储器的空间(如下面详细描述的)。
[0045]查询汇总可以生成并显示在⑶I上。也可以显示完整的查询搜索结果。在着眼于一小组的列的情形下,列存储281的查询可以更快,但在着眼于大量的列的情形下,行存储282的查询可以更快。此外,查询汇总可以被存储在存储器中。如下面进一步详细描述的,数据存储系统122可以优化所述查询汇总,使得它适合于能够允许更快的向下钻取的存储器中。
[0046]图4图示了用于优化向下钻取的方法400。例如,在401,查询引擎271为所接收的查询生成查询汇总。查询汇总可以如上面在方法300中描述的那样被生成。查询汇总被显示给用户。在402,控制系统270接收向下钻取请求,该向下钻取请求针对向下钻取标识查询汇总字段。向下钻取请求可以由用户经由用户接口选择查询汇总字段来生成。在403,控制系统270确定向下钻取请求中的查询汇总字段是否在列存储281中。数据文件表格275存储指示存储在列存储281中的字段的数据。数据文件表格275可以存储其它信息,诸如,事件模式中的事件字段的列表、所发现的字段的列表、以及查询汇总字段的列表。控制系统270可以访问数据文件表格,以确定所述查询汇总字段是否在列存储281中。
[0047]在404,如果向下钻取请求中的查询汇总字段在列存储281中,则查询引擎272搜索列存储281以检索与针对查询汇总字段的查询相匹配的事件。所检索的事件可以显示给用户。
[0048]如果向下钻取请求中的查询汇总字段不在列存储281中,则在405,控制系统270确定向下钻取请求中的查询汇总字段是否是事件模式中的预定字段。例如,所述事件模式包括预定字段,预定字段可以是300-500个字段。被存储引擎271确定为与事件模式中的任何字段都不匹配的事件数据可以被存储在发现的字段中。例如,当事件被生成时,存储引擎271接收如下数据,该数据为源设备指示空闲的存储器(例如,可用存储器容量)。如果在事件模式中没有空闲的存储器字段,则所发现的字段可以被创建并被称为空闲存储器。所发现的字段可以被存储在行存储282中。
[0049]如果向下钻取请求中的查询汇总字段在事件模式中,则在406,查询引擎272搜索行存储282,以检索与针对查询汇总字段的查询相匹配的事件。检索到的事件可以被显示给用户。
[0050]如果向下钻取请求中的查询汇总字段不在事件模式中(例如是发现的字段),则在407,查询引擎272使用与所发现的字段相关联的标记(token)搜索行存储282,以检索与针对查询汇总字段的查相询匹配的事件。所检索到的事件可以被显示给用户。因为标记搜索不能够强化标记的位置,所以来自所述标记的搜索结果可能不精确。为了使所述搜索结果更精确,正则表达匹配可以被应用到所述搜索结果中的事件,并且选择适合的事件。要注意的是:正则表达可以被直接应用,而无需使用所述标记,但使用所述标记使向下钻取更快。
[0051]行存储282可以按标记索引,以改进搜索性能。在一个示例中,标记可以包括发现的字段的名称,诸如,空闲存储器。标记可以与字段值相关联。例如,查询汇总指示时间的50%,空闲存储器=1024字节。用户选择空闲存储器=1024字节用于向下钻取。行存储282可以在空闲存储器和1024字节的标记上被索引。在407,查询引擎272使用空闲存储器和1024字节的标记来搜索行存储器282,标记可以在搜索结果中标识与那些标准匹配的全部源设备和事件。
[0052]如上面所指示的,查询汇总可以被优化以减小其大小,使得它可以被存储在存储器中。此外,字段中唯一条目的数量可能太大而无法适应于所述用户接口。例如,查询汇总字段可以是发送字节的数量。对于这个字段,可能有数千个不同的值,因此,全部的值或排名前10%的值可能太大而无法在用户的显示屏幕上适应。依据实施例,通过引入层次结构和/或抑制条目而减小字段基数。例如,不同的字段值可以被组合到存储段中,并且可以确定所述存储段的聚集计数。
[0053]图5图示了减小字段基数的方法500。在501,控制系统270识别字段。例如,所述字段是查询汇总字段。在502,控制系统270确定所述字段的值是否可以被聚集到存储段中(即,存储段化)。例如,数字值可以被存储段化,但空闲的文本字段不可以被存储段化。如果字段值可以被聚集到类别中,则所述值可以被存储段化。
[0054]在503,如果字段值可以被存储段化,则控制系统270确定所述字段值的存储段。例如,数字字段值的存储段可以是:数十,数百,数千等。例如,对于一亿个事件中的字节字段的数量,存在一百万个值。控制系统270可以首先尝试创建数十的存储段,诸如,0,10,20,30等。每个字段值被放入到存储段中。例如,0-9字节被放入到存储段O中,10-19字节被放入到存储段10中,等等。如果存在太多的存储段(这可以通过与预定最大数量的存储段阈值相比较来确定),则存储段的大小可以被增加到数百,然后数千等。存储段阈值可以基于存储器的大小和/或能够在单个显示器中示出的值的最大数量而确定。相似地,日期和时间字段、以及地址字段被存储段化。例如,对于地址,控制系统270可以持续增加子网掩码来创建存储段。
[0055]在一些实例中,如果字段值被放入统一存储段中,则所述存储段变得偏斜。为了使偏斜最小化,对数刻度被创建并且控制系统270持续增加所述对数的底,以及把事件放入那些存储段中。
[0056]在504,存储段的计数被确定。所述计数可以是存储段中值的数量。每个存储段计数被认为是聚集计数。
[0057]在505,如果所述字段值不能够被存储段化,则所述字段的近似计数被确定。例如,事件的名称是空闲文本字段,并且这个字段中的字符串不能够被聚集。例如,即使少量的字符是相同的,但因为名称不可以被相关,所以名称仍然不能够被存储段化。
[0058]控制系统270可以为预定数量的条目(例如,1000个条目)保持近似的计数,而不是保持精确的计数。例如,字段的1000个不同字段值以排列的顺序(诸如,从最大值到最小值)被保持。与查询匹配的事件可以包括:不在1000个排列的字段值中的字段中的新的字段值。假设这个新的字段不在1000个字段值的柱状图中,具有最小数量(例如,最小计数)的条目的字段值被从所述柱状图中丢弃,并且新的字段值被添加到所述柱状图。如果新的字段值之前未被丢弃,则所述新的字段值的计数是I。然而,如果字段值之前被丢弃,则所述新的字段值的计数被设置在所丢弃的值的计数加I。为了确定字段值之前是否被丢弃,每个字段值的布隆(bloom)过滤器可以被保持。所述布隆过滤器存储少量的数据,该数据被用于确定字段值之前是否被接收。使用这个数据,布隆过滤器可以用相当高程度的确定性来指示所述字段值是否之前被接收和丢弃。
[0059]在506,查询引擎272采用每个存储段的计数、或所述字段的近似计数来生成查询汇总。针对每个查询汇总 字段,方法500可以被重复。
[0060]在不弄乱用户视图的情形下,示出全部查询汇总字段可能是不可能的。为了充分利用屏幕上的空间,所述查询汇总字段可以依据所述字段提供的信息以优先顺序排列。优先级可以确定什么查询汇总字段被首先示出。
[0061]图6图示了确定如何以优先顺序排列查询汇总字段的方法600。在601,控制系统270确定查询汇总字段是否过多而无法示出给用户。最大字段的阈值数量可以被预先确定。如果超过所述阈值,则存在过多的字段。如果是,则在602,控制系统270确定每个字段在所述查询结果中的频率。在603,控制系统270确定每个字段如何偏斜。偏斜由依据信息理论的熵来测量。熵是与随机变量相关联的不确定性的量度。现在描述熵计算的示例。具有可能值U1,...,xn}的离散随机变量X的熵H可以被表示为:H(X) = S(I(X))0这里的E是期望值,并且I是X的信息内容。I⑴本身是随机变量。如
果P表示X的概率质量函数,则熵可以被明确地写为:H(X) = ^=1 i?(Xi)I(Xi)。在604,
依据频率和偏斜(例如,所测量的熵)来以优先顺序排列所述字段。例如,如果源设备正发送数据的90%,则所述源设备字段是高优先级,并且在第一屏幕中被示出。
[0062]控制系统270可以针对相关的字段生成元组。例如,如果源设备X生成查询结果中事件的50%并且目标设备Y占查询结果中事件的50%,则因为大部分的事件包含源设备X和目标设备Y,所以元组被生成以示出所述字段之间的关系。例如,因为包含源设备X的事件的35%也包括目标设备Y,并且因为包含目标设备Y的字段的30%也包括源设备X,所以元组可以包括源设备X=35%,目标设备Y=30%。最频繁的元组经由用户接口以表格或基于树的格式示出给用户。包含每个元组的事件和其子集的数量被示出给用户。这种示出元组而不是单个字段值的方式允许用户识别事件中不同字段之间的相关。
[0063]图7图示了生成元组的方法700。在701,控制系统270在搜索结果中识别高百分比的字段值。例如,控制系统270识别源设备字段具有字段值,例如,源设备=X,其占查询结果中事件的49%以上,并且识别目标设备字段具有字段值,例如,目标设备=Y,其占查询结果中事件的49%以上。阈值百分比可以被用于识别这些高百分比的字段值。在702,控制系统270确定高百分比的字段值之间的相关。所述相关可以包括高百分比的字段值在相同的事件中的指示,以及指示高百分比的字段值在相同字段事件中的时间量的度量。在703,控制系统270根据相关生成元组。例如,元组可以包括(源设备Χ=35%,目标设备Υ=30%)。因为元组包含多个字段的字段值,所以元组是多维的。在704,控制系统生成元组显示。元组显示可以包括元组列表。元组显示可以包括元组树。例如,元组中高百分比的字段值被单独示出。用户可以在高百分比的字段值上向下钻取,来以树的格式显示高百分比的字段值的元组列表。所述树中的元组还可以采用表格格式来显示。
[0064]控制系统270确定预定时间周期(被称为时段)的全局汇总。图8示出了确定全局汇总的方法800。在801,事件在数据存储系统122被接收。在802,控制系统270确定当前时段,并且所述时段中的事件在803被标识。例如,对于每个5分钟的时段,所述时段中的事件的全局汇总被确定。事件的ET或MRT可以被用于确定事件是否在特定的时段中。在804,当前时段中的事件的全局汇总被确定。针对对于下一个5分钟时段重复方法800,等等。因此,全局汇总在每个时段的整个时间上被连续地确定,并被存储在数据存储系统122中。元数据指示时段的时间周期。全局汇总可以包括事件模式中的全部字段或字段子集的汇总。
[0065]此外,时段全局汇总可以被用于优化在大时间范围执行的查询。例如,全局汇总可以被用于快速确定具有针对查询的命中的窄时间范围,而不是搜索整个时间范围。
[0066]图9示出了可以与在此描述的实施例一起使用的计算机系统900。计算机系统900表示包括硬件组件的通用平台,该硬件组件可以在服务器或另一个计算机系统中。计算机系统900可以被用作针对数据存储系统122的平台。计算机系统900可以通过处理器或其它的硬件处理电路来执行在此描述的方法、功能和其它过程。这些方法、功能和其它过程可以被具体化为计算机可读介质上存储的机器可读指令,该计算机可读存储介质可以是非临时性的,诸如,硬件存储设备(例如,RAM (随机存取存储器)、ROM (只读存储器)、EPROM (可擦除可编程ROM)、EEPROM (电可擦除可编程ROM)、硬盘驱动器和闪存)。
[0067]计算机系统900包括可以实现或执行机器可读指令的处理器902,所述指令执行在此描述的方法、功能和其它过程中的一些或全部。来自处理器902的命令和数据通过通信总线909来传送。计算机系统900还包括:针对处理器902的机器可读指令和数据可以在运行时间期间驻留其中的主存储器906 (诸如,随机存取存储器(RAM)),以及第二数据存储908,其可以是非易失性的并且存储机器可读指令和数据。所述存储器和数据存储是计算机可读介质的示例。
[0068]计算机系统900可以包括I/O设备910,诸如,键盘、鼠标、显示器等。计算机系统900可以包括连接到网络的网络接口 912。其它已知的电子组件可以在计算机系统900中被添加或替代。此外,数据存储系统122可以在分布计算环境(诸如,云系统)中实现。
[0069]尽管所述实施例已被参考示例来描述,但在不背离请求保护的实施例的范围的情形下,对于所描述实施例的各种修改可以被做出。
【权利要求】
1.一种根据数据存储系统中的列存储和行存储中存储的数据生成查询汇总的方法,所述方法包括: 接收查询(301); 确定查询汇总字段(302),所述查询汇总字段包括来自用于在行存储中存储数据的模式的字段的子集; 确定全部的查询汇总字段是否被存储在列存储中(303); 如果全部的查询汇总字段被存储在列存储中,则针对查询汇总字段中的查询结果搜索列存储(304); 如果查询汇总字段中的一个未被存储在列存储中,则针对查询汇总字段中的查询结果搜索行存储而不是列存储(305);以及 由处理器根据查询汇总字段中的查询结果生成查询汇总(306)。
2.如权利要求1所述的方法,其中,根据查询汇总字段中的查询结果生成查询汇总包括: 确定每个查询汇总 字段中的字段值的计数;以及 在所述查询汇总中提供所述计数。
3.如权利要求1所述的方法,其中,根据查询汇总字段中的查询结果生成查询汇总包括: 由所述处理器把查询汇总字段的字段值存储段化成为存储段(503); 确定所述存储段中字段值的聚集计数(504);以及 在查询汇总中提供所述聚集计数(505 )。
4.如权利要求1所述的方法,其中,把查询汇总字段的字段值存储段化成为存储段包括:如果取得统一的存储段,则通过增加对数刻度来确定存储段。
5.如权利要求1所述的方法,其中,根据查询汇总字段中的查询结果生成查询汇总包括: 确定查询汇总字段中字段值的近似计数,其中确定近似计数包括: 确定查询汇总字段的预定数量的字段值; 接收不在所述预定数量的字段值中的字段值; 使用针对查询汇总字段的布隆过滤器确定所接收的字段值是否是之前接收的字段值; 如果所述字段值被确定为之前已被接收,则识别来自预定数量的字段值的、具有最低计数的字段值,丢弃具有最低计数的字段值,把所接收的字段值包括在预定数量的字段值中,以及向所接收的值分配一个等于所述最低计数加I的计数;以及 如果所述字段值被确定之前未被接收,则识别来自预定数量的字段值的、具有最低计数的字段值,丢弃具有最低计数的字段值,把所接收的字段值包括在预定数量的字段值中,并且向所接收值分配等于I的计数。
6.如权利要求1所述的方法,包括: 接收识别针对向下钻取的查询汇总字段的向下钻取请求(401); 确定所述向下钻取请求中的查询汇总字段是否在列存储中(403); 如果向下钻取请求中的查询汇总字段在列存储中,则搜索列存储,以检索与针对查询汇总字段的查询相匹配的数据(404); 如果向下钻取请求中的查询汇总字段不在列存储中,则确定向下钻取请求中的查询汇总字段是否是所述模式中的字段(405); 如果向下钻取请求中的查询汇总字段是所述模式中的字段,则搜索行存储,以检索与针对查询汇总字段的查询相匹配的数据(406);以及 如果向下钻取请求中的查询汇总字段不是所述模式中的字段,则使用与所述查询汇总字段相关联的标记来搜索行存储,以检索与针对查询汇总字段的查询相匹配的数据(407)。
7.如权利要求1所述的方法,其中,确定查询汇总字段包括: 基于在查询汇总字段中命中的偏斜和频率,把查询汇总字段按优先顺序排列;以及 依据查询汇总字段的优先级生成查询汇总。
8.如权利要求1所述的方法,包括: 在查询结果中识别特定字段值(701),所述特定字段值是多于预定数量的次数的查询结果; 确定所述特定字段值之间的相关(702); 基于所述相关生成所述特定字段值的元组(703);以及 生成元组的元组显示,所述元组显示包括:元组的列表、每个元组的基于树的显示,或每个树中元组的表格显示(704 )。
9.如权利要求1所述的方法,包括: 生成时段全局汇总; 如果查询是基于时间的,则使用时段全局汇总来优化所述查询。
10.一种包括机器可读指令的非临时性计算机可读介质(906),当所述指令由处理器(902)执行时,执行从数据存储系统中的列存储和行存储中存储的数据生成查询汇总的方法,所述指令包括如下的指令: 接收查询(301); 确定查询汇总字段(302),所述查询汇总字段包括来自用于在行存储中存储数据的模式的字段的子集; 确定全部的查询汇总字段是否被存储在列存储中(303); 如果全部的查询汇总字段被存储在列存储中,则针对查询汇总字段中的查询结果搜索列存储(304); 如果查询汇总字段中的一个未被存储在列存储中,则针对查询汇总字段中的查询结果搜索行存储而不是列存储(305);以及 根据查询汇总字段中的查询结果生成查询汇总(306)。
11.如权利要求10所述的非临时性计算机可读介质,其中,从查询汇总字段中的查询结果生成查询汇总的指令包括如下指令: 确定每个查询汇总字段中的字段值的计数;以及 在所述查询汇总中提供所述计数。
12.如权利要求10所述的非临时性计算机可读介质,其中,根据查询汇总字段中的查询结果生成查询汇总的指令包括如下指令: 把查询汇总字段的字段值存储段化成为存储段(503);确定所述存储段中字段值的聚集计数(504);以及 在查询汇总中提供所述聚集计数(505 )。
13.如权利要求10所述的非临时性计算机可读介质,其中,把查询汇总字段的字段值存储段化成为存储段的指令包括如下指令:如果取得统一的存储段,则通过增加对数刻度来确定存储段。
14.如权利要求10所述的非临时性计算机可读介质,其中,根据查询汇总字段中的查询结果生成查询汇总的指令包括如下指令: 确定查询汇总字段中字段值的近似计数,其中确定近似计数包括: 确定查询汇总字段的预定数量的字段值; 接收不在所述预定数量的字段值中的字段值; 使用针对查询汇总字段的布隆过滤器确定所接收的字段值是否是之前接收的字段值; 如果所述字段值被确定为之前已被接收,则识别来自预定数量的字段值的、具有最低计数的字段值,丢弃具有最低计数的字段值,把所接收的字段值包括在预定数量的字段值中,以及向所接收的值分配一个等于所述最低计数加I的计数;以及 如果所述字段值被确定之 前未被接收,则识别来自预定数量的字段值的、具有最低计数的字段值,丢弃具有最低计数的字段值,把所接收的字段值包括在预定数量的字段值中,并且向所接收值分配等于I的计数。
15.一种数据存储系统,包括: 处理器(902),用于: 接收查询; 确定查询汇总字段,所述查询汇总字段包括来自用于在行存储中存储数据的模式的字段的子集; 确定全部的查询汇总字段是否被存储在列存储中; 如果全部的查询汇总字段被存储在列存储中,则针对查询汇总字段中的查询结果搜索列存储; 如果查询汇总字段中的一个未被存储在列存储中,则针对查询汇总字段中的查询结果搜索行存储而不是列存储;以及 根据查询汇总字段中的查询结果生成查询汇总;以及 存储器(906 ),用于存储所述查询汇总。
【文档编号】G06F17/30GK103930887SQ201180074933
【公开日】2014年7月16日 申请日期:2011年11月18日 优先权日:2011年11月18日
【发明者】D.达什, W.唐, M.奥拉亚尼, B.W.克利夫兰, 宇津宫正树 申请人:惠普发展公司,有限责任合伙企业