基于PolarDB Ganos的实时时空计算:电子围栏篇

简介: PolarDB是阿里云自主研发的云原生关系型数据库,提供极致弹性、高性能、海量存储及高安全性的数据库服务。PolarDB PostgreSQL版100%兼容PostgreSQL与Oracle语法,集成Ganos云原生时空数据库引擎,支持几何、栅格、轨迹等多种核心功能,实现物理世界时空数据的混合存储与分析。本文介绍的Ganos实时电子围栏计算依托PolarDB PostgreSQL版,展示了其在交通物流、安防、营销等多个领域的应用场景和技术实现细节,包括数据源配置、空间计算函数注册、电子围栏表生成及计算结果存储等步骤。通过Flink实时计算框架,Ganos实现了高效、实时的电子围栏运算

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,随机经度,随机纬度和时间戳。
//代码效果参考:https://www.257342.com/sitemap/post.html
//代码效果参考:https://www.uagu.cn/sitemap/post.html
//代码效果参考:https://www.szworkshop.com.cn/sitemap/post.html
//代码效果参考:http://www.603393.com/sitemap/post.html
//代码效果参考:https://www.weibow.com/sitemap/post.html
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'
);
电子围栏计算
在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免费试用页面,选择试用“云原生数据库PolarDB PostgreSQL版”,体验PolarDB Ganos的实时时空计算能力。

相关文章
|
10天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
6天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2505 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
6天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1519 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
8天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
528 13
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18836 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17524 13
Apache Paimon V0.9最新进展
|
8天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
457 48
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
352 4
叮咚!您有一份六大必做安全操作清单,请查收
|
2天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。