postgresql存储时序、轨迹数据

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。postgresql存储时序、轨迹数据,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

需求

轨迹查询

查询车辆一天的指标(轨迹、速度)

业务:
1、一天有1800万条指标数据

2、多个指标要存储、指标随时增加

  • json类型

3、时序数据

技术要求:
1、

空间索引

查询一个区域内经过的车辆
技术要求:
1、一辆车一天的轨迹,存一行数据。从原始表进行汇总。
2、空间聚合函数。点可以以线串形式保存。划分时间间隔(如每15分钟创建一个线串),如果范围内没有点,就不生成线串。

  • 考虑轨迹飘逸(断)的问题。如果线串的长度大于几公里,就认为是飘逸数据。

dba群里问一下方案

参考资料

https://github.com/digoal/blog
https://www.cnblogs.com/88223100/p/PostgreSQL_real-time_position_tracking-trajectory_analysis_system_practice.html
https://github.com/digoal/blog/blob/master/201604/20160414_01.md?spm=a2c6h.12873639.article-detail.16.a9fd5f37wN8Sfy&file=20160414_01.md

postgresql 提供了块级索引(简称 BRIN),主要适用于类似时序数据之类的,有着天然的顺序,而且都是添加写的场景。相比于 btree 索引,它的体积小得多,非常适用于大数据量的场景。

表结构设计

原始点表

字段 类型
device_id string
time timestamp
metric jsonb {“speed”: 1.0,”loc” : {1,2}} https://www.cnblogs.com/chenyablog/p/14647273.html

1、表根据timestamp字段进行分区,每天存储一个分区
2、字段device_id创建bree索引
3、字段time创建块索引

http://www.postgres.cn/docs/14/ddl-partitioning.html

  • 分区之后,索引是创建在分区表上的

轨迹表

字段 类型
device_id
date
geo geometry LINESTRING(0 0, 1 1,2 1,2 2)
customer_id 客户id

1、根据date进行分区存储
2、date字段创建bree索引
2、轨迹字段,创建空间索引

brew install pg

https://blog.csdn.net/kmust20093211/article/details/44359053

优化

1、date、customer_id进行分区
2、主键索引可以没有。

测试情况

  • 只insert
  • 关闭同步写入

image
image
一秒写入6万。
image

设想:
1、同时保留mongo和postgresql。 postgresql给用户使用,mongo给第三方,以及统计脚本使用。

select time, device_id,entity_id, st_astext(point) from device_metric where time >=  '2023-12-17 00:00:00'::timestamp and time < '2023-12-18'::timestamp and ST_Within(point,ST_GeomFromText('POLYGON((120.68212 36.966528, 120.683314 36.966528, 120.683314 36.965702, 120.68212 36.965702, 120.68212 36.966528))')) and customer_id = 2030;

Time: 1367.049 ms
Time: 109.632 ms

3000多条轨迹,2s内。时间很稳定。

select * from device_metric where time >=  '2023-12-11 02:00:00'::timestamp and time < '2023-12-17'::timestamp and device_id = '01080803747' and customer_id = 2030;

738.466ms
3397.579ms


查轨迹:
1、5天,1.3万轨迹,4s多。
2、

空间索引、B tree复合索引

https://developer.aliyun.com/article/109832

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/203698.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!