首页> 中国专利> 一种为半结构化数据构建NoSQL数据库索引的方法及装置

一种为半结构化数据构建NoSQL数据库索引的方法及装置

摘要

本申请提供一种为半结构化数据构建NoSQL数据库索引的方法,包括:将半结构化源数据进行预处理;将预处理后的文本段存储至数据表中,数据表包括结构化线索主键和序列值主键的第一组合主键,结构化线索以确定的顺序被分割为若干连续区间,每一区间分配一个特定的键值作为结构化线索主键的键值;对预处理后的文本段建立倒排索引表,倒排索引表包括结构化线索主键和关键字主键的第二组合主键,对应上述各个主键的键值,记录相关的文本段序列标识作为索引值;关键字主键相同,但具有不同的结构化线索主键键值的索引值,在倒排索引表中位于不同的行;以提高数据库索引的查询效率,并便于更新。另外,本申请还提供一种为半结构化数据构建NoSQL数据库索引的装置。

著录项

  • 公开/公告号CN104794123A

    专利类型发明专利

  • 公开/公告日2015-07-22

    原文格式PDF

  • 申请/专利权人 阿里巴巴集团控股有限公司;

    申请/专利号CN201410025080.6

  • 发明设计人 周琦;孙廷韬;蔡华;林豪;

    申请日2014-01-20

  • 分类号G06F17/30(20060101);

  • 代理机构11441 北京市清华源律师事务所;

  • 代理人沈泳;李赞坚

  • 地址 英属开曼群岛大开曼资本大厦一座四层847号邮箱

  • 入库时间 2023-12-18 09:52:52

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-07-27

    授权

    授权

  • 2015-08-19

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20140120

    实质审查的生效

  • 2015-07-22

    公开

    公开

说明书

技术领域

本申请涉及计算机应用技术领域,特别是涉及一种为半结构化数据构建 NoSQL数据库索引的方法及装置。

背景技术

数据库管理系统(database management system)是一种操纵和管理数据库的方 式,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保 证数据库的安全性和完整性。

随着大数据时代的到来,交易和交互数据也随之不断增大。其中,对TB数 据级的处理,已经成为基本配置;而数据类型也由单一性变为多样性,例如: 结构化数据、非结构化数据、半结构化数据等,其中结构化数据通常是指企业 ERP、财务系统等数据信息;非结构化数据是指语音、图像、视频等数据;半结 构化数据是指结构隐含但不严谨的自我描述型数据,如:邮件、HTML、报表、 资源库等数据。

传统的关系型数据库管理系统在面对上述大规模及多样性的数据时,存在 一定的局限性,尤其是对于处理非结构化数据和半结构化数据时显得力不从心。 为此,提出了NoSQL的概念。

NoSQL是指非关系型的数据库,或者称为:非结构化数据存储的数据库。 NoSQL存储中的列式存储(如Hbase,OTS)是基于列的数据库,以方便读写 大数据内容。NoSQL存储模型可以表示为一个表,每个表由很多行组成,每行 又有很多列。表创建时需要指定行的主键列,该主键列通常被用来划分数据, 相邻主键的行通常被组织在一起。对NoSQL数据库进行查询的方式是为其建立 索引。

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速 访问数据库表中的特定信息。因此,可以通过为数据库建立索引查找到所需要 的信息。

倒排索引是NoSQL数据库最常用的数据结构之一,所谓倒排索引(Inverted  index),是根据属性的值来查找记录,在倒排索引表中的每一项都包括一个属 性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由 属性值来确定记录的地址,所以称之为倒排索引。以常用的NoSQL数据库类型 ——文档检索系统为例,如果要为存储在硬盘上的文本文件建立倒排索引,则 所述属性值就是文档中的关键字,倒排索引表中对应每个关键字记录包含该关 键字的文本文件所在的硬盘存储位置,该硬盘存储位置称为索引值。

对上述文档检索系统为例,需要为大量文档建立数据库索引时,可以将文 档和索引存入NoSQL数据库的数据表和倒排索引表中,数据表主键是文档ID, 值是文档内容;倒排索引表主键是关键字,值是包含该关键字的文档列表,通 过倒排索引表的关键字主键可以查找包含该关键字的所有文档的文档ID,使用 这些文档ID,再通过数据表,可以查找到对应的文档内容,通过上述方式,就 可以实现从海量的信息中快速地提取出用户需求的信息,实现为NoSQL数据库 建立索引的目的。

