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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 文章着重介绍了PolarDB Ganos如何应用于实现实时电子围栏计算。这是一种依赖于位置技术来创建虚拟地理边界的解决方案,广泛应用于交通安全、应急管理、营销推广等多个领域。通过与阿里云实时计算Flink版产品的集成,PolarDB Ganos能够高效地进行空间计算和数据分析,显著提高了地理围栏应用的实时性和准确性。文章还提供了使用Ganos进行电子围栏计算的实际步骤、性能测试及优化建议,并强调了PolarDB 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_random_geogpoint(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'
);

电子围栏计算

在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的实时时空计算能力。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL版标准版计算节点规格详解
PolarDB MySQL版标准版计算节点规格详解
136 1
|
2月前
|
存储 关系型数据库 分布式数据库
【PolarDB开源】深入PolarDB内核:探究存储计算分离架构的设计哲学
【5月更文挑战第20天】PolarDB是阿里巴巴的云原生分布式数据库,以其存储计算分离架构为核心,解决了传统数据库的扩展性和资源灵活性问题。该架构将数据存储和计算处理分开,实现高性能(通过RDMA加速数据传输)、高可用性(多副本冗余保证数据可靠性)和灵活扩展(计算资源独立扩展)。通过动态添加计算节点以应对业务流量变化,PolarDB展示了其在云时代应对复杂业务场景的能力。随着开源项目的进展,PolarDB将持续推动数据库技术发展。
97 6
|
3天前
|
存储 关系型数据库 分布式数据库
PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题
【7月更文挑战第3天】PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题。此架构让存储层专注数据可靠性,计算层专注处理SQL,提升性能并降低运维复杂度。通过RDMA加速通信,多副本确保高可用性。资源可独立扩展,便于成本控制。动态添加计算节点以应对流量高峰,展示了其灵活性。PolarDB的开源促进了数据库技术的持续创新和发展。
20 2
|
1月前
|
存储 关系型数据库 分布式数据库
PolarDB产品使用合集之计算包是用来干什么的
PolarDB是阿里云推出的一种云原生数据库服务,专为云设计,提供兼容MySQL、PostgreSQL的高性能、低成本、弹性可扩展的数据库解决方案,可以有效地管理和优化PolarDB实例,确保数据库服务的稳定、高效运行。以下是使用PolarDB产品的一些建议和最佳实践合集。
246 7
|
关系型数据库 PostgreSQL
PostgreSQL 计算字符串字符数函数(CHAR_LENGTH(str))和字符串长度函数(LENGTH(str))
PostgreSQL 计算字符串字符数函数(CHAR_LENGTH(str))和字符串长度函数(LENGTH(str))
1484 0
|
2月前
|
SQL 关系型数据库 C语言
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
64 0
|
12月前
|
存储 Cloud Native 数据可视化
首个!Ganos联合PolarDB通过信通院「首批」时空数据库产品评测
2023年6月16日,中国信通院组织时空数据库评测专家评审会,PolarDB + Ganos顺利通过评测答辩,成为全网唯一一个全量通过五大能力域中全部的五十九个能力项测试的数据库产品。
|
12月前
|
存储 Cloud Native 关系型数据库
阿里云最新产品手册——阿里云核心产品——云原生关系型数据库PolarDB——计算与存储分离
阿里云最新产品手册——阿里云核心产品——云原生关系型数据库PolarDB——计算与存储分离自制脑图
224 1
|
存储 固态存储 Cloud Native
【Paper Reading】PolarDB计算存储分离架构性能优化之路
本篇论文收录在 VLDB 2022,介绍了云原生数据库PolarDB在计算存储分离架构下遇到的性能挑战,分析了云存储相对于传统本地存储的工作特性差异及其根因,讨论了将各类存储引擎部署至云存储上时所会遇到的问题挑战,并提出了统一的优化框架 CloudJump。最后通过实验证明优化框架CloudJump适用于PolarDB,也适用于 RocksDB。
【Paper Reading】PolarDB计算存储分离架构性能优化之路
|
存储 运维 架构师
直播预告 | PolarDB 开源版在可计算存储上的降本增效原理和实践
通过 PolarDB 开源数据库和 ScaleFlux 可计算存储产品 CSD2000/3000,也可以降低数据库存储成本并且进一步提升性能。本次分享主要介绍 CSD 降本增效原理以及 PolarDB-X 和 PolarDB-PG 开源版在 CSD 上的部署实践。
直播预告 | PolarDB 开源版在可计算存储上的降本增效原理和实践

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB