新零售空间数据库实践一例 - PostGIS 点面叠加视觉判断输出

标签

PostgreSQL , 点面视觉输出 , subquery , nestloop join , 空间索引 , gist


背景

在新零售、快递等行业,有大量的点数据(例如包裹位置、快递员位置、仓库位置等),同时有大量的面数据(如小区,商圈,写字楼等)。

如何判断实时的正在配送的包裹落在哪个面呢?并且将之联系起来。

这个从视觉角度来思考,非常简单。

例如有一个地图,将其划分为若干个面(例如前面提到的小区)。

然后有一些小点,这些是POINT数据。

我们从图上一眼就能看出每个点落在哪个小区(面)里面。

在数据库中,这可能是两份数据(一份为点,一份为面)。输出的实际上是点+面(ID)的数据。

怎么做到高效的输出呢?

DEMO

搜索某些订单,当前处于哪个面。这是非常典型的点面判断需求。

接下来的例子,有25万个面,查询若干笔订单属于哪个面。

1、创建、生成静态的面数据(通常面的数据是静态的,例如小区,商圈,大楼,仓库覆盖范围等)

postgres=# create table t2(id int, pos box);
CREATE TABLE  

-- 在(0,0)到(500,500)的平面上,划分成251001个正方形的小面。  

postgres=# do language plpgsql $$
declare
x int;
y int;
begin
for x in 0..500 loop
for y in 0..500 loop
  insert into t2 values (x+y, box(point(x,y),point(x+1,y+1)));
end loop;
end loop;
end;
$$;
DO  

postgres=# select count(*) from t2;
 count
--------
 251001
(1 row)

创建空间索引

postgres=# create index idx_t2 on t2 using gist(pos);
CREATE INDEX

2、创建、生成点的数据。

postgres=# create table t1(id int, pos point);
CREATE TABLE
-- 在(0,0),(500,500)的平面上,生成10000个随机的点  

postgres=# insert into t1 select id, point(random()*500, random()*500) from generate_series(1,10000) t(id);
INSERT 0 10000

3、查询每个点,属于哪个面。

方法1,JOIN

postgres=# explain analyze select t1.*,t2.* from t1 join t2 on (t2.pos @> box(t1.pos, t1.pos));
                                                       QUERY PLAN
------------------------------------------------------------------------------------------------------------------------
 Nested Loop  (cost=0.29..73322.20 rows=2510010 width=56) (actual time=0.094..1191.076 rows=10000 loops=1)
   ->  Seq Scan on t1  (cost=0.00..116.00 rows=10000 width=20) (actual time=0.020..1.047 rows=10000 loops=1)
   ->  Index Scan using idx_t2 on t2  (cost=0.29..4.81 rows=251 width=36) (actual time=0.039..0.118 rows=1 loops=10000)
         Index Cond: (pos @> box(t1.pos, t1.pos))
 Planning time: 0.102 ms
 Execution time: 1191.619 ms
(6 rows)

方法2,SUBQUERY

postgres=# explain analyze select t1.*, (select t2 from t2 where t2.pos @> box(t1.pos,t1.pos) limit 1) from t1;
                                                            QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------
 Seq Scan on t1  (cost=0.00..13706.74 rows=10000 width=52) (actual time=0.077..427.466 rows=10000 loops=1)
   SubPlan 1
     ->  Limit  (cost=0.29..1.36 rows=1 width=60) (actual time=0.042..0.042 rows=1 loops=10000)
           ->  Index Scan using idx_t2 on t2  (cost=0.29..269.88 rows=251 width=60) (actual time=0.042..0.042 rows=1 loops=10000)
                 Index Cond: (pos @> box(t1.pos, t1.pos))
 Planning time: 0.080 ms
 Execution time: 427.942 ms
(7 rows)

如果是1000笔订单,返回差不多40毫秒