然而,现有基于NoSQL对数据建立的倒排索引,其查询效率很低。原因在 于,用户在根据关键字进行查询时,需要在整个倒排索引表中查找相应关键字, 该查找时间随数据量指数增长,导致查询效率低。

此外,现有的NoSQL数据库索引的更新效率过低。以上述文档检索系统为 例,现有的NoSQL系统中,当增加新文档的数据时,需要先读取原有的倒排索 引表,找出该新文档的关键字在倒排索引表中的位置,然后,再将该新文档的 文档ID对应这些关键字写入倒排索引表;由于需要先读取倒排索引表的内容, 显著降低了数据库索引的更新速度,当数据库很大时,更新速度将达到无法接 收的地步。

综上,由于现有技术中基于NoSQL存储数据构建索引的方式,存在查询效 率和更新效率过低的问题,因此,导致系统吞吐量低,无法处理TB规模文档的 写入与查询。

所以,如何能够构建一种具有更高吞吐能力的NoSQL数据库索引方法,成 为亟待解决的技术问题。

发明内容

本申请提供一种为半结构化数据构建NoSQL数据库索引的方法,所述数 据库索引具有更高的查询效率,以及更便于更新。

本申请同时提供一种为半结构化数据构建NoSQL数据库索引的装置。

为解决上述技术问题,本申请提供一种为半结构化数据构建NoSQL数据库 索引的方法,包括:将半结构化源数据进行预处理,获得若干待存入数据库的 文本段;将所述预处理后的文本段存储至数据表中,所述数据表具有第一组合 主键,每个文本段对应所述第一组合主键存储至相应的记录中;所述第一组合 主键包括结构化线索主键和序列值主键;所述结构化线索主键标识结构化线索, 所述结构化线索以确定的顺序被分割为若干连续区间,每一区间分配一个特定 的键值作为结构化线索主键的键值;所述序列值主键,是为每个文本段赋予唯 一对应所述文本段的序列值;对所述预处理后的文本段建立倒排索引表,所述 倒排索引表的主键为第二组合主键,所述第二组合主键包含结构化线索主键和 关键字主键;所述倒排索引表中,对应上述各个主键的键值,记录相关的文本 段序列标识作为索引值;关键字主键相同,但具有不同的结构化线索主键键值 的索引值,在所述倒排索引表中位于不同的行。

优选地,所述第一组合主键包括数据源主键,所述数据源主键标识文本段的 数据来源;所述第二组合主键同样包含上述数据源主键,具有不同的数据来源 主键键值的索引值,在所述倒排索引表中位于不同的行。

优选地,对这些文本段建立所述数据表和倒排索引表时,一次性读取同一数 据来源的具有相同结构化线索主键键值的所有文本段。

优选地,所述第一组合主键中,所述数据源主键,具体采用文本段的数据源 加上文本段的结构化线索原始值的哈希值;和/或在所述第二组合主键中,所述 数据源主键,具体采用文本段的数据源加上关键字的哈希值。

优选地,所述结构化线索为文本段的源数据生成时间。

优选地,所述结构化线索以确定的顺序被分割为若干连续区间,是将文本段 的源数据生成时间分为若干时间段;所述每一区间分配一个特定的键值作为结 构化线索主键的键值,是以所述时间段的起点、终点、中点或者所述时间段内 的任意一点的时间值作为所述特定的键值,或者为所述时间段确定一个唯一的 标识符号作为所述特定的键值。

优选地,所述序列值以基值加偏移值的方式表示;所述基值与所述结构化线 索主键键值对应,即,相同的结构化线索主键键值对应同一个基值;所述偏移 值以如下方式获得:对应同一个结构化线索主键键值的每个文本段,以所述结 构化线索原始值的顺序为依据,按照顺序赋予相应的偏移值。

