无人驾驶背后的技术 - PostGIS点云(pointcloud)应用 - 2

简介:

标签

PostgreSQL , PostGIS , box , grid , pointcloud , pgpointcloud , point聚合 , KNN , 自动驾驶 , 自动配送 , 无人驾驶 , 机器人配送 , 物流 , 无用功


背景

无人驾驶、配送机器人的业务背景,方案设计请参考:

《无人驾驶背后的技术 - PostGIS点云(pointcloud)应用》

本文针对以上文章,补充一些新鲜内容。

一、transfer table消除索引build、格式检查等无用功

在服务端存储了所有的pointcloud数据,而终端(如无人车)仅仅需要车辆需要行经的位置(既定线路、活动范围、行政区)的points数据。

终端的数据是从服务端下发而来。

假设服务端的数据已经按行政区或GEOHASH CODE range划分,建立了对应的分区表,并且已经构建了GiST索引。

这些表的数据从服务端LOAD(通过insert\copy的方式)到终端(无人车)时,正常情况下无人车还需要再构建一次GiST索引。重复构建索引属于无用功,是浪费资源的做法。

而如果使用transfer table的方法,直接LOAD贝数据文件,索引文件,构建数据库catalog元数据,可消除终端数据insert、COPY方式引入的重复劳动(BUILD索引、检查数据格式等)。实现快速导入,还能节能减排。

pic

使用table transfer节能减排。关键的因素,数据的分区需要足够细致,这样的话导出到终端不会造成数据冗余。(例如终端要的是杭州市西湖区的点云数据,而服务端是按市级行政区分区的,那么使用table transfer需要拷贝整个杭州市的数据文件到终端(无人车),那就很不好。)

pgtransfer是一个插件,用法如下

https://postgrespro.com/docs/postgresproee/9.6/pgtransfer.html

二、大量数据优化之 - 线性存储与BRIN索引

GiST是空间聚集索引,支持的数据类型包括地理位置类型等。支持按距离排序,按距离搜索数据等,GiST精确度非常高。

geohash是一种编码,将地球上的经纬度从坐标转换为一串字符串, 对于相邻的位置,geohash的字符串也是相似的,相邻的位置geohash值拥有相同的prefix。

详见:

《geohash vs PostGIS》

PostGIS提供的st_geohash函数可以将geometry类型转换为一串geohash字符串。

https://postgis.net/docs/ST_GeoHash.html

GiST索引的优劣

1. 当需要按某个点,搜索附近的点,并按顺序输出记录时,GiST索引的效率非常的高。(当需要按空间顺序返回大量记录时,GiST索引不占优势。)

2. 当位置数据量非常大时,由于GiST索引需要计算空间聚集,建立索引的速度会比较慢。(如果数据是并发插入的,可以调动所有的CPU资源构建索引,性能不错,例如32核可以达到17万/s的写入速度(含GiST索引)。)

3. GiST索引包含了空间数据的VALUE,占用的空间比较大(相比接下来的BRIN索引)。

4. 如果数据在空间维度上乱序存储,使用GiST索引返回大量相邻数据时,会导致heap IO放大。原理如下

《索引顺序扫描引发的堆扫描IO放大背后的统计学原理与解决办法 - PostgreSQL index scan enlarge heap page scans when index and column correlation small.》

geohash的优劣

geohash是一串字符串,相邻的位置,字符串也有顺序相似性。

如果将数据按geohash排序存储(堆存储本身是无序的,但是可以使用cluster语法,按某个索引排序存储),那么数据将变成空间有序存储的模式,有序存储有一个好处,不同的数据块存储的数据的BOUND非常清晰。

当数据有序存储时,可以使用块级索引(BRIN),按geohash搜索一个范围的数据时,从brin返回包含这个范围的数据块,然后从这些数据块中获取数据,效率非常高。(获取少量数据的效率不如GiST,但是获取大量数据的效率与GiST相当)

《PostgreSQL 物联网黑科技 - 瘦身几百倍的索引(BRIN index)》

BRIN索引存储的是每个数据块(或者连续的数据块)的元信息(min,max,avg,count,nulls count等)。适合有序存储(VALUE与行号线性相关性好)的数据。

作为点云数据索引的案例如下:

https://2016.foss4g-na.org/sites/default/files/slides/gbroccolo_FOSS4GNA2016_pointcloud_0.pdf

《Manage LiDAR data with PostgreSQL》

