掌桥专利:专业的专利平台
掌桥专利
首页

索引构建方法及装置

文献发布时间:2023-06-19 13:45:04


索引构建方法及装置

技术领域

本说明书涉及计算机技术领域,特别涉及一种索引构建方法。

背景技术

随着互联网技术的飞速发展,自动驾驶、共享出行、车联网、公共安全等领域,对于移动对象管理的需求日益增长,具体包括对移动对象采集的、具有时空特征的轨迹数据进行实时查询等。但轨迹数据体量大,且包含位置信息等复杂特征,因此导致轨迹数据的查询效率较低,极大地增加了查询操作的时间成本。

发明内容

有鉴于此,本说明书实施例提供了一种索引构建方法。本说明书同时涉及一种索引构建装置,一种计算设备,一种计算机可读存储介质,以及一种计算机程序,以解决现有技术中存在的技术缺陷。

根据本说明书实施例的第一方面,提供了一种索引构建方法,包括:

将接收的轨迹数据划分为至少两个轨迹段数据,根据每个轨迹段数据以及对应的第一属性信息,确定所述每个轨迹段数据的一级索引表以及一级索引值;

基于所述一级索引表以及一级索引值,构建所述每个轨迹段数据的一级索引;

根据每个轨迹段数据的第二属性信息确定二级索引值,基于所述二级索引值确定与所述一级索引关联的二级索引表;

基于所述一级索引以及与所述一级索引关联的二级索引表,构建所述每个轨迹段数据的二级索引。

根据本说明书实施例的第二方面,提供了一种索引构建装置,包括:

第一确定模块,被配置为将接收的轨迹数据划分为至少两个轨迹段数据,根据每个轨迹段数据以及对应的第一属性信息,确定所述每个轨迹段数据的一级索引表以及一级索引值;

第一构建模块,被配置为基于所述一级索引表以及一级索引值,构建所述每个轨迹段数据的一级索引;

第二确定模块,被配置为根据每个轨迹段数据的第二属性信息确定二级索引值,基于所述二级索引值确定与所述一级索引关联的二级索引表;

第二构建模块,被配置为基于所述一级索引以及与所述一级索引关联的二级索引表,构建所述每个轨迹段数据的二级索引。

根据本说明书实施例的第三方面,提供了一种计算设备,包括:

存储器和处理器;

所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现上述索引构建方法的步骤。

根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述索引构建方法的步骤。

根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述索引构建方法的步骤。

本说明书提供的索引构建方法,包括:将接收的轨迹数据划分为至少两个轨迹段数据,根据每个轨迹段数据以及对应的第一属性信息,确定所述每个轨迹段数据的一级索引表以及一级索引值;基于所述一级索引表以及一级索引值,构建所述每个轨迹段数据的一级索引;根据每个轨迹段数据的第二属性信息确定二级索引值,基于所述二级索引值确定与所述一级索引关联的二级索引表;基于所述一级索引以及与所述一级索引关联的二级索引表,构建所述每个轨迹段数据的二级索引。

具体地,所述索引构建方法通过将接收的轨迹数据划分为至少两个轨迹段数据,基于每个轨迹段数据、以及每个轨迹段数据的第一属性信息和第二属性信息,构建出每个轨迹段数据的一级索引和二级索引,从而实现后续基于一级索引和二级索引,提高对轨迹数据的查询效率,降低了对轨迹数据进行查询操作的时间成本。

附图说明

图1是本说明书一实施例提供的一种索引构建方法中云上轨迹管理系统的结构示意图;

图2是本说明书一实施例提供的一种索引构建方法的流程图;

图3示出了本说明书一实施例提供的一种应用于基于索引查询轨迹数据场景的索引构建方法的处理流程图;

图4是本说明书一实施例提供的一种索引构建装置的结构示意图;

图5是本说明书一实施例提供的一种计算设备的结构框图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。

在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

首先,对本说明书一个或多个实施例涉及的名词术语进行解释。

多模数据库:一种多模数据库产品,能够提供各规模、多模型的数据库服务。

二级索引:是指为解决多维查询的问题推出的原生全局二级索引解决方案。该方案通过对主表的某个列建立二级索引,以及列值与索引表行键的映射关系,降低存储和查询成本。

时空索引:考虑到数据时空属性而定义的索引,例如R树、kd树、四叉树和空间填充曲线编码索引。

轨迹分段线模型:是指将一条轨迹基于一定切分策略切分成的多个轨迹分段;在实际应用中,每个分段作为一条记录存储,在存储时保留拼接回整条轨迹的必要信息。

GeoMesa:是一款开源的基于分布式计算系统的面向海量时空数据查询与分析的工具包。

HBase:是一个分布式的、面向列的开源数据库。

Spark:是一种用于大规模数据处理的统一分析引擎。

OLAP:是指联机分析处理。

Schema:又称为模式、架构;是指数据库的组织和结构。

轨迹数据:是指时空环境下,通过对一个或多个移动对象运动过程的采样所获得的数据信息,包括采样点位置、采样时间、速度等。

Filter:一种过滤器。