优选地,所述倒排索引表中,记录相关文本段标识作为索引值的具体方法是: 为对应同一个数据源主键键值,并且结构化线索主键键值相同的所有文本段, 提供一个基值;同时,为这些文本段提供一个二进制比特数组,所述比特数组 中,以第i位二进制数标识第i个文本段是否包含所在记录的关键字主键中所列 的关键字。

优选地,若对应同一个数据源主键并且具有相同的结构化线索主键的所有文 本段,均包括某个关键字,则在倒排索引表对应所述关键字主键的记录中,其 索引值记录为一个特殊符号,所述特殊符号表示所有文本段均包含所述关键字; 或者,若对应同一个数据源主键并且具有相同的结构化线索主键的少量文本段, 包括某个关键字,则直接记录以整数表示的文本段偏移值。

本申请还提供一种为半结构化数据构建NoSQL数据库索引的装置,包括: 预处理单元,将半结构化源数据进行预处理,获得若干待存入数据库的文本段; 数据表建立单元,用于建立将所述预处理后的文本段存储至数据表中;所述数 据表具有第一组合主键,每个文本段对应所述第一组合主键存储至相应的记录 中;所述第一组合主键包括结构化线索主键和序列值主键;所述结构化线索主 键标识结构化线索,所述结构化线索以确定的顺序被分割为若干连续区间,每 一区间分配一个特定的键值作为结构化线索主键的键值;所述序列值主键,是 为每个文本段赋予唯一对应所述文本段的序列值;倒排索引表建立单元,用于 对所述预处理后的文本段建立倒排索引表;所述倒排索引表的主键为第二组合 主键,所述第二组合主键包含结构化线索主键和关键字主键;所述倒排索引表 中,对应上述各个主键的键值,记录相关的文本段序列标识作为索引值;关键 字主键相同,但具有不同的结构化线索主键键值的索引值,在所述倒排索引表 中位于不同的行。

优选地,所述第一组合主键包括数据源主键,所述数据源主键标识文本段的 数据来源;所述第二组合主键同样包含上述数据源主键,具有不同的数据来源 主键键值的索引值,在所述倒排索引表中位于不同的行。

优选地,对这些文本段建立所述数据表和倒排索引表时,一次性读取同一数 据来源的具有相同结构化线索主键键值的所有文本段。

优选地,所述第一组合主键中,所述数据源主键,具体采用文本段的数据源 加上文本段的结构化线索原始值的哈希值;和/或在所述第二组合主键中,所述 数据源主键,具体采用文本段的数据源加上关键字的哈希值。

优选地,所述结构化线索为文本段的源数据生成时间。

优选地,所述结构化线索以确定的顺序被分割为若干连续区间,是将文本段 的源数据生成时间分为若干时间段;所述每一区间分配一个特定的键值作为结 构化线索主键的键值,是以所述时间段的起点、终点、中点或者所述时间段内 的任意一点的时间值作为所述特定的键值,或者为所述时间段确定一个唯一的 标识符号作为所述特定的键值。

优选地,所述序列值以基值加偏移值的方式表示;所述基值与所述结构化线 索主键键值对应,即,相同的结构化线索主键键值对应同一个基值;所述偏移 值以如下方式获得:对应同一个结构化线索主键键值的每个文本段,以所述结 构化线索原始值的顺序为依据,按照顺序赋予相应的偏移值。

优选地,所述倒排索引表中,记录相关文本段标识作为索引值的具体方法是: 为对应同一个数据源主键键值、并且结构化线索主键键值相同的所有文本段, 提供一个基值;同时,为这些文本段提供一个二进制比特数组,所述比特数组 中,以第i位二进制数标识第i个文本段是否包含所在记录的关键字主键中所列 的关键字。

优选地,若对应同一个数据源主键并且具有相同的结构化线索主键的所有文 本段,均包括某个关键字,则在倒排索引表对应所述关键字主键的记录中,其 索引值记录为一个特殊符号,所述特殊符号表示所有文本段均包含所述关键字; 或者,若对应同一个数据源主键并且具有相同的结构化线索主键的少量文本段, 包括某个关键字,则直接记录以整数表示的文本段偏移值。

