您现在的位置是:主页 > 数据库技术 > 数据库技术
数据库中如何搜索时空行为数据
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) );
此索引支持前缀搜索(其能落实编码地理信息网格中包含的关系)。它属于有损索引,需要二次过滤。
标签:很赞哦! ()