随着互联网技术的飞速发展,自动驾驶、共享出行、车联网、公共安全等领域对于移动对象管理的需求日益增长,具体包括对移动对象采集的具有时空特征的数据进行存储、实时查询和数据挖掘等。但轨迹数据体量大,且包含位置信息等复杂特征,许多数据库无法满足功能需求。

基于此,本说明书提供的一种方案,通过采用开源索引工具GeoMesa,存储层使用HBase,集成Spark,并在其之上提供统一的SQL(结构化查询语言)做查询、计算和分析功能。将每条轨迹作为一条记录存储,key为时空索引值,value包括轨迹外包框、起始点和时间、结束点和时间、轨迹点的list以及其它属性列。

但该方案存在三方面的缺点:

(1)对整条轨迹做时空索引,对时空范围大的轨迹效率不高。

(2)针对组合属性列的查询是一个OLAP系统,对于简单的查询也会启动SparkContext,导致效率不高。

(3)每一个索引表都需要重复存储属性列,存储代价较大。

基于此,云上轨迹管理系统应运而生,本说明书提供的索引构建方法应用于该云上轨迹管理系统中,参见图1,图1是本说明书一实施例提供的一种索引构建方法中云上轨迹管理系统的结构图;其中,该云上轨迹管理系统包括客户端、以及基于多模数据库的存储层;通过该云上轨迹管理系统的客户端,能够实现定义轨迹分段线模型的schema、建立时空索引XZ2T/OTS、数据操作(例如插入、更新、删除)、数据查询以及支持二级索引的数据表操作(例如建表、写入和查询)。同时,该云上轨迹管理系统的存储层,基于多模数据库的低成本分布式存储处理、二级索引和冷热分离功能实现,并且还能够基于多模数据库实现计算下推。因此,本说明书提供的云上轨迹管理系统,有效利用多模数据库二级索引机制,针对轨迹数据建立分段模型(轨迹分段线模型),并针对轨迹创建ots和xz2t二级索引,实现低存储成本、高查询效率的数据库管理系统。

具体地,在本说明书中,提供了一种索引构建方法,本说明书同时涉及一种索引构建装置,一种计算设备,一种计算机可读存储介质,以及一种计算机程序,在下面的实施例中逐一进行详细说明。

参见图2,图2示出了根据本说明书一实施例提供的一种索引构建方法的流程图,具体包括以下步骤:

步骤202:将接收的轨迹数据划分为至少两个轨迹段数据,根据每个轨迹段数据以及对应的第一属性信息,确定所述每个轨迹段数据的一级索引表以及一级索引值。

其中,轨迹段数据可以理解为将一条轨迹基于一定切分策略切分成的轨迹分段数据,具体实施时,该轨迹段数据可以为轨迹分段线模型。第一属性信息可以根据实际应用场景进行设置,例如轨迹段数据的元数据;一级索引表可以理解为存储轨迹段数据、以及与该轨迹段数据相关联的索引和元数据的表;在实际应用中,该一级索引表可以为一个主表。一级索引值可以理解为存储在一级索引表中,用于方便对一级索引表中的轨迹段数据进行查询的索引值,例如,rowkey值。

在实际应用中,能够以键值对(key-value)的形式对轨迹段数据进行存储;该key可以理解为rowkey值,该value可以理解为轨迹段数据,以及轨迹段数据的元数据。

具体地,云上轨迹管理系统(以下简称为系统)在接收到轨迹数据后,将该数据划分为至少两个轨迹段数据,并确定每个轨迹段数据的第一属性信息,并基于每个轨迹段数据以及每个轨迹段数据的第一属性信息,确定出每个轨迹段数据的一级索引表和一级索引值。

举例说明,以索引构建方法应用于对轨迹段数据建立二级索引为例,对确定每个轨迹段数据的一级索引表以及一级索引值做进一步说明。

在自动驾驶领域中对移动对象(例如,车辆)进行管理的需求日益增长,其中就包括对车辆采集的、具有时空特征的轨迹数据进行存储,实时查询等。基于此,本说明书提供的索引构建方法在云上轨迹管理系统中定义了一个轨迹分段线模型(TrajectoryFeatureType)。该轨迹分段线模型可以理解为一种数据结构。

在完成轨迹分段线模型的定义之后,在云上轨迹管理系统接收到移动车辆的一整条轨迹数据时,会按照特定规则对该轨迹数据进行切分,获得至少两个轨迹段,并对每个轨迹段按照轨迹分段线模型(TrajectoryFeatureType)的定义,分别建立一个trajectory_segment对象。从而获得与完整的轨迹数据相对应的、至少两个轨迹段数据。其中,该轨迹分段线模型的结构可以参见表1所示:

表1