与现有技术相比,本申请的特点在于:本申请提供一种为半结构化数据构 建NoSQL数据库索引的方法。该方法首先在对半结构化源数据进行预处理,获 得若干待存入数据库的文本段,以数据源、结构化线索和序列值为主键,将文 本段存储至与主键相对应的行中,形成数据表;然后,以数据源、结构化线索 和关键字为主键,记录相关的文本段序列标识作为索引值。由于倒排索引是对 应数据源、结构化线索和关键字建立,所以,查询时,是将数据源、结构化线 索和关键字相结合,进行查询,因此,查询时仅需解析关键字在该数据源和结 构化线索下,所对应的文本段的序列值即可,使得解析时间与数据源和结构化 线索的某一个键值内的数据量成正比,而与系统内总数据量无关,因此,可以 显著提高查询效率。

另外,本申请的优选实施例中,对文本段建立所述数据表和倒排索引表时, 一次性读取来自同一个数据源并具有相同结构化线索主键键值的所有文本段, 并为它们建立数据表和倒排索引表;在后续为数据源或者结构化线索主键键值 不同的文本段建立数据表和倒排索引表时,不需要再读取原来的倒排索引表, 直接插入新的倒排索引记录即可。因此,使用该优选的方案后,在建立或者更 新NoSQL数据库索引时,无需读取原有的倒排索引表。由于倒排索引表的读操 作比写操作更费时,因此,该方法能够有效提高数据库索引系统的更新效率, 提高整个数据库系统的吞吐量。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述 中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲, 还可以根据这些附图获得其他的附图。

图1为本申请提供的一种半结构化数据基于NoSQL构建索引的方法流程 图;

图2为本申请提供的一种半结构化数据基于NoSQL构建索引装置的结构单 元框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清 楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是 全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其 他实施例,都属于本申请保护的范围。

请参阅图1,其为本申请一种半结构化数据基于NoSQL构建索引的方法第 一实施例流程图。该实施例的应用环境是对具有多个服务器的网站的日志构建 NoSQL数据库索引。对于服务器日志而言,其结构化线索就是日志生成时间。

在本实施例中,包括如下步骤:

步骤S110:将各个服务器产生的包含生成时间和日志源信息的日志文本进 行预处理,获得若干待存入数据库的文本段。

每个服务器均不断处理各种网络业务,对这些网络业务,都需要进行记录, 这些记录称为日志。

以下是一条服务器生成的日志的实例。

上述日志文本来自某个日志源,例如某个账户;该日志还记录了生成该日 志的时间,即[01/Mar/2012:16:12:07+0800]。

这些原始的日志即为源数据。这些源数据记录形式主要是考虑服务器进行 日志记录的需要,不符合NoSQL数据库记录的需要,为此,需要将其处理为符 合需要的键值对形式的记录,该处理过程称为预处理。以下是经过预处理后的 待存入数据库的文本段。

需要说明的是,所述半结构化数据是介于结构化的数据和完全无结构的数 据之间的数据形式,本实施例中的日志就是一种半结构化数据形式;半结构数 据具有至少一个结构化线索,在本实施例中,就是日志生成时间。对于每个数 据源而言,一个具体的时间点上可能产生很多日志;此时,可以根据后续的Index 的序号来区分不同的日志。

步骤S120:将在所述步骤S110中预处理后的文本段,存储至与第一组合主 键相对应的行中,形成数据表;所述第一组合主键包含数据源主键、结构化线 索主键和序列值主键;所述数据源主键标识文本段的数据来源;所述结构化线 索主键标识结构化线索,该结构化线索以确定的顺序被分割为若干连续区间, 每一区间分配一个特定的键值作为结构化线索主键的键值;所述序列值主键, 是为每个文本段赋予唯一对应该文本段的序列值。

本实施例提供的为半结构化数据构建NoSQL数据库索引的方法中,需要建 立两个表格,第一个是用于存储预处理后的文本段的数据表,第二个是倒排索 引表。本步骤即为建立数据表。以下就是该数据表的一个示例。

以下结合上述示例对该数据表进行说明。

建立数据表时,首先需要确定建立数据表的主键。本实施例中,为该数据 表选择的主键需要考虑多方面的因素,其主键为组合主键,为与后续倒排索引 表的组合主键相区别,该组合主键称为第一组合主键。

