PostgreSQL raster(栅格数据) st_value 优化举例

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介:

标签

PostgreSQL , postgis , 栅格 , 波段 , st_value , raster , 优化 , st_intersects , gist 索引 , arcgis


背景

栅格数据是由点阵组成的图像化数据,点阵具备空间属性(边界)。点阵由像素组成,所以每个像素也具备空间属性,同时每个像素内填充数值,数值可以代表温度、灰度、颜色系数、属性、湿度等等。

pic

每个栅格中可以有多个波段,每个波段可以代表一个图层,多个波段可以组合叠加计算。

pic

pic

pic

pic

使用栅格数据,可以实现具备空间、业务属性的数据分析,可视化等。

例如热力图、绿化率图、道路、温度分布等等。

arcgis栅格数据组织形式:

任何有效的栅格格式  
  
像素数组  
  
一个或多个波段  
  
以文件形式存储在磁盘或地理数据库中  
  
70 多种支持的格式  
  
可用作影像服务  
  
可在许多地理处理和分析工具中用作数据源  
  
可在“影像分析”窗口中使用  

由于栅格数据可大可小,当提取某个像素的VALUE时,可能会有一定的性能问题。

使用st_value提取raster指定像素VALUE

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

当栅格文件非常大时,st_value可能要执行很长时间,虽然只提取一个像素的值。(此性能与栅格文件本身的数据组织,检索方法有关。)

使用st_setvalue设置raster指定像素value

http://postgis.net/docs/RT_ST_SetValue.html

栅格背景知识

可以从arcgis或postgis的手册中,学习栅格的知识。

http://resources.arcgis.com/zh-cn/help/main/10.2/#/na/009t00000004000000/

http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#//009t00000007000000

优化方法

业务层优化

1、切割raster,将一个大的raster,切割为若干小的raster

2、边界转geometry, 建立边界的表达式索引

3、判断输入的geometry point是否与被查询raster相交(st_intersects),相交则求st_value,否则不计算st_value

数据库内核层优化

4、当然,还有一种优化方法是对栅格文件本身建立较好的数据模型,便于快速检索。这种方法对业务透明

小结

优化思路:

1、降低计算量,使用切割的方法。

2、降低计算量或IO放大,使用表达式索引。

3、降低精度,对raster进行分层,类似这样的思路

SELECT   
  ST_AsText(ST_Union(pixpolyg)) As shadow  
FROM   
(  
SELECT         ST_Translate(  
                  ST_MakeEnvelope(  
		        ST_UpperLeftX(rast),   
			ST_UpperLeftY(rast),  
			ST_UpperLeftX(rast) + ST_ScaleX(rast)*2,  
			ST_UpperLeftY(rast) + ST_ScaleY(rast)*2,   
			0  
		  ),   
		  ST_ScaleX(rast)*x,   
		  ST_ScaleY(rast)*y  
	       ) As pixpolyg,   
	       ST_Value(rast, 2, x, y) As b2val  
FROM   
  dummy_rast   
CROSS JOIN  
  generate_series(1,1000,2) As x   
CROSS JOIN   
  generate_series(1,1000,2) As y  
WHERE rid =  2  
  AND x <= ST_Width(rast)    
  AND y <= ST_Height(rast)    
) As foo  
WHERE  
ST_Intersects(   
  pixpolyg,  
  ST_GeomFromText('POLYGON((3427928 5793244,3427927.75 5793243.75,3427928 5793243.75,3427928 5793244))',0)  
)   
AND b2val != 254;  

pic

参考

https://stackoverflow.com/questions/31799824/optimizing-st-intersects-in-postgresqlpostgis

http://postgis.17.x6.nabble.com/raster-loading-and-ST-Value-performance-td4999924.html

http://postgis.net/docs/RT_ST_SetValue.html

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

http://postgis.17.x6.nabble.com/ST-value-slow-td5010865.html

http://resources.arcgis.com/zh-cn/help/main/10.2/#/na/009t00000005000000/

http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#//009t00000007000000

http://postgis.net/docs/manual-2.4/RT_reference.html

《PostgreSQL multipolygon 空间索引查询过滤精简优化 - IO,CPU放大优化》

《PostgreSQL 空间切割(st_split, ST_Subdivide)功能扩展 - 空间对象网格化 (多边形GiST优化)》

《PostgreSQL 空间st_contains,st_within空间包含搜索优化 - 降IO和降CPU(bound box) (多边形GiST优化)》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
8月前
|
SQL Oracle 关系型数据库
实时计算 Flink版操作报错之往GREENPLUM 6 写数据,用postgresql-42.2.9.jar 报 ON CONFLICT (uuid) DO UPDATE SET 语法有问题。怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
8月前
|
关系型数据库 PostgreSQL
PostgreSQL排序字段不唯一导致分页查询结果出现重复数据
PostgreSQL排序字段不唯一导致分页查询结果出现重复数据
165 0
|
5月前
|
监控 关系型数据库 数据库
PostgreSQL的索引优化策略?
【8月更文挑战第26天】PostgreSQL的索引优化策略?
124 1
|
1月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据文件
PostgreSQL的物理存储结构主要包括数据文件、日志文件等。数据文件按oid命名,超过1G时自动拆分。通过查询数据库和表的oid,可定位到具体的数据文件。例如,查询数据库oid后,再查询特定表的oid及relfilenode,即可找到该表对应的数据文件位置。
|
7月前
|
消息中间件 Java 关系型数据库
实时计算 Flink版操作报错合集之从 PostgreSQL 读取数据并写入 Kafka 时,遇到 "initial slot snapshot too large" 的错误,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
1028 0
|
7月前
|
DataWorks 安全 关系型数据库
DataWorks产品使用合集之使用Flink CDC读取PostgreSQL数据时如何指定编码格式
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
109 0
|
4月前
|
缓存 关系型数据库 数据库
如何优化 PostgreSQL 数据库性能?
如何优化 PostgreSQL 数据库性能?
183 2
|
5月前
|
监控 关系型数据库 数据库
如何优化PostgreSQL的性能?
【8月更文挑战第4天】如何优化PostgreSQL的性能?
286 7
|
5月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
571 0
|
5月前
|
SQL 关系型数据库 HIVE
实时计算 Flink版产品使用问题之如何将PostgreSQL数据实时入库Hive并实现断点续传
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版