参见表1,其中,轨迹分段线模型(TrajectoryFeatureType)中包含:object_id:移动对象id。geom:轨迹几何属性。其中,geom是geometry(几何)的简称,该geom是为轨迹几何属性设置的属性名称,本说明书实施例中以geom为例,对轨迹几何属性的属性名称进行说明,在实际应用中,可以根据具体使用场景对轨迹几何属性的属性名称进行设置,本说明书对此不做具体限定。多数移动对象处理系统(例如JUST)在轨迹线模型中以List[Point]的形式存储轨迹点,在进行空间范围查询时,判断是否有点落在查询范围内,如有即认为轨迹和查询范围相交。然而在实际应用中,存在采集的轨迹点没有落在查询范围内,但相邻点的连线与范围相交。考虑到在这种情况下依然希望判断相交返回true,本说明书提供的索引构建方法采用LineString类型存储轨迹点连线,支持对该类型的精确相交判断。在需要用到离散的轨迹点时,亦可从LineString中获得List[Point]。traj_start_time:该轨迹段所属的整条轨迹数据的起始时间。segment_start_time:该轨迹段的起始时间。segment_index:该轨迹段在整条轨迹中是第几段(即轨迹段编号);List[traj_point_time]:各轨迹点时间,各轨迹点时间的顺序与geom中点的顺序一一对应。List[traj_point_attr1]、List[traj_point_attr2]…:各轨迹点自定义属性,每个属性是一个List,每个List中属性值对应geom中点的顺序。

在按照特定规则对该轨迹数据进行切分过程中,该特定规则可以根据实际应用场景进行设置,比如,对一整条轨迹按照固定的轨迹点的数量进行切分、对一整条轨迹按照预设时间范围进行切分等。

在通过对完整的轨迹数据进行切分,获得至少两个轨迹段数据(trajectory_segment对象)之后,能够获取到每个轨迹段数据的元数据,并基于该元数据以及trajectory_segment对象,确定出存储每个轨迹段数据的主表,以及存储在主表中的rowkey值。

具体实施中,本说明书提供的索引构建方法确定一级索引表以及一级索引值的过程,如下所示。

所述根据每个轨迹段数据以及对应的第一属性信息,确定所述每个轨迹段数据的一级索引表以及一级索引值,包括:

根据每个轨迹段数据以及所述每个轨迹段数据的第一属性信息,构建所述每个轨迹段数据的一级索引表;

为所述一级索引表中的每个轨迹段数据,确定对应的一级索引值。

沿用上例,在确定出trajectory_segment对象以及元数据之后,将每个trajectory_segment对象,以及每个对象对应的元数据,作为主表中的列,并基于trajectory_segment对象列以及元数据列构建一个主表。

在完成主表的建立之后,为主表中的每个trajectory_segment对象,分别生成与该对象对应的rowkey值,并将该rowkey值存储在主表中。其中,该主表的结构可以参见表2所示;

表2

参见表2,其中,rowkey为主表中的rowkey值列的名称,r1、r2是主表rowkey值,每行唯一。主表只有一个列族“d”。该列族“d”包含的列“m”中,存储每条轨迹段的元数据。列“a”中存储序列化后的按照轨迹分段线模型定义的轨迹段数据(trajectory_segment对象)。

本说明书实施例中,根据每个轨迹段数据以及每个轨迹段数据的第一属性信息,构建所述每个轨迹段数据的一级索引表,并为一级索引表中的每个轨迹段数据,确定对应的一级索引值。从而便于后续基于该一级索引表和一级索引值构建一级索引,进一步提高了对轨迹数据的检索效率。

步骤204:基于所述一级索引表以及一级索引值,构建所述每个轨迹段数据的一级索引。

沿用上例,在完成主表的构建,并为主表中的每一行轨迹段数据,确定对应的rowkey值之后,就能够基于该主表以及rowkey值完成一级索引的构建,后续即可基于该rowkey值找到对应的轨迹段数据,完成对轨迹段数据的查询。

步骤206:根据每个轨迹段数据的第二属性信息确定二级索引值,基于所述二级索引值确定与所述一级索引关联的二级索引表。

其中,第二属性信息可以根据实际应用场景进行设置,例如每个轨迹段数据的起始时间、轨迹段外边框等时空特征数据、每个轨迹段所属的移动对象ID(即object_id)、每个轨迹段数据所属的完整轨迹数据的起始时间(即traj_start_time)、轨迹段编号(即segment_index)等。

二级索引表可以理解为与一级索引关联的、存储二级索引值的表。

在实际应用中,根据每个轨迹段数据的第二属性信息确定二级索引值,包括:

对每个轨迹段数据的第二属性信息进行编码处理,获得所述每个轨迹段数据的第二属性编码;

基于所述第二属性编码以及所述一级索引值,获得所述每个轨迹段数据的二级索引值。

其中,第二属性编码可以理解为对第二属性信息进行编码处理后获得的编码。

沿用上例,在完成一级索引的构建之后,为了进一步提高轨迹数据的时空查询效率,可以通过在一级索引的基础上构建时空二级索引的方式提高查询效率,基于此,在完成一级索引的构建之后,获取每个轨迹段数据的时空特征数据,对该时空特征数据中的轨迹段外包框进行编码处理,获得轨迹段外包框的编码,并确定该时空特征数据中每个轨迹段数据的起始时间、所属的时间区间的编号;其中,时间区间划分间隔和起始点可自定义。

在确定轨迹段外包框的编码和时间区间的编号之后,基于该轨迹段外包框的编码和时间区间的编号,生成初始时空索引值。并将初始索引值与一级索引值相加,从而获得每个轨迹段数据的时空二级索引值,便于后续基于该时空二级索引值生成时空二级索引,提高时空查询的效率。