从上述数据表可以看出,所述第一组合主键中包含三个主键,第一主键为 Hash=哈希(日志源信息+时间),第二主键为Time,即结构化线索主键,在本 实施例中即为时间主键,第三主键为“序号”,即对应文本段的序列值主键。

所述第一主键Hash为每个文本段提供一个对应的ID号码,提供该ID号码 的方式是,将文本段的日志源信息加上时间的哈希值生成该第一主键的键值。 所述日志源信息,在本实施例中即生成该日志的账户;所述时间,即该文本段 的源数据的生成时间(由于文本段已经经过预处理,为了将文本段预处理的时 间和文本段所代表的日志的生成时间区别开,将后者称为文本段的源数据的生 成时间)。每个文本段均具有日志源信息以及生成时间。引入日志源,是为了能 够在一张数据表中支持多个不同的应用,这些应用之间可以共享存储;当进行 查询和存储时通过标示不同的日志源,就能做到数据之间的隔离。通过加入时 间,可以将同一个日志源的日志离散开,使其分布在不同的服务器,获得负载 均衡的效果。同一个日志源在同一时间可能产生很多日志,此时,可以进一步 依靠后续的序列值主键(表中的“序号”)区别,当然,这种情况一般不会出现。 此外,通过考虑源数据生成时间,并经过哈希方式离散后,还能够将来自同一 个账户的日志的记录位置被分散到不同的服务器上,在硬件上获得负载均衡化 的效果。举例来说,若数据分片吞吐量的上线为8M/s,当采用数据源加文本段 产生时间的哈希值作为主键之一,同一数据源不同时间段能够将文本段分发到 不同的数据分片上,若采用8个分片,则吞吐量能达到64M/s,因此,采用数据 源加文本段产生时间对文本段进行划分,能够进一步提升数据库系统的吞吐量。

所述第二主键为时间主键(表中的Time),该主键表征该文本段的结构化线 索。但是,该主键的键值并不是直接使用日志生成时间,而是将日志生成时间 在一个连续时间段内的所有日志源均赋予相同的键值。举例而言,将某日清晨 零点到清晨零点十分产生的日志均以该时间段的起点,即某日清晨零点作为其 键值,采取这样的方式,可以实现对日志记录的批处理化,这一点在后续倒排 索引表建立的过程中予以详细说明。需要说明的是,对日志生成时间分段取键 值的方式显然还可以采用其他方式,关键是能够唯一标识该段日志生成时间。 例如,可以采用这段时间的终点时间,中点时间,乃至这段时间内的任意一点 的时间,也可以为该段时间以某种方式提供一个唯一的标识符号作为该特定的 键值。但无论采用何种方式,在整个处理过程中应当始终保持生成时间键值方 式的一致性,避免赋值混乱。

所述第三主键为对应文本段的序列值主键(表中的“序号”)。该主键标识 该文本段在数据表中的顺序,依据该主键,即可依序查找到文本段在该数据表 中的位置。在本实施例中,所述序列值包含一个对应所述时间段主键键值的基 值(表中表示为Index),对应同一个时间段主键键值的每个文本段,以日志生 成时间的原始值为顺序依据,赋予相应的偏移值。使用上述基质加上偏移值的 方式记录文本段的序列值,相比记录绝对序列值,可大幅节省存储开销。

步骤S130:对所述预处理后的文本段建立倒排索引表,该倒排索引表的主 键为第二组合主键,该第二组合主键包含数据源主键、结构化线索主键和关键 字主键;该倒排索引表中,对应上述各个主键的键值,记录相关的文本段序列 标识作为索引值;关键字主键相同,但具有不同的数据来源或者不同的结构化 线索主键键值的索引值,在该倒排索引表中位于不同的行。

该步骤S130中的倒排索引表是基于步骤S110预处理后的文本段建立,也 不排除基于步骤S120建立的数据表建立;该步骤同样需要采用文本段生成时间 作为结构化线索。以下是一个具体的倒排索引表的示例。

