PolarDB Ganos的实时时空计算

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PolarDB是阿里云自主研发的云原生关系型数据库,提供极致弹性、高性能、海量存储及安全可靠的数据库服务。PolarDB PostgreSQL版100%兼容PostgreSQL和Oracle语法,集成Ganos——新一代云原生时空数据库引擎,具备几何、栅格、轨迹等十大核心引擎能力,支持物理世界时空多模数据的混合存储与分析。本文介绍的Ganos实时电子围栏计算基于PolarDB PostgreSQL版,适用于交通物流、禁飞区管理、营销等多种场景,通过Flink实时计算实现高效的空间数据处理。

PolarDB是阿里云自研的云原生关系型数据库,在存储计算分离架构下,利用了软硬件结合的优势,为用户提供具备极致弹性、高性能、海量存储、安全可靠的数据库服务。其中,PolarDB PostgreSQL 版100%兼容 PostgreSQL,高度兼容Oracle语法。Ganos是PolarDB PostgreSQL版提供的新一代云原生时空数据库引擎,在100%兼容PostGIS开源空间数据库基础上,同时具备几何、栅格、轨迹、表面网格、体网格、3D实景、点云、路径、地理网格、快显10大核心引擎完整能力,为数据库构建了面向物理世界时空多模多态数据的混合存储、查询、分析一体化能力。
本文介绍的Ganos实时电子围栏计算能力,依托阿里云云原生关系型数据库PolarDB PostgreSQL版建设输出。
业务场景
什么是电子围栏
电子围栏是一种基于位置的技术。电子围栏不是真正的围栏,而是一些使用多边形或折线定义的虚拟的地理边界,当使用全球定位系统 ( GPS )、射频识别 ( RFID )、Wi-Fi或蜂窝数据移动的应用程序或设备在进入或离开该边界时,会触发有针对性的活动。这个边界被称为电子地理围栏。电子围栏可以围绕地理位置进行创建,小到建筑物、商店或商场,大到城市或整个国家。
电子围栏应用
电子围栏在现实生活中有很多实际应用:
在交通物流行业中,电子围栏可以用于车辆运行状态监控,当司机偏离指定路线时,电子围栏可以向系统发出警示,便于及时处理风险情况;当车辆进入到某些指定区域,可以进行车辆驶入提醒或用于盲区会车提醒服务等。
在禁行/禁飞区域管理中:如机场周围一定范围内设置为无人机禁飞区,当有无人机进入该区域时,电子围栏自动发出风险预警,预防航空危险事件发生。应急事件:台风、龙卷风等恶劣天气下,触发恶劣天气周边的电子围栏系统,当车辆或船只进入恶劣天气影响区域时,自动进行告警。在营销场景中:当客户进入商家设置的电子围栏时,可以自动进行营销活动的推送,如优惠券推送等,提升营销效率。