本说明书提供的索引构建方法在另一种情况下,能够从每个轨迹段数据的第二属性信息中,选取目标属性信息,比如object_id、traj_start_time、segment_index等属性信息;基于该属性信息生成二级索引值,从而避免了对属性信息进行编码,导致索引构建效率较低的问题,具体方式如下。

所述根据每个轨迹段数据的第二属性信息确定二级索引值,还包括:

根据预设选取规则从每个轨迹段数据的第二属性信息中选取目标属性信息;

基于所述目标属性信息以及所述一级索引值,获得所述每个轨迹段数据的二级索引值。

其中,目标属性信息可以理解为第二属性信息中满足预设选取规则的属性信息,该预设选取规则可以根据实际应用场景进行设置,例如该预设选取规则可以为获取object_id、traj_start_time、segment_index等属性信息。

沿用上例,其中,该目标属性信息可以为object_id、traj_start_time、segment_index等属性信息。

在完成一级索引的构建之后,为了实现基于轨迹段数据对完整轨迹数据进行回查,可以通过在一级索引的基础上构建OTS二级索引的方式,便于后续进行回查操作。基于此,在完成一级索引的构建之后,根据预设选取规则从每个轨迹段数据的第二属性信息中获取object_id、traj_start_time、segment_index等属性信息。

并基于该object_id、traj_start_time、segment_index等属性信息,生成初始OTS二级索引值,将该初始OTS二级索引值与rowkey值相加,获得OTS二级索引值,从而便于后续基于该OTS二级索引值生成OTS二级索引,实现回查完整轨迹数据。

在实际应用中,在基于二级索引值构建二级索引的过程中,首先需要将二级索引值添加到一级索引表中,作为一级索引表中的二级索引列,并为该二级索引列创建二级索引表,该二级索引表的每行数据与主表中的某一行唯一对应,具体实现方式如下。

所述基于所述二级索引值确定与所述一级索引关联的二级索引表,包括:

将所述二级索引值添加至所述一级索引表,并生成与所述一级索引值关联的列值;

根据所述二级索引值以及所述列值,构建二级索引表;

基于所述二级索引值建立所述一级索引表与所述二级索引表的关联关系;

基于所述关联关系将所述二级索引表,确定为与所述一级索引关联的二级索引表。

其中,列值可以理解为二级索引表中为了维护与主表数据一致性而引入的数值,每个列值在主表中存在对应的rowkey值。

沿用上例,在确定二级索引值之后,首先将二级索引值添加到主表中,作为主表中的二级索引列,参见表2,表2中同样示出了该二级索引值为OTS二级索引值和时空二级索引值时,主表中的二级索引列。其中,该ots列中包含OTS二级索引值;xz2t列中包含时空二级索引值。在实际应用中,该主表中还可以添加其他索引,再次不做过多赘述。

在将二级索引值添加到主表后,需要确定出与该主表中的rowkey值相关联的列值,并基于该列值以及二级索引值,为主表中的二级索引值列构建二级索引表。在完成二级索引表的构建之后,基于二级索引值建立主表与二级索引表之间的关联关系,并基于关联关系确定该二级索引表为与一级索引相关联,便于后续基于该二级索引表和一级索引构建二级索引。

具体实施时,该二级索引值列为不同的情况下,为二级索引值列构建的二级索引表也存在一定差异。为时空二级索引值列构建的时空二级索引表,可以参见表3所示。

表3

其中,该时空二级索引表中的rowkey列中包含的xz2t index1、xz2t index2,是每个轨迹段的XZ2T索引值(时空二级索引值),该时空二级索引值与主表中的时空二级索引值为一致。该value1、value2为时空二级索引表中的列值,该列值与主表中的rowkey值一一对应。

为OTS二级索引值列构建的OTS二级索引表,可以参见表4所示。

表4

其中,该OTS二级索引表中的rowkey列中,包含OTS二级索引值,该ots index1、otsindex2是每个轨迹段数据的OTS索引值,该OTS二级索引值与主表中的OTS二级索引值为一致。该value1、value2为OTS二级索引表中的列值,该列值与主表中的rowkey值一一对应。

本说明书实施例中,通过将二级索引值添加至一级索引表,并生成与所述一级索引值关联的列值;从而实现根据二级索引值以及列值构建二级索引表;在完成二级索引表的构建之后,基于二级索引值建立一级索引表与二级索引表的关联关系;基于关联关系将二级索引表,确定为与一级索引关联的二级索引表。从而实现后续基于该一级索引以及二级索引表完成对二级索引的构建。提高轨迹数据的查询效率。

步骤208:基于所述一级索引以及与所述一级索引关联的二级索引表,构建所述每个轨迹段数据的二级索引。

沿用上例,在构建每个轨迹段数据的一级索引,并确定与该一级索引相关联的二级索引表之后,将该一级索引以及与其关联的二级索引表,构建为每个轨迹段数据的二级索引,从而便于后续基于该二级索引对轨迹数据进行查询。

具体实施时,在二级索引表为不同的情况下,基于该二级索引表建立二级索引也不同;基于OTS二级索引表构建的OTS二级索引的结构,可以参见表5所示。

表5

其中,该OTS二级索引用于回查完整轨迹数据。除shard编号外,其余字段可以对应基于表1中轨迹分段线模型定义的轨迹段数据的属性信息。表5中的long和int分别为一种数据类型、1byte(字节)以及id.lenght分别为列的大小,shard列用于存储OTS二级索引的分片的编号。