可以看出,该倒排索引表同样使用多个主键组成组合主键。为了与上述数 据表的组合主键相区别,该倒排索引表的组合主键称为第二组合主键。从上述 倒排索引表可以看出,第二组合主键包含的三个主键,分别为第一主键 PartitionId、第二主键TermHash即关键字主键、第三主键Time,即时间主键。

所述第一主键PartitionID=哈希(日志源信息+关键字),该主键的作用相当 于为每一个记录提供一个标识。该标识采用(日志源信息+关键字)的哈希值获 得。引入日志源作为主键,是为了能够在该倒排索引表中支持多个不同的应用, 这些应用之间可以共享存储,当进行查询和存储时,通过标识不同的日志源, 就能做到数据之间的隔离;引入关键字作为主键信息,可以将不同关键字的倒 排索引均匀分布到不同机器上。在不同时间主键键值下,可能出现完全相同的 (日志源信息+关键字),则依赖所述时间主键区分这些完全相同的PartitionID。

所述第二主键TermHash为关键的哈希值,该主键可以作为查找关键字的依 据,是倒排索引表必须具备的主键。

所述第三主键Time即时间主键,为结构化线索主键。该主键的键值取值方 式和上述数据表的时间主键完全相同,其键值并不是直接使用日志生成时间, 而是将日志生成时间在一个连续时间段内的所有日志均赋予相同的键值。并且, 对应于同样一段时间范围,其键值取值和上述数据表的取值应当相同,以便两 个表能够对应使用。

在上述倒排索引表中,对应上述主键记录的索引值分为两列,分别为基准 序号和比特数组。所述基准序号,即对应某个时间主键键值的基值,和上述数 据表的相同时间主键的基值应当相同。所述比特数组,是为具有相同基值的所 有文本段提供一个二进制比特数组,该比特数组中,以第i位二进制数标识第i 个文本段是否包含所在记录的关键字主键中所列的关键字,例如,以第i为1, 标识具有时间主键键值的所有文本段中的第i个文本段包含该记录关键字主键 对应的关键字。这样,通过基值加比特数组,就可以确定该数据源的该时间段 内产生的所有文本段中,哪几个文本段具有该记录对应的关键字。由于对应一 个时间键值的所有文本段的数量一般是有限的,可以以一个一定位数的二进制 数即可完成对所有文本段是否包含某个关键字的记录,节省大量的空间。

对于上述倒排索引表可以进行如下解读。如果需要查找某个日志源在某一 个时间段内,某个关键字出现在哪些文本中。则可以日志源信息和时间信息, 确定其日志源主键和时间主键键值,根据所需查找的关键字,确定关键字主键 键值,这样,就可以根据该倒排索引表查找到对应的基值和比特数组,结合两 者即可获得所需文本段的序列号,根据该序列号即可从与该倒排索引表相配合 的数据表中获得包含该关键字的所有文本段。

为了压缩数索引记录的数据量,在一些特殊情况下,所述索引值中的比特 数组可以以下述方式替代:

当某个关键字在该数据源、该时间段内的所有文本中都存在时,可以为其 设置一个特殊符合,该特殊符号表示所有文本段均包含该关键字。例如,可以 记录为“ALL”;

当某个关键字在该数据源、该时间段内的只有少数文本中存在时,可以直 接记录以整数表示的文本段偏移值;

通过上述两种方法,在关键字在各个文本中的分布极端稠密或者极端稀疏 的情况下,均可以节约存储空间。

通过上述步骤110-130可以获知,由于本实施例通过以日志生成时间和文本 段序列值为主键建立数据表,并建立以日志生成时间和关键字为主键的倒排索 引表,所以,当用户以日志生成产生时间进行查询时,只需要解析相关日志源 和相关时间段的倒排索引表即可,根据倒排索引表所提供的索引结果,在对应 数据表可获得文本段内容,这样,就显著提高了查询效率,也就是说,查询时 仅需要解析关键字所在时间段内的所有文本段,而无需将系统内的所有数据进 行解析。

