PostGIS 地理信息数据 多核并行处理

标签

PostgreSQL , PostGIS , 栅格 , raster , 多核并行


背景

自从PostgreSQL 9.6支持CPU多核并行计算后,PostgreSQL最流行的插件之一PostGIS,用户对多核需求也越来越多。

原因是PostGIS中有大量的运算是非常耗费CPU资源的,比如raster类型相关的运算。

PostGIS tends to involve CPU-intensive calculations on geometries, support for parallel query has been at the top of our request list to the core team for a long time.

Now that it is finally arriving the question is: does it really help?

PostGIS 发布的2.3.1 版本,已经可以看到诚意了吧,以下函数已经支持并行计算了。

Mark ST_Extent, ST_3DExtent and ST_Mem* agg functions as parallel safe so they can be parallelized

扫描并行

扫描并行,比如扫描节点有大量数据要被过滤时,或者说查询子句中有大量的运算时,使用并行可以大大提升其效率。

例如

1. filter过滤掉大量的数据,并且filter本身运算量较大时,使用CPU多核并行,效果明显

select * from table where filter...;

2. 当func函数或者OP操作符运算量较大时,使用CPU多核并行,效果非常明显

比如聚合运算,或者一些业务逻辑运算(虽然TABLE本身没几条记录,但是每条记录的运算耗时很长时,并行效果明显)。

select func(x), x op y from table ...;

JOIN并行

我们在使用explain 观察SQL时,或者使用perf跟踪SQL的开销时,对于一个多个表数据JOIN的SQL,如果JOIN的数据量很大,可能就会成为整个SQL的性能瓶颈。

现在可以使用CPU的多核并行来加速JOIN了。

聚合并行

聚合操作,比如统计某个维度的平均值、最大、最小、SUM等,在金融、分析行业用得非常多,处理的数据量大,运算量也较大。

除了扫描码并行,聚合函数本身也要支持并行才行,比如sum,count, avg, 可以想象并行处理都是安全的。

应该这么说,凡是在分布式数据库中支持的2阶段聚合函数,并行都是安全的。

关于分布式数据库的2阶段并行聚合的原理请参考

《hll插件在Greenplum中的使用 以及 分布式聚合函数优化思路》

《Postgres-XC customized aggregate introduction》

观察并行、并行原理

如果你要观看并行效果,这样设置一下就好了

postgresql.conf

max_worker_processes = 64
max_parallel_workers_per_gather = 8
parallel_tuple_cost = 0
parallel_setup_cost = 0
min_parallel_relation_size = 0
force_parallel_mode = on

table

alter table table_name set (parallel_workers=8);

关闭并行效果

alter table table_name set (parallel_workers=0);
set force_parallel_mode = off;

并行原理

参考

《PostgreSQL 9.6 并行计算 优化器算法浅析》

《PostgreSQL 9.6 并行计算 优化器算法浅析》

GIS地理信息处理与并行

前面说的是几种使用多核并行的应用场景,那么对于GIS数据,如何利用这些并行技术呢?

下面的例子取自

http://blog.cleverelephant.ca/2016/03/parallel-postgis.html

1. 扫描并行

EXPLAIN ANALYZE
  SELECT Count(*)
    FROM pd
    WHERE ST_Area(geom) > 10000;  

Finalize Aggregate
(cost=20482.97..20482.98 rows=1 width=8)
(actual time=345.855..345.856 rows=1 loops=1)
->  Gather
   (cost=20482.65..20482.96 rows=3 width=8)
   (actual time=345.674..345.846 rows=4 loops=1)
     Number of Workers: 3
     ->  Partial Aggregate
         (cost=19482.65..19482.66 rows=1 width=8)
         (actual time=336.663..336.664 rows=1 loops=4)
           ->  Parallel Seq Scan on pd
               (cost=0.00..19463.96 rows=7477 width=0)
               (actual time=0.154..331.815 rows=15540 loops=4)
                 Filter: (st_area(geom) > 10000)
                 Rows Removed by Filter: 1844
Planning time: 0.145 ms
Execution time: 349.345 ms

2. JOIN并行

CREATE TABLE pts AS
SELECT
  ST_PointOnSurface(geom)::Geometry(point, 3347) AS geom,
  gid, fed_num
FROM pd;  

CREATE INDEX pts_gix
  ON pts USING GIST (geom);

找出与蓝色区域重叠的点

EXPLAIN ANALYZE
 SELECT Count(*)
  FROM pd
  JOIN pts
  ON ST_Intersects(pd.geom, pts.geom);  

The ST_Intersects() function is actually a SQL wrapper on top of the && operator and the _ST_Intersects() function, but unwrapping it and using the components directly also has no effect.  

改成  

EXPLAIN ANALYZE
 SELECT Count(*)
  FROM pd
  JOIN pts
  ON pd.geom && pts.geom
  AND _ST_Intersects(pd.geom, pts.geom);

UPDATE: Marking the geometry_overlaps function which is bound to the && operator as PARALLEL SAFE allows PostgreSQL to generate parallel join plans when the index is in place.

3. 聚合并行

以ST_Union为例。

不建议使用ST_Union(),因为它使用的是级联UNION的方式,开启并行并没有效果,原因是需要使用memory copy, 聚合过程中,越到后面,耗费越大。

ST_MemUnion 可以替代ST_Union,在并行中取得很好的效果

“Fortunately” we have such an aggregate, the old union implementation from before we added “cascaded union”.

The “memory friendly” union saves memory by not building up the array of geometries in memory, at the cost of spending lots of CPU unioning each input geometry into the transfer state.

支持并行的ST_MemUnion聚合函数如下

CREATE AGGREGATE ST_MemUnion (
  basetype = geometry,
  sfunc = ST_Union,
  combinefunc = ST_Union,
  stype = geometry
 );

例如

EXPLAIN ANALYZE
  SELECT ST_Area(ST_MemUnion(geom))
    FROM pd
    WHERE fed_num = 47005;  

 Finalize Aggregate
 (cost=16536.53..16536.79 rows=1 width=8)
 (actual time=2263.638..2263.639 rows=1 loops=1)
   ->  Gather
   (cost=16461.22..16461.53 rows=3 width=32)
   (actual time=754.309..757.204 rows=4 loops=1)
         Number of Workers: 3
         ->  Partial Aggregate
         (cost=15461.22..15461.23 rows=1 width=32)
         (actual time=676.738..676.739 rows=1 loops=4)
               ->  Parallel Seq Scan on pd
               (cost=0.00..13856.38 rows=64 width=2311)
               (actual time=3.009..27.321 rows=42 loops=4)
                     Filter: (fed_num = 47005)
                     Rows Removed by Filter: 17341
 Planning time: 0.219 ms
 Execution time: 2264.684 ms

小结

1. 自从PostgreSQL 9.6支持并行后,由于PostgreSQL开放了并行接口,比如聚合函数,使用并行时,会以两阶段方式运行,你需要增加一个合并函数。

周边的插件,也可以很方便的将原有的聚合或者操作符,改造为并行的模式,从而享受PostgreSQL多核并行带来的效果。

2. 其他加速技术,包括LLVM,列存储,向量化,算子复用,GPU加速等。

《PostgreSQL 向量化执行插件(瓦片式实现) 10x提速OLAP》

《分析加速引擎黑科技 - LLVM、列存、多核并行、算子复用 大联姻 - 一起来开启PostgreSQL的百宝箱》

https://github.com/pg-strom

参考

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

https://trac.osgeo.org/postgis/wiki/WKTRaster

http://osgeo-org.1560.x6.nabble.com/Parallel-Support-td5258386.html

http://blog.cleverelephant.ca/2016/03/parallel-postgis.html

https://github.com/pramsey/postgis/tree/parallel

http://postgis.net/docs/manual-2.3/release_notes.html#idm40209

时间: 2024-10-22 13:21:57

PostGIS 地理信息数据 多核并行处理的相关文章

四川投资15亿 布局西部地理信息数据中心

在新一轮大数据热和人工智能热潮中,地理信息大数据开始受重视.然而,大量的地理信息数据在政府手里,或者没有被清洗出来.(数据清洗是指对数据进行重新审查和校验,删除重复信息.纠正存在的错误,并提供数据一致性) 四川省政府希望通过建设西部地理信息大数据中心和产业园区吸引企业,发展地理信息大数据产业.其探索,是大数据时代地方政府在垂直领域的数据开放和产业发展诉求上的一个缩影. 四川省测绘地理信息局局长马赟接受21世纪经济报道记者专访时谈到,四川从汶川地震后,地理信息测绘和相关产业开始受重视并起步,如何培

时序数据库分析 - TimescaleDB时序数据库介绍

标签 PostgreSQL , TimescaleDB , 时间序列 , 物联网 , IoT 背景 随着物联网的发展,时序数据库的需求越来越多,比如水文监控.工厂的设备监控.国家安全相关的数据监控.通讯监控.金融行业指标数据.传感器数据等. 在互联网行业中,也有着非常多的时序数据,例如用户访问网站的行为轨迹,应用程序产生的日志数据等等. 时序数据有几个特点 1. 基本上都是插入,没有更新的需求. 2. 数据基本上都有时间属性,随着时间的推移不断产生新的数据,旧的数据不需要保存太久. 业务方对时序