电子围栏其他场景还包括:
• 物联网安防类:需要监护的儿童或老人离开预先设置的电子围栏时,进行报警操作,防止走丢。
• 执法:如果被监控的个人未经事先授权离开住所,设备可以向当局发出警报。
• 家庭自动化或智能家居: 当房主的智能手机进入房屋的电子围栏范围时,恒温器可以自行调节到预定的温度或灯可以自动打开。
• 动物追踪:宠物主人和农民可以设置电子围栏,当动物离开边界时发出警报,从而让他们能够追踪动物。
• 资产管理:公司网络管理员可以在公司设备离开场所时设置警报,以便他们能够找到其位置并将其锁定,以防止未经授权的用户(例如小偷)滥用。
• 人力资源安全管理:如果员工试图进入未经授权的地理围栏区域,员工的智能卡可以向安全部门发送警报。
总之,实时电子围栏技术为企业和开发者提供了一种强大的工具,能够更好地管理和利用地理空间数据,提高与位置相关的决策效率和准确性。
最佳实践
技术实现
Ganos 实时电子围栏依托于阿里云实时计算Flink版产品,通过增加Flink引擎中相关的空间计算函数以及内存空间索引,来实现高性能,实时的电子围栏运算。
数据源可使用Flink数据源,如Kafka等。
电子围栏表预先存储在PolarDB中,可定期进行刷新操作。电子围栏运算结果也写回到PolarDB中。
准备工作
为了使用阿里云实时计算Flink版相关产品,需要在阿里云控制台中开通相关服务。
为了允许Flink的工作空间访问PolarDB数据库,需要确保Flink和PolarDB处于同一个region中,并将Flink工作空间的网段地址注册为PolarDB的白名单。
注册空间计算函数
Ganos空间计算相关能力封装在一个jar包中,该功能正在邀测中,请提工单进行获取。
获取jar包后,在Flink工作空间中进行上传操作(如图中+号位置),Flink会自动注册相关的函数,并展示在左侧的函数列表中。
电子围栏表
电子围栏表是预先定义好的电子围栏,如禁停区,禁行区等,数据以几何对象的方式存储在PolarDB中。
生成电子围栏
在PolarDB中生成10000随机多边形电子围栏。生成的方式为先生成10000随机点,并以这些随机点为中心,进行半径为0.01的缓冲区生成。
-- 生成随机浮点数
CREATE OR REPLACE FUNCTION test_random_float(low float, high float)
RETURNS float AS $$ BEGIN RETURN random() * (high-low) + low; END; $$ LANGUAGE 'plpgsql' STRICT;
-- 生成随机点
CREATE OR REPLACE FUNCTION test_randomgeogpoint(lowx float, highx float,
lowy float, highy float)
RETURNS geometry AS $$ BEGIN RETURN st_setsrid(st_point(test_random_float(lowx, highx), test_random_float(lowy, highy)),4326); END; $$ LANGUAGE 'plpgsql' STRICT;
-- 电子围栏表
CREATE TABLE IF NOT EXISTS geofencings (
name VARCHAR(100) PRIMARY KEY,
geofencing Geometry
);
-- 插入10000条随机电子围栏
INSERT INTO geofencings SELECT 'g
' || s, test_random_geogpoint(129, 130, 49, 50) FROM generate_series(1, 10000) s;
-- 生成半径大约1公里的缓冲区
Update geofencings set geofencing = st_buffer(geofencing, 0.01);
注册为Flink维表
在Flink SQL中将PolarDB中表注册为Flink的围栏表。
电子围栏的信息来源于PolarDB中的geofencings 表。
根据Flink的语法,在进行join操作时指定了等号操作的谓词为包含(CONTAINS)。
CREATE TEMPORARY TABLE geofencings (
name STRING NOT NULL,
geofencing STRING NOT NULL,
PRIMARY KEY (name) NOT ENFORCED
) WITH (
'connector' = 'polardb',
'jdbcUrl' = 'jdbc:postgresql://pc-2zei5iq60*.rwlb.rds.aliyuncs.com:1921/ganos',
'username' = 'ganos',
'password' = '**',
'query' = 'SELECT name, ST_AsText(geofencing) FROM geofencings;',
'join.columnName' = 'geofencing',
'join.predicate' = 'CONTAINS'
);
计算结果
实时电子围栏的计算结果同样存到PolarDB中。
计算结果表
在PolarDB中创建电子围栏计算的结果表,记录符合电子围栏要求的点的id,围栏名称以及点坐标信息。
CREATE TABLE IF NOT EXISTS point_in_geofencing (
id serial PRIMARY KEY, -- 主键
point_id VARCHAR(100), -- 点id
geofencing_name VARCHAR(100), -- 围栏名称
point Geometry -- 点
);
注册为Flink表
在Flink SQL中将PolarDB中结果表注册为Flink的结果表。
查询结果以SQL的方式写入到PolarDB中。
CREATE TEMPORARY TABLE point_in_geofencing (
point_id STRING NOT NULL,
geofencing_name STRING NOT NULL,
point STRING NOT NULL
) WITH (
'connector' = 'polardb',
'jdbcUrl' = 'jdbc:postgresql://pc-2zei5iq60*.rwlb.rds.aliyuncs.com:1921/ganos',
'username' = 'postgres',
'password' = '*',
'query' = 'insert into point_in_geofencing(point_id,geofencing_name,point) values(?,?,ST_GeomFromText(?));',
'batchSize' = '100' -- 每批插入100条记录
);
模拟数据源
以下示例以datagen作为数据源表,每秒产生10万条记录,记录包含随机id,随机经度,随机纬度和时间戳。
CREATE TEMPORARY TABLE points (
id STRING not null,
lng DOUBLE not null, -- 经度
lat DOUBLE not null, -- 纬度
proctime AS PROCTIME(), -- 时间戳
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'datagen',
'rows-per-second' = '100000',
'fields.lng.kind' = 'random',
'fields.lng.min' = '129',
'fields.lng.max' = '130',
'fields.lat.kind' = 'random',
'fields.lat.min' = '49',
'fields.lat.max' = '50',
'fields.id.kind' = 'random',
'fields.id.length' = '5'
//代码效果参考:http://www.603393.com/sitemap/post.xml
//代码效果参考:https://www.weibow.com/sitemap/post.xml
//代码效果参考:https://www.xx-ph.com/sitemap/post.xml
//代码效果参考:https://www.h3cw.com/sitemap/post.xml
);
电子围栏计算
在Flink SQL中执行Join操作,JOIN的谓词(preidacte)在创建表定义时被设置为CONTAINS,即执行 geofencings.geofencing CONTAINS ST_MakePoint(lng,lat) 判断,结果写入到PolarDB point_in_geofencing 表中:
INSERT INTO point_in_geofencing
SELECT points.id, geofencings.name, ST_MakePoint(lng,lat)
FROM points
JOIN geofencings FOR SYSTEM_TIME AS OF points.proctime
ON geofencings.geofencing = ST_MakePoint(lng,lat);
计算性能
在以上场景中,监控显示数据库写入TPS大约为300/秒(即每秒30000条记录),对于一个2c4g的PolarDB企业版实例CPU使用率约10%,负载压力仍有余量。
总结
本文重点介绍了PolarDB Ganos实时电子围栏计算场景。相较于传统中间键或业务代码实现电子围栏方式,Ganos从实时计算层为大规模移动对象提供标准时空处理框架,计算效率与综合成本均有大规模改善。未来Ganos还将提供更多高效的面向移动对象的实时计算分析能力,推动相关领域的空间信息应用全面走向“在线化”。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
22小时前
|
SQL 存储 并行计算
Lindorm Ganos 一条 SQL 计算轨迹
Lindorm Ganos 针对轨迹距离计算场景提供了内置函数 ST_Length_Rows,结合原生时空二级索引和时空聚合计算下推技术,能够高效过滤数据并并行执行运算任务。该方案通过主键索引和时空索引快速过滤数据,并利用多Region并行计算轨迹点距离,适用于车联网等场景。具体步骤包括根据车辆识别代码和时间戳过滤数据、范围过滤轨迹点以及并行计算距离。使用限制包括只支持点类型列聚合运算及表中轨迹点需按顺序排列等。测试结果显示,Lindorm Ganos 在不同数据量下均能实现秒级响应。
|
18小时前
|
关系型数据库 分布式数据库 PolarDB
基于PolarDB Ganos的实时时空计算:电子围栏篇
PolarDB是阿里云自主研发的云原生关系型数据库,提供极致弹性、高性能、海量存储及高安全性的数据库服务。PolarDB PostgreSQL版100%兼容PostgreSQL与Oracle语法,集成Ganos云原生时空数据库引擎,支持几何、栅格、轨迹等多种核心功能,实现物理世界时空数据的混合存储与分析。本文介绍的Ganos实时电子围栏计算依托PolarDB PostgreSQL版,展示了其在交通物流、安防、营销等多个领域的应用场景和技术实现细节,包括数据源配置、空间计算函数注册、电子围栏表生成及计算结果存储等步骤。通过Flink实时计算框架,Ganos实现了高效、实时的电子围栏运算
|
4月前
|
消息中间件 存储 Kafka
Lindorm Ganos轨迹点快速聚合能力简介
本文介绍了Ganos时空数据库在Lindorm流引擎上的全新能力与最佳实践,帮助客户解决车辆网场景中轨迹点实时聚合生成轨迹线的能力。Lindorm Ganos实现了Lindorm宽表、流、计算等引擎在时空领域的打通,支持原生时空类型与多种时空算子,支持多种不同的时空索引,不仅可用于传统的周边查询,还面向了历史轨迹的查询分析、实时地理围栏查询、点面查询等更加复杂的业务需求。
|
4月前
|
存储 SQL 达摩院
Lindorm Ganos轨迹点
Lindorm Ganos 是阿里云推出的一款云原生超融合多模数据库,它集成了达摩院空天数据库引擎 Ganos
61 1
|
4月前
|
存储 关系型数据库 分布式数据库
阿里云PolarDB解决乐麦多源数据存储性能问题
乐麦通过使用PolarDB数据库,使整个系统之间的数据查询分析更加高效
412 3
|
存储 SQL NoSQL
NoSQL“小钢炮”,Lindorm时空引擎Ganos轨迹处理实测
Lindorm作为一款阿里云推出的云原生超融合多模数据库,包含了流引擎、宽表引擎、对象引擎、搜索引擎等。最新发布的Lindorm已经深度融合了达摩院空天数据库引擎Ganos(Lindorm Ganos),可以一站式的解决海量轨迹场景的存储和各类查询需求,本文通过对Lindorm Ganos在常用的时空场景进行测试,用过程和实际的数据展示Lindorm Ganos的具备的能力和特性。
NoSQL“小钢炮”,Lindorm时空引擎Ganos轨迹处理实测
|
存储 并行计算 Cloud Native
PolarDB 开源版通过 brin 实现千分之一的存储空间, 高效率检索时序数据
PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的 价值产出, 将数据变成生产力. 本文将介绍PolarDB 开源版通过 brin 实现千分之一的存储空间, 高效率检索时序数据
203 0
|
存储 SQL NoSQL
轨迹数据处理“小钢炮”,Lindorm时空引擎Ganos实测
本文在Lindorm Ganos中对常用的时空场景进行测试,用过程和实际数据展示Lindorm Ganos具备的能力和特性
轨迹数据处理“小钢炮”,Lindorm时空引擎Ganos实测
|
4月前
|
存储 并行计算 关系型数据库
使用 PolarDB 开源版 部署 PostGIS 支撑时空轨迹|地理信息|路由等业务
背景PolarDB 的云原生存算分离架构,,具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理;;PolarDB与计算算法结合,,将实现双剑合璧,推动业务数据的价值产出,将数据变成生产力。本文将介绍使用 PolarDB 开源版 部署 PostGIS 支撑时空轨迹|地理信息|路...
115 0
|
4月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB 开源版通过 brin 实现千分之一的存储空间, 高效率检索时序数据
背景PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的 价值产出, 将数据变成生产力.本文将介绍PolarDB 开源版通过 brin 实现千分之一的存储空间, 高效率检...
115 0