并且,基于上述数据表和倒排索引表,当需要对后续数据信息建立倒排索 引时,即,根据新增数据对数据库索引进行更新的过程中,始终以时间主键为 线索。具体而言,在倒排索引表中,只需要以数据源、关键字和时间段为主键, 直接插入新的记录即可,不需要读取原有的倒排索引表,这样就节约了读取倒 排索引表的时间,对于数据量较大的倒排索引表而言,读取倒排索引表所需要 的时间比写入的时间更长,因此,该方案可以显著提高更新数据库索引的效率。

如果新增文本段的数据源和产生时间位于某个已经记录的数据源和时间主 键的键值标识的范围内,则根据其中的关键字在该主键的键值标识中进行更新。 如果某个关键字在该时间键值的所有记录范围内已经存在,则更改比特数组中 的相应位即可。如果某个关键字在该数据源和时间键值的所有记录范围内不存 在,则在该时间键值下新增该关键字主键。

如果数据库尚不存在包含该数据源以及时间的键值,则建立对应该时间的 时间键值记录,再根据文本段中的关键字分别记录关键字对应的记录。

以上方法是对数据进行更新的通用方法,显然,和不具有结构化线索的 NoSQL数据库索引相比,该方法只需要对具有相同的时间主键的记录进行读取, 即可更新倒排索引表。而现有技术下要更新倒排索引表需要读取整个倒排索引 表,而读取倒排索引表的时间一般比写入倒排索引表花费的时间更长,并且读 取时间和倒排索引表的数据量正相关;因此,本实施例能够显著降低生成数据 库索引的更新时间。

但在本实施例的应用场合,需要建立数据库索引的是网络服务不断产生的 日志,并且,这些日志在生成后立刻涌向数据库,数据库索引的更新实时进行。 对于这种典型的应用场景,数据库索引一般是一次建立,后续不会出现更新。 对于数据库索引的建立方式,采用如下方式。

首先,对所有产生的日志进行步骤S110的预处理。

其次,将对应同一个数据源并且在一个时间主键键值的时间段范围内的所 有预处理后的文本段一次性读入,并进行步骤S120和步骤S130的处理。例如, 一个时间键值对应的时间段长度为十分钟,某日清晨零点到零点十分的来自账 户A的所有数据全部预处理后,一次性读入,这些文本段均赋予相同的基值, 并按照读入顺序赋予每个文本段偏移值。在建立倒排索引表时,一次性对这些 文本段划分关键字,并建立倒排索引。在倒排索引表中,所有的记录具有相同 的时间键值,其记录的索引值中,具有相同的基值;在比特数组中,则一次性 将含有关键字的文本段置位。通过上述一次性读入一个时间段的所有日志,可 以使建立数据库索引的过程只包括写操作,而完全不用读操作,这样就节省了 大量读取倒排索引表的时间,

为便于说明本申请所提供的一种半结构化数据基于NoSQL构建索引的方法 具体实现过程,结合上述实施例,通过以nginx服务器(10.249.201.117)的日 志为例子说明采用上述建立的倒排索引,实现查询的过程。

根据上述实施例建立的倒排索引表和数据表,用户所要查询的内容譬如为: ip是10.1.168.193的机器报告在时间t访问nginx服务器(10.249.201.117)失败, 要求调查一下原因。

已知信息是日志源,t所属的时间段为t1,需要查询ip为10.1.168.193但status 不是200的日志。先以关键字10.1.168.193查询,得到基准序号为INDEX,倒 排索引为bit_array(0,1)(该符号表示该比特数的0、1位被置位为1),再以关 键字200进行查询,得到基准序号为INDEX,倒排索引为bit_array(0,2),两者 取差集结果基准序号为INDEX,反向索引为bit_array(1)。最后由日志源,时间 段t1,序号INDEX+1,可以获得原始日志,从中发现是SERVER500错误导致 访问失败。

以下对采用比特数组记录索引值的优点进行说明。

上述按照日志源、时间划分主键的数据库索引方法,本身可能存在数据膨 胀的问题,但是,结合比特数组记录索引值的方法,则可以在数据库索引的更 新、查询效率和数据库索引的数据规模方面获得较好的平衡。

