一、问题背景
城市中超过80%的数据都与时空有关,如加油站点、出租车轨迹、交通路况等。这些数据多为半结构化和非结构化数据,并且需要管理的数据量巨大。
传统的时空数据库管理海量数据时会出现性能严重下降的情况,如带有PostGIS插件的PostgresSQL。HBase等具有高可扩展性的分布式数据库又不能直接管理时空数据。为此,GeoMesa提供了大量的时空索引工具管理时空数据。但是,它支持的时空类型不够全面,并且在有些场景下它提供的索引效率很低。因此, 我们在GeoMesa的基础上研发了JUST引擎。
我们提出了三种新颖索引,Z2T、XZ2T和time_range索引,加快了点时空查询、非点空间对象的时空查询,并提供了时间段范围查询。此外,我们实现了SQL接口,方便用户快速构建时空数据表和索引。我们还提供了九大时空数据模型和三个特定时空业务数据模型,并为它们默认建立了必要的时空字段和最合适的高效索引。

JUST系统论文已发表在ICDE会议上(数据库顶级会议之一),并且目前已落地雄安、南京、南通、宿迁等城市。您可以通过http://just.urban-computing.com/免费体验JUST公测版。

下面将介绍JUST系统的核心索引、数据模型、以及使用指南。
二、时空数据
随着互联网的发展,城市中产生了大量数据,其中超过80%的数据与时空有关,如空气质量报点读数、天气、出租车移动轨迹、实时路况等。这些数据都至少具有时间或者空间维度,并且可能还有其它属性维度。
从二维地理要素的几何特征上分,空间对象可分为点(如,加油站点)、线(如,路段)、面(如,行政区域)、网(如,路网)等对象。

从时间维度上分,可分为时间点(如,2020年11月10日 16时03分59秒)和时间段(如,早上8点至早上10点)对象。因此,包含空间或者时间的对象可抽象出六种基础数据类型(点、线、面、网、时间点、时间段)。由这六种基础类型根据时空属性的变化情况可组合出24种既包含空间也包含时间属性的数据结构(8种静态时空类型,16种动态时空类型)(见第3节)。
三、时空索引
通常,数据库会通过时空索引来管理时空数据,而在硬件资源固定的情况下,时空索引的好坏和使用方法会影响系统性能。带有PostGIS插件的PostgresSQL利用R-tree和GiST索引管理时空数据,但是这两种索引的效率在海量数据的场景下会极大的下降。HBase等具有高可扩展性的分布式数据库能支持海量数据的存储,但它们没有直接集成管理时空数据的索引。为此,GeoMesa提供了大量的时空索引工具方便HBase管理时空数据。但它支持的时空类型不够全面,并且在有些场景下,如时间跨度很大的查询场景,它提供的索引效率会很低。所以JUST引擎采用了GeoMesa提供的四种时空索引Z2、Z3、XZ2、XZ3,并自研了三种时空索引Z2T、XZ2T、time_range。此外,时空数据通常会有ID和属性。因此,JUST还提供了id索引、属性索引以及属性的二级索引。
下面,将为大家详细介绍JUST提供的时空索引(Z2、Z3、Z2T、XZ2、XZ3、XZ2T、date、time_range),以及两种非时空索引(id、attr)。其中Z2、Z3、Z2T索引用于支持点对象的空间范围查询和时空范围,它们要求对象必须有点对象。XZ2、XZ3、XZ2T索引支持非点对象的空间范围查询和时空范围查询,它们要求对象必须有非点对象。非点对象是线、面和网对象。它们具有不确定的空间形状。因此,大部分空间索引都利用能包含它们最小的矩形边界来近似表达它们,再通过如R-Tree、XZ2等空间索引来进行管理。但是R-Tree不适用于分布式场景,因为JUST只提供了XZ2、XZ3、XZ2T三种适用于分布式场景的索引。date索引为时间点建立索引,它们要求对象必须时间点对象,它可以加快时间等值查询和时间范围查询。time_range索引为时间段建立索引,它们要求对象必须时间段对象,它可以加快时间段范围查询。JUST还支持两种非时空索引,id和attr索引,它们可对非时空属性建立索引。如id索引可以加快id属性的等值、大于、小于等查询,attr可以加快属性的等值、大于、小于等查询。此外,attr索引还支持二级索引,它可以加快属性+时空的条件查询。
1. 点对象索引
Z2 索引:将二维空间点编码到一维空间,进而方便存储和查询点对象,它可以加快点对象的空间范围查询。具有几何类型Point的对象可创建Z2索引。Z2采用Z-Ordering编码技术,它将空间递归分解成为更小的四个子空间,直到到达最大递归层级(resolution),分解过程中得到的四个子空间采用类似字母Z的顺序依次从0编码到3。所有的空间点都将被其所在最底层子空间的编码表示。如下图中空间点p1和p2都被“333”表示,p3被“331”表示。

Z3索引:将二维空间点和时间点编码到一维空间,它可以加快点对象的时空范围查询。具有几何类型Point和时间属性的对象可以创建Z3索引。地理空间是明确的经纬度边界(-180,180),(-90,90)。但是,时间是没有边界的。因此为了能递归分解时间,我们从1970-01-01 00:00:00开始(计算纪元时间),将时间按照固定周期(time period)进行切分, 每个周期都会有确定的边界。JUST引擎可设置time period为day、week、month、year。我们用T表示一个时间周期,T.s表示该周期开始时刻,T.e表示该周期结束时刻。在一个时间周期里,Z3索引首先将T从中间(T.m)分开,如果时间点小于T.m,那么编码为0,否则编码为1。然后按同样的二分规则划分经纬度。因此,我们可用三位编码(时间在前,经纬度在后)来表示时空点所在区域。然后,递归划分子时空区域,直到达到最大递归层级。如图中所示,最大递归次数为r=3, time period为day(24小时),时空点p(t:10,lng:-73.97,lat:40.78)在第一层r=1时处于“001” 区域(t:0,lng:0,lat:1),在第二层时处于“001” 区域的“110”子区域,最后在最大层级r=3时处于“001 110” 区域的“101” 区域。最终,我们用“001 110 101”来表示p.

然而,通常查询的时间范围的跨度占整个时间周期的比列远大

本文介绍了JUST引擎,它是在GeoMesa基础上研发的。城市超80%数据与时空有关,传统数据库管理海量时空数据存在性能问题。JUST提出新颖索引,实现SQL接口,提供多种时空数据模型和索引。还介绍了时空数据、索引、数据模型、使用指南及查询需求等内容。
最低0.47元/天 解锁文章
2257

被折叠的 条评论
为什么被折叠?



