您现在的位置是:主页 > 数据库技术 > 数据库技术

数据库中如何搜索时空行为数据

IDCBT2022-01-10服务器技术人已围观

简介这篇文章主要讲解了“数据库中如何搜索时空行为数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库中如何搜索时

这篇文章主要讲解了“数据库中如何搜索时空行为数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库中如何搜索时空行为数据”吧!

数据结构

时空行为数据包含三个属性:时间、空间和对象。

非结构化索引:

create table test(   id int8,   crt_time timestamp, -- Time   pos geometry, -- Location   obj jsonb -- Object description  );

除了应用于JSON,结构化数据还可以用于对象描述。例如:

create table test(   id int8,   crt_time timestamp, -- Time   pos geometry, -- Location   c1 int, -- Some property examples   c2 int,   c3 text,   c4 float8,   c5 int,   c6 date,   c7 text,   c8 int,   c9 int,   c10 int  );

时空行为数据的SQL查询实例

select * from test   where   pos <-> ? < ?   and crt_time between ? and ?   and ( (c1 = ? and c2 between ? and ?) or c10=?)   ...   ;

优化方法

考虑运用以下知识:

时间序列BRIN索引

crt_time字段是一个时间序列字段,表示生成数据的时间。在PostgreSQL堆存储中,存储和该字段的值具有很强的线性相关性。

因此,BRIN索引很合适。

使用BRIN索引来代替分区表进行TPC-H测试。大范围搜索的性能甚至优于使用分区表时的功能。

create index idx_test_1 on test using brin(crt_time);

空间索引

显然,空间检索需要空间索引。PostgreSQL中可以使用三种方法实现空间检索。

1. 几何类型的GIST索引

create index idx_test_2 on test using gist(pos);

该索引支持空间KNN搜索和空间位置确定等功能。

2. 几何类型的主索引

create index idx_test_2 on test using spgist(pos);

该索引支持空间KNN搜索和空间位置确定等功能。

3. Geohash和B-tree索引(将经度和纬度转换为Geohash并为hash值创建B-tree索引)。只需使用表达式索引。

create index idx_test_3 on test using btree( ST_GeoHash(pos,15) );

此索引支持前缀搜索(其能落实编码地理信息网格中包含的关系)。它属于有损索引,需要二次过滤。

标签:

很赞哦! ()

本栏推荐