postgres=# explain (analyze,verbose,timing,costs,buffers) select t1.*, (select t2 from t2 where t2.pos @> box(t1.pos,t1.pos) limit 1) from t1 limit 1000;
                                                                  QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.00..1370.67 rows=1000 width=52) (actual time=0.069..39.754 rows=1000 loops=1)
   Output: t1.id, t1.pos, ((SubPlan 1))
   Buffers: shared hit=3002
   ->  Seq Scan on public.t1  (cost=0.00..13706.74 rows=10000 width=52) (actual time=0.069..39.658 rows=1000 loops=1)
         Output: t1.id, t1.pos, (SubPlan 1)
         Buffers: shared hit=3002
         SubPlan 1
           ->  Limit  (cost=0.29..1.36 rows=1 width=60) (actual time=0.039..0.039 rows=1 loops=1000)
                 Output: t2.*
                 Buffers: shared hit=3000
                 ->  Index Scan using idx_t2 on public.t2  (cost=0.29..269.88 rows=251 width=60) (actual time=0.039..0.039 rows=1 loops=1000)
                       Output: t2.*
                       Index Cond: (t2.pos @> box(t1.pos, t1.pos))
                       Buffers: shared hit=3000
 Planning time: 0.066 ms
 Execution time: 39.830 ms
(16 rows)

因为@>暂时不支持hash join,因此subquery更优一些。

本文没有用到PostGIS空间数据库插件,而是使用了内置的平面几何类型,用于演示。

真实场景请使用PostGIS。

http://postgis.net/

例如

select  t1.*, (select t2 from t2 where ST_Within(t1.geom, t2.geom) limit 1) from t1;

小结

点面判断在GIS信息崛起的今天,在越来越多的企业中成为了非常常见的需求,比如文中提到的。

PostgreSQL在空间数据库领域有非常丰富的应用,从科研、军工、商业到民用,无处不在。

结合空间索引,BRIN索引实现空间数据的高效率检索是很轻松的事情。

时间: 2024-09-22 09:45:17

新零售空间数据库实践一例 - PostGIS 点面叠加视觉判断输出的相关文章

美团云推新零售解决方案 全面助力零售改革

实体零售企业正在逐步提高信息化水平,将线下物流.服务.体验等优势与线上融合.这让新零售模式被推向了风口.值得注意的是,提供线上依托的云平台在这一模式中就发挥着承上启下的重要作用.在此背景下,美团云近日宣布,将在2017年重点布局新零售领域. 云平台成新零售模式重要支撑 国家统计局的数据显示,全国网上零售额的增速已经连续三年下滑.根据艾瑞咨询的预测:国内网购增速的放缓仍将以每年下降8-10 个百分点的趋势延续.传统电商发展的"天花板"已经依稀可见,对于电商企业而言,唯有变革才有出路. 在

(新零售)商户网格化运营 - 阿里云RDS PostgreSQL最佳实践

标签 PostgreSQL , PostGIS , 地理位置 , KNN , 近邻检索 , 网格检索 , polygon中心点 , 半径搜索 背景 伟大的马老师说: "纯电商时代很快会结束,未来的十年.二十年,没有电子商务这一说,只有新零售这一说,也就是说线上线下和物流必须结合在一起,才能诞生真正的新零售" 线上是指云平台,线下是指销售门店或生产商,新物流消灭库存,减少囤货量. 电子商务平台消失是指,现有的电商平台分散,每个人都有自己的电商平台,不再入驻天猫.京东.亚马逊大型电子商务平

揭秘天猫618的背后,释放了哪些新零售能量?

天猫618正是检验天猫新零售的试验田. 在天猫618期间,共吸引了全球18万个知名品牌参与其中,每天都有超过1亿消费者被天猫618所吸引.而线上线下融合达到了前所未有的速度和深度,为消费者创造全新的购物体验.区别与以往任何一次零售变革,新零售将通过数据与商业逻辑的深度结合,真正实现消费方式逆向牵引生产变革. 天猫618让新零售照进了现实.数据显示,在天猫618期间,全渠道成交金额是去年同期4倍,全渠道成交笔数是去年同期3倍,线上线下打通的店铺超过100万家,其中美家(家装)的行业渗透率高达37.

曾鸣:新零售的未来 | 干货

10月14日,在2017云栖大会的"阿里巴巴新零售峰会",曾鸣分享了他对未来新零售发展趋势的思考: 谈新零售,需要理解新零售的四个背景 首先,去年马总提出"五新"(新零售.新制造.新金融.新能源.新技术),新零售仅是其中之一. 如果单独思考新零售,很可能会走偏,因为零售只是商业的一个环节,而互联网给广告.零售.物流等行业带去冲击及变革后,下一步影响最大的领域将是营销和品牌,乃至整个供应链. 所以,只有把新零售.新制造.新金融等放在一起看,才能理解新零售到底会发生什么

商务部发布首个“新零售”报告:一文读懂中国新零售现状

近日,商务部流通产业促进中心发布<走进零售新时代--深度解读新零售>报告 . 商务部派出5位博士组成了专业阵容赴市场一线调研新零售发展,完成此份报告,这也是国家部委首次对新零售这一新经济现象进行调研和专题报告发布. 本报告围绕"新零售的两大驱动力"."区别于传统零售的五大新元素" ."新零售引发的五大变革"以及"全球化竞争中的四大指导建议"展开,其中还包括多个代表案例分享. 以下,就和雷锋网一起分享报告的精华内容吧

新零售时代,零售行业如何构建互联网架构

摘要:经过近10年的发展,阿里中间件Aliware摸索出了一套独特的架构实现技术.传统企业企业如何快速复制阿里巴巴互联网架构?Aliware如何赋能新零售?在2017苏州云栖大会企业级互联网架构专场上,阿里巴巴中间件架构师员海滨结合实际案例为大家分享了新零售行业的互联网架构设计和实践经验. 以下内容根据演讲视频以及PPT整理而成. 回顾"五新" 2016年,马云老师在云栖大会上正式提出了"五新"战略.近一年以来,"五新"战略其实已经在大家日常的生

银泰首个新零售双11:CEO陈晓东“微顿悟”了

银泰商业的CEO陈晓东最近迷上了一个词:"微顿悟". 这个被称为零售界"最会说相声"的CEO,对新零售的见解也颇为生动.在双11即将开场前夕,他又"微顿悟"出一些新的见地. 今年双11是银泰新零售的一周年大阅兵.作为阿里巴巴新零售战略的重要阵地,银泰在私有化后的新零售玩法日见成效:ONMINE零食馆."生活选集"家居集合店.各式天猫美妆快闪店一次次刷新成交记录. "对于银泰来说,这是一个不同的'双11'."

云栖大会|新零售时代供应链的重“构”已经开始

"新零售是阿里巴巴面向未来所做出的全新战略愿景规划,是大数据驱动的线上线下融合,是零售核心元素的数字化."   --阿里巴巴CEO 张勇(逍遥子)五天前,全球超过350名顶级投资机构的投资者和分析师来到阿里园区,阿里巴巴以天猫为引擎驱动的新零售战略实施成果成为全球投资者关注的焦点.当天,阿里股价大涨13%,登顶亚洲市值最高公司,并跃居全球第七. 6月13日, 54家领导品牌掌舵人或大中华区CEO齐聚杭州阿里巴巴西溪园区9号馆,与阿里巴巴集团CEO张勇开了一场关于"新零售&qu

一条已经坚持了10年原则,是否能适应波司登“新零售”征程?

今年是波司登成立40周年.作为从1995年至2016年已经连续21年稳居中国羽绒服第一品牌,波司登及其旗下四大品牌"波司登"."雪中飞"."康博"和"冰洁"已经广为人知.集团业务高速发展,波司登信息平台的建设也同步向前. 从90年代开始信息化建设,到2002年实施的分销管理系统,2005年的供应链管理系统和办公自动化系统,2007年的ERP管理平台,以及随后的电子商务系统.商业智能分析系统,再到2016年基于阿里企业互联网架构