对轨迹段OTS属性信息(移动对象id(object id)+ 整条轨迹开始时间 (Time) +轨迹段编号 (segment index))创建二级索引时,需先在主表建立ots二级索引列,该列存储OTS索引值,再对索引列创建二级索引表。二级索引表每行数据与主表中某一行唯一对应。

基于时空二级索引表构建的XZ2T二级索引的结构,可以参见表6所示。

表6

其中,表6中的long和short分别为一种数据类型、1byte为列的大小。shard列用于存储时空二级索引的分片的编号。

该XZ2T二级索引用于提高时空查询效率。其中,timebin为轨迹段起始时间所属时间区间的编号,时间区间划分间隔和起始点可自定义;xz2 code为轨迹段外包框的xz2编码。当对轨迹段数据的时空属性创建二级索引时,需先在主表建立对应的xz2t二级索引列,该列存储该索引xz2t编码,再对索引列创建二级索引表。二级索引表每行数据与主表中某一行唯一对应。

本说明书提供的索引构建方法,通过将接收的轨迹数据划分为至少两个轨迹段数据,基于每个轨迹段数据、以及每个轨迹段数据的第一属性信息和第二属性信息,构建出每个轨迹段数据的一级索引和二级索引,从而实现后续基于一级索引和二级索引,提高对轨迹数据的查询效率,降低了对轨迹数据进行查询操作的时间成本。

同时,本说明书提供的索引构建方法使用轨迹分段线模型,能够对短轨迹数据兼容支持JUST的线模型,对长轨迹数据则切分后再存储,有效减少了查询过程中返回到计算层的数据量。并且利用多模数据库的原生二级索引,有效降低了存储成本。在实际应用中,使用两个二级索引表的情况下,轨迹数据的存储成本至少降低到全量存储的50%。

在具体实施过程中,在完成二级索引的构建之后,能够通过该二级索引对需要查询的目标轨迹数据进行查询,具体实现方式如下。

所述构建所述每个轨迹段数据的二级索引之后,还包括步骤一至步骤三。

步骤一:接收轨迹查询条件;

其中,该轨迹查询条件可以根据实际应用场景进行设置,该轨迹查询条件可以为时空范围,例如,轨迹查询条件可以为查询2020年10月1日途径地点A的所有移动对象的轨迹信息。

具体地,云上轨迹管理系统能够接收到轨迹查询条件,该轨迹查询套件可以通过SQL语句发送至云上轨迹管理系统。

步骤二:根据所述一级索引以及二级索引,确定与所述轨迹查询条件对应的至少一个目标轨迹段数据;

其中,目标轨迹段数据可以理解为满足轨迹查询条件的轨迹段数据。

具体地,所述根据所述一级索引以及二级索引,确定与所述轨迹查询条件对应的至少一个目标轨迹段数据,包括:

基于所述轨迹查询条件对所述二级索引进行扫描,获得所述轨迹查询条件对应的扫描结果;

在所述索引值扫描结果不为空的情况下,基于所述扫描结果对所述一级索引进行扫描,获得与所述轨迹查询条件对应的至少一个目标轨迹段数据。

具体地,在接收的轨迹查询条件之后,基于该轨迹查询条件对二级索引进行扫描,从而获得该轨迹查询条件的扫描结果,并且在该扫描结果不为空的情况下,基于该扫描结果再次对一级索引进行扫描,从而获得与该查询条件对象的至少一个目标轨迹段数据。

在实际应用中,轨迹查询条件可能是时空范围,但该时空范围的查询条件,与该查询条件对应的时空二级索引中的索引值的格式不同,因此,需要对该查询条件进行编码处理,从而基于编码对二级索引进行扫描,具体实现方式如下。

所述基于所述轨迹查询条件对所述二级索引进行扫描,获得所述轨迹查询条件对应的扫描结果,包括:

对所述轨迹查询条件进行编码处理,获得轨迹查询编码;

从所述二级索引中确定所述轨迹查询编码对应的二级索引表;

基于所述轨迹查询编码对所述二级索引表中的二级索引值进行扫描,获得所述轨迹查询条件对应的扫描结果。

其中,扫描结果可以理解为二级索引表中与满足轨迹查询条件的二级索引值。

沿用上例,在接收到为时空范围的轨迹查询条件之后,对该时空范围进行编码处理,生成时空编码范围;确定该时空编码范围对应的主表,并基于该时空编码范围指定扫描主表的时空索引列(xz2t索引值列)。对建立了时空二级索引的xz2t索引值列,云上轨迹管理系统会自动扫描时空二级索引的二级索引表中,所包含的xz2t索引值。并基生成对该xz2t索引值的扫描结果。

本说明书实施例中,通过对轨迹查询条件进行编码处理获得的轨迹查询编码;对二级索引表对应的二级索引表中的二级索引值进行扫描,获得轨迹查询条件对应的扫描结果,便于后续基于扫描结果快速且准确的查询到目标轨迹数据,提高了轨迹数据的查询效率。

进一步地,所述基于所述扫描结果对所述一级索引进行扫描,获得与所述轨迹查询条件对应的至少一个目标轨迹段数据,包括:

从所述二级索引表中确定所述扫描结果对应的目标列值,并从所述一级索引的一级索引表中,确定所述目标列值关联的一级索引值;

基于所述目标列值关联的一级索引值从一级索引表中,获得与所述轨迹查询条件对应的至少一个目标轨迹段数据。

其中,在扫描结果为二级索引值的情况下,该目标列值可以理解为与该二级索引值为用一行的列值。

沿用上例,在二级索引表中,存在满足为时空范围的轨迹查询条件的xz2t索引值时,在该二级索引表中,将与该xz2t索引值处于同一行的列值确定为目标列值,并从一级索引表中确定与该目标列值相关联的rowkey值,并基于该rowkey值,从一级索引表中确定出与轨迹查询条件对应的至少一个目标轨迹段数据。

本说明书实施例中,从二级索引表中确定扫描结果对应的目标列值,并从一级索引的一级索引表中,确定目标列值关联的一级索引值;基于目标列值关联的一级索引值从一级索引表中,获得与轨迹查询条件对应的至少一个目标轨迹段数据。便于后续基于目标轨迹段数据确定出,与轨迹查询条件对应的目标轨迹数据,提高了轨迹数据的查询效率。

在基于轨迹查询条件对二级索引值进行扫描的过程中,若二级索引表中满足时空范围的轨迹查询条件的第二索引值(rowkey)为空,则会进行全表扫描,具体方式如下。

所述基于所述轨迹查询条件对所述二级索引进行扫描,获得所述轨迹查询条件对应的扫描结果之后,还包括:

在所述扫描结果为空的情况下,基于所述轨迹查询条件对所述一级索引的一级索引表、以及所述二级索引的二级索引表进行全表扫描,获得全表扫描结果;

在所述全表扫描结果不为空的情况下,基于所述全表扫描结果确定与所述轨迹查询条件对应的至少一个目标轨迹段数据。

沿用上例,在二级索引表中,不存在满足为时空范围的轨迹查询条件的xz2t索引值时,则基于该轨迹查询条件对一级索引的主表中的数据进行全表扫描,并获取全表扫描结果,在全表扫描结果不为空的情况下,也即是主表中存在满足轨迹查询条件的轨迹段数据的情况下,将该轨迹段确定为与轨迹查询条件对应的至少一个目标轨迹段数据。

本说明书实施例中,在扫描结果为空的情况下,基于轨迹查询条件对一级索引的一级索引表进行全表扫描,并在全表扫描结果不为空的情况下,获得与轨迹查询条件对应的至少一个目标轨迹段数据。从而提供的轨迹数据查询的多样性,进一步提高了轨迹数据的查询效率。

步骤三:基于每个目标轨迹段数据确定所述轨迹查询条件对应的目标轨迹数据。

其中,目标轨迹数据可以理解为该轨迹查询条件所需求的轨迹数据。

沿用上例,在基于一级索引以及二级索引确定出与轨迹查询条件对应的轨迹段数据之后,可以直接将该轨迹段数据作为目标轨迹数据,从而获得与轨迹查询条件对应的目标轨迹数据。

进一步地,本说明书提供的索引构建方法在另一种情况下,当需要获得到完整轨迹数据时,还可以基于目标轨迹段数据的属性信息进行回查,从而获得与该目标轨迹段数据属于同一完整轨迹数据的一个或多个轨迹段数据,并将该一个或多个轨迹段数据与目标轨迹段数据进行拼接,从而轨迹查询条件对应的完整轨迹数据,具体实现方式如下。

所述基于每个目标轨迹段数据确定所述轨迹查询条件对应的目标轨迹数据,包括:

获取每个目标轨迹段数据的第二属性信息中的目标属性信息;

根据所述一级索引以及二级索引,确定与所述目标属性信息对应的至少一个回查轨迹段数据;

将所述每个目标轨迹段数据与每个回查轨迹段数据进行拼接,获得所述轨迹查询条件对应的目标轨迹数据。

沿用上例,由于完整的轨迹被切分成轨迹段进行存储,在查询时如果需要返回整条轨迹,需要基于轨迹段进行回查。基于此,获取目标轨迹段数据的第二属性信息中的object id、segment_start_time、segment_index等属性信息,并按照上述确定与轨迹查询条件对应的目标轨迹段数据的方式,根据一级索引以及OTS二级索引,确定出与该属性信息对应的一个或多个轨迹段数据,并基于该一个或多个轨迹段数据以及目标轨迹轨迹段数据的segment index属性信息进行拼接,从而获得完整的轨迹数据,并将该完整的轨迹数据作为与轨迹查询条件对应的目标轨迹数据。实现查询时高效拼接返回完整轨迹。

本说明书提供的索引构建方法中,云上轨迹管理系统在接收轨迹查询条件后;根据一级索引以及二级索引,确定与轨迹查询条件对应的至少一个目标轨迹段数据,并基于每个目标轨迹段数据确定轨迹查询条件对应的目标轨迹数据。提高轨迹查询的性能,并且,本方案通过下推部分计算到多模数据库的存储层,有效减少了简单查询过程中的数据传输。