具体而言,在建立上述数据库时,将具有相同时间主键键值并且具有相同 日志源的所有文本段视为一个长文档,一次性读入并对其建立索引。这一时间 范围内的所有日志用一个基准序号Index和一个比特数组表示,第i比特位为1 代表第(Index+i)条日志包含关键字。因此,这样记录的倒排索引只有原始日志数 据一半多一点的大小,其具体的效果可以通过以下计算表现:假设我们将N条 原始日志合并为一条建立索引,这N条日志共有T个关键字,平均每个关键字 在其中M条出现,PartitionId,TermHash,Time均为4byte,INDEX为8byte,则:

若取N=300,M=50,则比值为17.4,可见优化后索引大小能下降一两个数 量级。以实际观察的某一日的数据为例,当天处理的原始日志大小为1.16TB, 生成的索引大小为0.69TB,索引日志比为0.59,可见该数据库索引系统能有效 的解决索引大小膨胀的问题。

将多条数据信息合并建立倒排索引不仅能压缩倒排索引大小,提升系统处 理的数据量,而且能够提升系统的吞吐量。原因是:原本对于N条数据信息, 平均每一个关键字出现在M条数据信息中,则每个关键字需要M次读写NoSQL 数据库,将N条数据信息合并成一条整体数据信息建立倒排索引后,则每个关 键字只需插入新的一行,即一次写操作。

比特数组的方法适用于一般情况,若关键字在N条数据信息中出现的很稀 疏或很密集,能够进一步压缩存储空间时,对应稀疏的情况,可以采用前面介 绍的整数数组记录倒排索引信息,数组中每个整数I代表第(Index+I)条数据信息 包含该关键字;若关键字在所有记录中出现,则可以使用ALL标志表示。这些 方法,也都便于降低数据库索引的数据规模。

在上述实施例中,以日志生成时间作为数据库索引的结构化线索,实际上, 也可能存在别的结构化线索,例如,对一个硬盘上的所有文件建立NoSQL数据 库索引,则可以将字母顺序作为结构化线索,将一定字母排序范围的数据集中 记录。

另外,该实施例中将不同的数据源分开记录在不同的位置,在某些情况下, 也不排除所有数据源的记录统一记录,仅仅以所述结构化线索为该数据库索引 提供索引线索。

与前述一种为半结构化数据构建NoSQL数据库索引的方法实施例相对应, 本申请还公开了一种为半结构化数据构建NoSQL数据库索引的装置实施例,请 参看图2,其为本申请一种为半结构化数据构建NoSQL数据库索引的装置实施 例示意图。由于装置实施例基本相似于方法实施例,所建立的数据表以及倒排 索引表也与方法实施例中相同,所以描述得比较简单,相关之处参见方法实施 例的部分说明即可。下述描述的装置实施例仅仅是示意性的。

所述半结构化数据基于NoSQL构建索引的装置包括:

预处理单元201,用于将半结构化原数据进行预处理,获得若干待存入数据 库的文本段;所述预处理可以采用以时间为序列的键值对形式,表示数据信息 内容。

数据表建立单元202,用于建立将所述预处理后的文本段存储至数据表中, 该数据表具有第一组合主键,每个文本段对应该第一组合主键存储至相应的记 录中;所述第一组合主键包括数据源主键、结构化线索主键和序列值主键;所 述数据源主键标识文本段的数据来源;所述结构化线索主键标识结构化线索, 该结构化线索以确定的顺序被分割为若干连续区间,每一区间分配一个特定的 键值作为结构化线索主键的键值;所述序列值主键,是为每个文本段赋予唯一 对应该文本段的序列值。

倒排索引表建立单元203,用于对所述预处理后的文本段建立倒排索引表; 该倒排索引表的主键为第二组合主键,该第二组合主键包含数据源主键、结构 化线索主键和关键字主键;该倒排索引表中,对应上述各个主键的键值,记录 相关的文本段标识作为索引值;关键字主键相同,但具有不同的数据来源或者 不同的结构化线索主键键值的索引值,在该倒排索引表中位于不同的行。

本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领 域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改, 因此本申请的保护范围应当以本申请权利要求所界定的范围为准。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出 接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。 内存是计算机可读介质的示例。

1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由 任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程 序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其 他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存 储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器 (CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁 盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设 备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒 体(transitory media),如调制的数据信号和载波。

2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机 程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件 和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计 算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、 CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号