智慧武汉地理信息大数据中心上线 比百度地图更全

昨日,智慧武汉地理信息大数据中心正式上线.数据中心集合了全市政务电子地图和三维地图,包含政务门户."天地图·武汉"."武汉地理"微信公众号3个端口,供高校.企业及个人免费查询使用. 智慧武汉地理信息大数据中心是我市<大数据产业发展行动计划(2014-2018)>明确提出重点建设的8大云数据中心之一.目前,2000年以来武汉历年遥感影像.中心城区及新城区城关镇800平方公里三维模型.全市200万条地名地址.300万栋房屋,全市道路.水系.山体信息,以及全市

地理信息行业的大数据发展与应用

摘要: 如今,大数据为地理信息行业发展带来了新的机遇.伴随大数据技术的发展,地理信息采用的各种新技术也在不断涌现.大数据表现出体量大.变化速度快.模态多样.真伪难辨等特征,但背后隐藏的价值巨大.随着大数据时代到来,人们最关心的是如何从大数据中挖掘出巨大的价值. 传统的地理信息采集是专业任务,强调几何精确性,测绘遥感是主要的采集手段.而大数据地理信息采集手段更为丰富和自由,传感器网络.个体出行过程.网络行为.消费记录等均可能成为大数据地理信息采集手段,强调非专业性.实时性和全面性,地理空间信息形态

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

标签 PostgreSQL , PostGIS , box , grid , pointcloud , pgpointcloud , point聚合 , KNN , 自动驾驶 , 自动配送 , 无人驾驶 , 机器人配送 , 物流 背景 科幻电影的场景随着技术的发展,正在一步步的从荧幕变成现实.从军用到民用,比如汽车厂商.科技公司在尝试的无人驾驶,无人飞行器. 无人驾驶应用非常广泛,比如快递行业,时机成熟以后,将来可能快递员这个职业也会逐渐从社会上消失(解放快递员的双手和创造力,让更多的人参与到科

网御星云发布320G云数据中心安全网关产品

云计算数据中心作为未来新一代信息技术与IT应用方式变革的核心,已经成为当前信息技术产业发展和应用创新的热点.同时,作为我国"十二五"规划中信息安全战略性新兴产业发展的重点领域,信息安全已成为云计算产业发展的排头兵.作为国内信息安全领军企业,北京网御星云信息技术有限公司于近日率先发布了320G云数据中心安全网关产品, 并将配合更高性能.更高可靠的安全解决方案掀起一场云计算数据中心信息建设与传统数据中心云化的热潮.通过在云技术下引入安全防护手段,强化云系统的抗攻击能力,为上层应用系统提供可

天融信携手英特尔发布云数据中心边界防护解决方案

近日,天融信携手英特尔在北京联合举办了云数据中心边界防护解决方案发布会.天融信公司高级副总裁.英特尔公司高层领导,以及40余家媒体记者出席 了会议.众所周知,云数据中心是当今企业信息化建设最重要的环节,其中承载着大量的企业机密信息.在棱镜门事件之后,企业对数据安全的敏感度已经大大超过 以往,保护云数据中心也成为企业安全建设的重中之重.为此,天融信携手英特尔发布了最新一代的云数据中心边界防护解决方案,旨在帮助企业在网络边界就抵挡 住威胁,免除后顾之忧,从而专注于业务发展. 数据中心的"云化&quo

地理教学中使用WPS表格分析趋势数据

在地理课的教学中适当的引入信息化方式,不仅仅可以从本质上帮助学生理解地理信息数据中所蕴含的内容,还有助于培养学生处理复杂数据的能力. 高中地理中的数据很多都是跟趋势有关的,如自然地理中的温度.气压.海拔等系列相关数据和人文地理中人口变化等内容都涉及到两个或者多个相关量的变化情况.WPS表格具有强大的图表功能,不仅能以多种形式从各方面将数据予以展示,还具有一定的分析功能,为具有变化趋势的相关数据添加趋势线并做出评价. 现以上述内容为例,将高中地理课堂中的实例予以展示. 1.气温-海拔变化趋势教学

c++-openmp 能否并行处理数组和vector

问题描述 openmp 能否并行处理数组和vector 用openmp做多核并行处理遇到了问题,例如有个vector a 想要对下面并行 #program opm parallel for num_threads(2) for (int i=0;i<a.size();i++) cout <<a[i]; 并行下a[i]被共享读,设置处理器个数为1,2,4,6,8个(本人机器12个核), 发现处理速度没变,有时候还会报错. 如何实现上面并行? 上面的例子就是一个我遇到问题的简单化,但是想实现