在具体实施时,云上轨迹管理系统可以方便地接入Spark大数据分析框架,从而实现复杂查询使用Spark,简单查询下推到多模数据库,进一步提高轨迹查询的效率。

下述结合附图3,以本说明书提供的索引构建方法在基于索引查询轨迹数据场景的应用为例,对所述索引构建方法进行进一步说明。其中,图3示出了本说明书一实施例提供的一种应用于基于索引查询轨迹数据场景的索引构建方法的处理流程图,在实际应用中,按照表2至表6中的结构进行建表和写入数据后,可利用二级索引进行轨迹相关的时空范围查询。具体包括以下步骤:

步骤302:查询语句解析。

具体地,云上轨迹管理系统接收到的查询条件可能是复杂条件,既包括时空范围,也包括其它属性,因此需要对该查询语句解析。

步骤304:生成基于时空索引的查询计划。

具体地,基于解析后的查询语句生成基于时空索引的查询计划。根据查询的时空范围生成时空编码范围,并指定扫描主表的时空索引列(即xz2t索引值列)。

步骤306:判断查询计划的索引扫描范围是否为非空。

具体地,对建立了二级索引的索引列(xz2t索引值列),多模数据库会自动扫描该索引列对应的二级索引,包括对该索引列对应的二级索引表中的xz2t索引值进行扫描过滤。

同时,判断该查询计划的索引扫描范围是否为非空,也即是,该二级索引表的xz2t索引值中,是否存在与查询条件要求的时空范围对应的索引值,若是,则执行步骤308;若否,则执行步骤310。

步骤308:对二级索引表的rowkey进行扫描过滤。

具体地,在二级索引表的xz2t索引值中,存在与查询条件要求的时空范围对应的索引值时,对二级索引表中的rowkey列(xz2t索引值列)进行扫描过滤,确定出满足时空范围的xz2t索引值。

从二级索引表中确定与该xz2t索引值对应的列值,基于该列值从主表中确定与该列值对应的rowkey值,基于与列值对应的rowkey值,从而确定出与查询条件对应的轨迹段数据。

步骤310:全表扫描。

具体地,在二级索引表的xz2t索引值中,不存在与查询条件要求的时空范围对应的索引值时,基于该查询套件对主表进行全表扫描,从而获得与查询条件对应的轨迹段数据。

在实际应用中,全表扫描会耗费大量的计算机处理资源,因此进行全表扫描的操作应该尽量避免。

步骤312:判断是否需要返回完整轨迹。

具体的,在获得与查询条件对应的轨迹段数据之后,需要判断查询计划是否需要返回完整轨迹;若是,则执行步骤314,若否,则确定查询计划不需要返回完整轨迹数据,直接将轨迹段数据作为目标轨迹,并直接执行步骤318。

步骤314:对OTS索引列进行回查。

具体地,在查询计划需要返回完整轨迹数据的情况下,利用构建OTS二级索引进行回查,从而获得与轨迹段数据属于同一完整轨迹数据的、其他轨迹段数据。

步骤316:完整轨迹拼接。

具体地,在进行数据回查之后,将获得轨迹段数据,以及与轨迹段数据属于同一完整轨迹数据的其他轨迹段数据进行轨迹拼接,从而获得完整轨迹数据,并将该完整轨迹数据作为目标数据。

例如,由于轨迹被切分成段存储,在查询时如果需要返回整条轨迹,需要再进行回查。OTS索引定义为:移动对象id(object id)+ 整条轨迹开始时间 (Time) + 轨迹段编号(segment index)。其中OT组合可唯一标识一条轨迹,OTS可唯一标识一条轨迹段。回查时指定OT,返回属于同一条轨迹的分段,并根据编号排序拼接成完整轨迹结果。

步骤318:初步查询结果。

具体地,将查询到的目标轨迹数据作为初步查询结果,并将该初步查询结果返回至客户端。

步骤320:判断是否有客户端filter。

具体地,扫描二级索引可能返回的是非精确结果(比如时空围栏查询,时空编码只能起到粗略过滤的作用),因此,在将初步查询结果发送至客户端之后,需要判断该客户端是否有filter,若是,则执行步骤322,若否,则执行步骤324.

步骤322:对传输回的数据再进行精过滤。

具体地,在客户端有filter的情况下,会对查询结果进行二次过滤,二次过滤后的结果为最终查询结果。

步骤324:查询结果。

具体地,在客户端没有filter的情况下,客户端直接将接收到的初步查询结果作为最终查询结果。

本说明书提供的索引构建方法中,云上轨迹管理系统在接收轨迹查询条件后;根据一级索引以及二级索引,确定与轨迹查询条件对应的至少一个目标轨迹段数据,并基于每个目标轨迹段数据确定轨迹查询条件对应的目标轨迹数据。提高轨迹查询的性能,并且,本方案通过下推部分计算到多模数据库的存储层,有效减少了简单查询过程中的数据传输。

与上述方法实施例相对应,本说明书还提供了索引构建装置实施例,图4示出了本说明书一实施例提供的一种索引构建装置的结构示意图。如图4所示,该装置包括:

第一确定模块402,被配置为将接收的轨迹数据划分为至少两个轨迹段数据,根据每个轨迹段数据以及对应的第一属性信息,确定所述每个轨迹段数据的一级索引表以及一级索引值;