GiST和BRIN选哪个?

1. 如果大量的需求是返回少量数据,并且有KNN搜索,距离排序输出的需求。建议使用GiST,效率极其高。比如轨迹系统,比拼REDIS性能还要高400%:

《PostgreSQL 物流轨迹系统数据库需求分析与设计 - 包裹侠实时跟踪与召回》

2. 如果大量的需求是返回大量点数据(例如100万以上),那么建议将数据按geohash堆顺序存储,减少IO放大,并使用BRIN索引减少索引的BUILD时间和索引的空间占用。

https://postgis.net/docs/using_postgis_dbmanagement.html#brin_indexes

geohash的分区作用

通常用户存储地理信息,会使用geometry字段,然而geometry类型分区表不好实现。

一个比较理想的方法是使用geohash来进行范围分区(因为相邻位置的geohash也相似)。

在PostgreSQL中,有两种方法实现分区:一种是实体字段,一种是表达式分区。如果你使用的是Greenplum,只支持实体字段分区。

create table test(id int, loc geometry, loc_geohash text);  -- loc_geohash=st_geohash(loc),按loc_geohash进行范围分区  
  
或  
  
create table test(id int, loc geometry);  -- 按表达式st_geohash(loc)进行范围分区。  

三、大量数据优化之 - 聚合与prefix搜索

数据聚合对大批量数据的查询有非常好的性能提升效果。

在第一篇文章中已经介绍了,数据聚合后,查询500万个点,响应时间从43秒降到了312毫秒。

《无人驾驶背后的技术 - PostGIS点云(pointcloud)应用》

聚合的方法也很多:

1. 使用网格聚合,前一篇文章已有介绍。

2. 另一种方法是使用geohash prefix聚合,也较为通用。

https://postgis.net/docs/ST_GeoHash.html

四、获取道路覆盖点云 - 道路与格子

终端(无人车)在规划好路线后,需要下载道路覆盖到的点云数据,在PostGIS中属于两个集合类型,求overlap。

pic

比如

1. 点云表:点云的数据是按geohash或网格聚合的数据,比如每个格子代表一平米的区域。

2. 道路:道路覆盖的区域,是一个多边形。

在点云表中取出与多边形overlap的数据即可,这个操作可以使用GiST索引,效率非常高。

https://postgis.net/docs/ST_Geometry_Overabove.html

https://postgis.net/docs/reference.html

五、量产无人车 - 点云数据流式克隆

终端需要存储运行区域的片区点云数据,通常在一个片区运行的无人车会有很多辆,每辆无人车的数据是一样的。

那么如何给无人车灌点云数据呢?如何更新增量点云数据呢?

一个比较好的办法,每个片区有片区的本地数据库,本地数据库的内容来自云端(全量库)。

当点云数据有更新时,首先更新云端的数据,云端的数据在下推到每个片区的片区数据库。

无人车的数据则来自片区数据库,为了保证数据可以增量流式更新,可以使用PostgreSQL的流式复制,无人车作为备库,流式追踪片区数据库的REDO增量,保证数据是最新的。

pic

只要无人车能连通片区网络,那么就可以流式增量的同步片区数据。

如果无人车的数据只有只读需求,那么建议使用物理流复制(效率最高),如果无人车的数据除了只读,还有写的需求,可以使用PG 10的逻辑订阅(同步效率低于物理流复制,但是更新量不大的话,可以接受)。

《PostgreSQL 逻辑订阅 - 给业务架构带来了什么希望?》

《PostgreSQL 10.0 preview 功能增强 - 备库支持逻辑订阅,订阅支持主备漂移了》

《PostgreSQL 10.0 preview 功能增强 - 逻辑复制支持并行COPY初始化数据》

《PostgreSQL 10.0 preview 逻辑复制 - 原理与最佳实践》

参考