第一构建模块404,被配置为基于所述一级索引表以及一级索引值,构建所述每个轨迹段数据的一级索引;

第二确定模块406,被配置为根据每个轨迹段数据的第二属性信息确定二级索引值,基于所述二级索引值确定与所述一级索引关联的二级索引表;

第二构建模块408,被配置为基于所述一级索引以及与所述一级索引关联的二级索引表,构建所述每个轨迹段数据的二级索引。

可选地,所述第一确定模块402,还被配置为:

根据每个轨迹段数据以及所述每个轨迹段数据的第一属性信息,构建所述每个轨迹段数据的一级索引表;

为所述一级索引表中的每个轨迹段数据,确定对应的一级索引值。

可选地,所述第二确定模块406,还被配置为:

对每个轨迹段数据的第二属性信息进行编码处理,获得所述每个轨迹段数据的第二属性编码;

基于所述第二属性编码以及所述一级索引值,获得所述每个轨迹段数据的二级索引值。

可选地,所述第二确定模块406,还被配置为:

根据预设选取规则从每个轨迹段数据的第二属性信息中选取目标属性信息;

基于所述目标属性信息以及所述一级索引值,获得所述每个轨迹段数据的二级索引值。

可选地,所述第二确定模块406,还被配置为:

将所述二级索引值添加至所述一级索引表,并生成与所述一级索引值关联的列值;

根据所述二级索引值以及所述列值,构建二级索引表;

基于所述二级索引值建立所述一级索引表与所述二级索引表的关联关系;

基于所述关联关系将所述二级索引表,确定为与所述一级索引关联的二级索引表。

可选地,所述索引构建装置,还包括查询模块,被配置为:

接收轨迹查询条件;

根据所述一级索引以及二级索引,确定与所述轨迹查询条件对应的至少一个目标轨迹段数据;

基于每个目标轨迹段数据确定所述轨迹查询条件对应的目标轨迹数据。

可选地,所述查询模块,还被配置为:

基于所述轨迹查询条件对所述二级索引进行扫描,获得所述轨迹查询条件对应的扫描结果;

在所述扫描结果不为空的情况下,基于所述扫描结果对所述一级索引进行扫描,获得与所述轨迹查询条件对应的至少一个目标轨迹段数据。

可选地,所述查询模块,还被配置为:

对所述轨迹查询条件进行编码处理,获得轨迹查询编码;

从所述二级索引中确定所述轨迹查询编码对应的二级索引表;

基于所述轨迹查询编码对所述二级索引表中的二级索引值进行扫描,获得所述轨迹查询条件对应的扫描结果。

可选地,所述查询模块,还被配置为:

在所述扫描结果为空的情况下,基于所述轨迹查询条件对所述一级索引的一级索引表、以及所述二级索引的二级索引表进行全表扫描,获得全表扫描结果;

在所述全表扫描结果不为空的情况下,基于所述全表扫描结果确定与所述轨迹查询条件对应的至少一个目标轨迹段数据。

可选地,所述查询模块,还被配置为:

从所述二级索引表中确定所述扫描结果对应的目标列值,并从所述一级索引的一级索引表中,确定所述目标列值关联的一级索引值;

基于所述目标列值关联的一级索引值从一级索引表中,获得与所述轨迹查询条件对应的至少一个目标轨迹段数据。

可选地,所述查询模块,还被配置为:

获取每个目标轨迹段数据的第二属性信息中的目标属性信息;

根据所述一级索引以及二级索引,确定与所述目标属性信息对应的至少一个回查轨迹段数据;

将所述每个目标轨迹段数据与每个回查轨迹段数据进行拼接,获得所述轨迹查询条件对应的目标轨迹数据。

上述为本实施例的一种索引构建装置的示意性方案。需要说明的是,该索引构建装置的技术方案与上述的索引构建方法的技术方案属于同一构思,索引构建装置的技术方案未详细描述的细节内容,均可以参见上述索引构建方法的技术方案的描述。

图5示出了根据本说明书一个实施例提供的一种计算设备500的结构框图。该计算设备500的部件包括但不限于存储器510和处理器520。处理器520与存储器510通过总线530相连接,数据库550用于保存数据。

计算设备500还包括接入设备540,接入设备540使得计算设备500能够经由一个或多个网络560通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备540可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。

在本说明书的一个实施例中,计算设备500的上述部件以及图5中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图5所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。

计算设备500可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备500还可以是移动式或静止式的服务器。

其中,处理器520用于执行计算机可执行指令,该计算机可执行指令被处理器520执行时实现任意所述索引构建方法的步骤。

上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的索引构建方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述索引构建方法的技术方案的描述。

本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述索引构建方法的步骤。

上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的索引构建方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述索引构建方法的技术方案的描述。

本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述索引构建方法的步骤。

上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的示意性方案与上述的索引构建方法的技术方案属于同一构思,计算机程序的示意性方案未详细描述的细节内容,均可以参见上述索引构建方法的技术方案的描述。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书并不受所描述的动作顺序的限制,因为依据本说明书,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。

相关技术
  • 构建价值索引关系的方法、索引系统及索引装置
  • 基于网页分类的索引网络构建方法及其索引网构建器
技术分类

06120113792779