《无人驾驶背后的技术 - PostGIS点云(pointcloud)应用》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
SQL 存储 缓存
面向异构数据的Schema-on-Read分析技术设计与实践
本文是12月4号在《DataFunTalk技术交流会:阿里云实时查询分析专场》分享的议题《面向异构数据的Schema-on-Read分析技术与实践》的文字版记录。一、背景介绍数字化转型浪潮中,物理世界到数字世界的映射带来了各种各样结构的数据。第一种是完全无结构的数据,完全没有任何规律,典型的如syslog这种记录系统事件的日志;第二种是半结构化数据,有局部的结构,但是不同的行的字段的数目是不确定的
20470 3
面向异构数据的Schema-on-Read分析技术设计与实践
|
6月前
|
自然语言处理 PyTorch 算法框架/工具
大模型太慢?别急着上 GPU 堆钱:Python + ONNX Runtime 优化推理性能实战指南
大模型太慢?别急着上 GPU 堆钱:Python + ONNX Runtime 优化推理性能实战指南
1012 10
大模型太慢?别急着上 GPU 堆钱:Python + ONNX Runtime 优化推理性能实战指南
|
6月前
|
人工智能 关系型数据库 数据库
阿里云RDS Supabase是什么?云数据库RDS PostgreSQL的Supabase全托管服务
阿里云RDS Supabase是基于RDS PostgreSQL的全托管Supabase服务,开箱即用,支持REST/GraphQL API、认证授权、OSS对象存储、实时通信及向量/AI能力(集成pgvector、百炼Qwen等),适用于MVP验证、AI应用与SaaS开发,免运维底层基础设施。(239字)
491 8
|
11月前
|
人工智能 Cloud Native 关系型数据库
云栖重磅|瑶池数据库:从云原生数据底座向“AI就绪”的多模态数据底座演进
瑶池数据库:从云原生数据底座向“AI就绪”的多模态数据底座演进
|
6月前
|
人工智能 Shell API
OpenClaw(Clawdbot)阿里云及本地部署保姆级指南:附GitHub Codespaces 700+Skills赋能实操
OpenClaw(原Clawdbot、Moltbot)作为2026年热门的开源AI智能体框架,GitHub星标已破13万,其核心价值在于“可执行的自动化能力”——不仅能聊天推理,还能连接各类工具完成实际任务。但单独的OpenClaw如同“瘫痪的天才”,模型是大脑,而Skills(技能插件)才是执行力的核心。GitHub上的`awesome-openclaw-skills`仓库收录了700+技能,覆盖开发、办公、生活等30多个领域,让AI真正拥有“手脚”。
1064 4
|
8月前
|
人工智能 文字识别 安全
目前最火的 AI 助手 Clawdbot 又又又改名了 并且发布新版本
OpenClaw(原Clawdbot/Moltbot)是火爆开源AI助手,支持飞书、WhatsApp、Telegram等20+平台,数据全本地、可调OCR/数据库/Shell命令。新版本新增Twitch等渠道、KIMI等模型及图片交互,安全强化升级。GitHub星标超10万!
4301 1
|
人工智能 关系型数据库 分布式数据库
阿里云PolarDB重磅发布云原生与Data+AI新特性,打造智能时代数据引擎
阿里云PolarDB重磅发布云原生与Data+AI新特性,打造智能时代数据引擎
1135 0
|
Java
【源码】【Java并发】【ConcurrentHashMap】适合中学体质的ConcurrentHashMap
本文深入解析了ConcurrentHashMap的实现原理,涵盖JDK 7与JDK 8的区别、静态代码块、构造方法、put/get/remove核心方法等。JDK 8通过Node数组+链表/红黑树结构优化并发性能,采用CAS和synchronized实现高效锁机制。文章还详细讲解了hash计算、表初始化、扩容协助及计数更新等关键环节,帮助读者全面掌握ConcurrentHashMap的工作机制。
425 6
【源码】【Java并发】【ConcurrentHashMap】适合中学体质的ConcurrentHashMap
|
JavaScript IDE 前端开发
从 VS Code 的历史中可以学到的经验
VS Code 作为目前使用人数绝对 Top1 的 IDE/Editor(Stackoverflow 2021 调研:https://insights.stackoverflow.com/survey/2021#section-most-popular-technologies-integrated-development-environment 有 71% 的开发者使用),一定是做对了一些关键的事情才达到今天的规模,如果想做好一个技术性的产品或工具,细细研究,一定能有所收获。
3330 0
从 VS Code 的历史中可以学到的经验
|
运维 安全 Cloud Native
阿里云云安全中心全面解析
阿里云云安全中心作为一款集持续监测、深度防御、全面分析、快速响应能力于一体的云上安全管理平台,为企业提供了全方位的安全保障。本文将详细介绍阿里云云安全中心的功能、应用场景、收费标准以及购买建议,帮助您更好地了解和利用这一强大的安全工具。
阿里云云安全中心全面解析