Lindorm Ganos轨迹点快速聚合能力简介

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 本文介绍了Ganos时空数据库在Lindorm流引擎上的全新能力与最佳实践,帮助客户解决车辆网场景中轨迹点实时聚合生成轨迹线的能力。Lindorm Ganos实现了Lindorm宽表、流、计算等引擎在时空领域的打通,支持原生时空类型与多种时空算子,支持多种不同的时空索引,不仅可用于传统的周边查询,还面向了历史轨迹的查询分析、实时地理围栏查询、点面查询等更加复杂的业务需求。

关于Lindorm Ganos

Lindorm是阿里云推出的云原生超融合多模数据库,提供了宽表、时序、搜索、文件等多种引擎。目前,Lindorm已经深度融合了由阿里云数据库产品事业部研发的时空数据库引擎Ganos(下文统称为Lindorm Ganos),可以解决海量移动对象存储、管理和查询需求,弥补了各类NoSQL在时空数据处理方面的不足。

关于Lindorm Ganos的特点与优势,可以参考《基于Lindorm Ganos的车辆实时行为分析》一文中第一部分。

应用场景

车联网领域存在大量实时写入的轨迹点数据,在数据存储到数据库之前,根据后续业务的需求可以将车辆上报的 GPS 点数据聚合成一套轨迹线数据,便于后续开展更为复杂的业务。

需求分析

在这类场景中,我们可以定期(如每小时、每天)将用户输入的 GPS 点按车辆 id 分组并按时间顺序拼接为轨迹。这样不仅可以减少数据库的写压力,而且轨迹数据在计算和分析上更为直观。

技术实现

1. 开通Lindorm Ganos服务

Lindorm Ganos时空服务是Lindorm宽表引擎和流引擎的一个组件,服务开通后仅收取Lindorm宽表引擎和流引擎费用。本文介绍通过云原生多模数据库Lindorm控制台开通Ganos时空服务的方法。

前提条件

已创建Lindorm实例并开通宽表引擎,具体操作请参见创建实例

操作步骤

  1. 登录Lindorm管理控制台
  2. 在页面左上角,选择实例所属的地域。
  3. 实例列表页,单击目标实例ID或者目标实例所在行操作列的管理
  4. 在左侧导航栏,选择宽表引擎
  5. Ganos时空服务页签中,单击立即开通

2. 创建结果表

首先,通过 lindorm-cli 工具连接到宽表引擎,并创建一张围栏表和两张结果保存表,详细用法见:如何通过Lindorm-cli连接并使用宽表引擎

3. 接入流数据

这一步通过流引擎客户端连接流引擎并写入流数据。可以通过 Kafka API 写入数据到指定的 topic 中,见通过开源Kafka客户端写入Lindorm流引擎数据,或通过开源Kafka脚本工具连接Lindorm流引擎,并写入数据。

4. 提交流引擎计算任务

这一步使用 Flink SQL 提交流引擎计算任务,读取 Kafka topic 中的数据并结合宽表数据做计算。

连接到流引擎

请参考下列链接连接到流引擎:使用客户端连接并使用Lindorm流引擎。建议在与流引擎同一个可用区的 ECS 环境下运行,运行前请将 ECS 的 IP 地址添加到访问控制白名单。请将ld-xxx替换成您的实例 ID:

./lindorm-sqlline -url jdbc:streamsql:url=http://ld-xxx-proxy-stream.lindorm.rds.aliyuncs.com:30060

创建计算任务

注意:

  1. Kafka的连接地址properties.bootstrap.servers,请使用 Lindorm Stream Kafka 私有网络地址;
  2. 宽表的连接地址seedServer,请使用 Lindorm 宽表 SQL 私有网络地址及 30020端口。
轨迹聚合计算任务

下面的计算任务将流入 Kafka 的点根据给定的时间窗口和顺序拼接为轨迹:

  1. 首先,加载 ganos 函数模块。
  2. 随后创建数据源表 tdrive、数据结果表resultAgg
  3. 最后创建流任务,使用 ST_MakeLine_Agg函数将点拼接为轨迹。该函数不会对点进行排序,若要保证点的顺序,请用 ORDER BY排序。

请将ld-xxx替换成您的实例 ID

CREATE FJOB lineAgg (
  LOAD MODULE ganos;
  -- create stream table
  CREATE TABLE tdrive(
    cid INT,
    ts TIMESTAMP(0),
    lng DOUBLE,
    lat DOUBLE,
    WATERMARK FOR ts AS ts-INTERVAL '10' MINUTES --set watermark delay
  ) WITH (
    'connector'='kafka',
    'topic'='tdrive',
    'scan.startup.mode'='earliest-offset',
    'properties.bootstrap.servers'='ld-xxx-proxy-stream.lindorm.rds.aliyuncs.com:30080',
    'format'='json',
    'json.ignore-parse-errors'='true'
  );
  -- order data by timestamp
  CREATE VIEW orderedDrive AS SELECT * FROM tdrive ORDER BY ts;
  -- create result table
  CREATE TABLE resultAgg(
    cid INT,
    stt TIMESTAMP(0),
    edd TIMESTAMP(0),
    line STRING,
    PRIMARY KEY(cid,stt) NOT ENFORCED
  ) WITH (
    'connector'='lindorm',
    'seedServer'='ld-xxx-proxy-lindorm.lindorm.rds.aliyuncs.com:30020',
    'userName'='username',
    'password'='password',
    'tableName'='resultAgg',
    'namespace'='default');
  );
  -- aggregate points
  INSERT INTO resultAgg 
    SELECT 
      cid, 
      window_start AS stt,
      window_end AS edd, 
      ST_AsText(ST_MakeLine_Agg(ST_MakePoint(lng,lat))) AS line 
    FROM TABLE(TUMBLE(TABLE orderedDrive, DESCRIPTOR(ts), INTERVAL '1' HOUR))
    WHERE lng IS NOT NULL AND lat IS NOT NULL AND ST_IsEmpty(ST_MakePoint(lng,lat))=false 
    GROUP BY window_start,window_end,cid;
);

如果希望输出的结果包含点的时间戳信息,可使用 LISTAGG函数拼接时间戳,具体用法如下:

INSERT INTO resultAgg 
    SELECT 
    cid, 
    window_start AS startTime,
    window_end AS endTime, 
    ST_AsText(ST_MakeLine_Agg(ST_MakePoint(lng,lat))) AS line,
    LISTAGG(CAST(ts AS VARCHAR)) AS timeseries, 
    FROM TABLE(TUMBLE(TABLE tdrive, DESCRIPTOR(ts), INTERVAL '1' HOUR))
    WHERE lng IS NOT NULL AND lat IS NOT NULL AND ST_IsEmpty(ST_MakePoint(lng,lat))=false
    GROUP BY window_start,window_end,cid;

5. 查看结果

在宽表中,通过 SQL 语句查看对应的计算结果,下面展示部分结果:

包含时间戳的结果如下:

将车辆 1 从 2008-02-02 到 2008-02-03 的轨迹可视化:

后续场景

在获取聚合的轨迹后,可以基于Ganos的相关能力进行一系列的后续时空数据挖掘操作。主要的应用场景有:

  • 轨迹展示:轨迹存入数据库后,可以将指定车辆在指定时间段内的轨迹绘制在地图上
  • 轨迹相似度分析:车队有部分车辆偏离位置,可能是驶入了错误的路线,导致物流延迟风险。可以根据多个车辆轨迹的相似情况,寻找异常轨迹,及时发现可能的风险
  • 轨迹预测:根据车辆历史轨迹,可以通过相关的算法预测车辆一段时间内的行进路线
  • 轨迹停留点分析:运输车辆往往需要中途休息,为了避免驾驶员开夜车可能造成的安全隐患,需要监管车辆是否存在夜间停留点(大量的轨迹没有空间位置上的移动)。如果夜间时间段内没有停留点产生,则说明驾驶员一直在开夜车,需要提醒驾驶员尽快休息。

总结

Lindorm Ganos实现了Lindorm宽表、流、计算等引擎在时空领域的打通,支持原生时空类型与多种时空算子,支持多种不同的时空索引,不仅可用于传统的周边查询,还面向了历史轨迹的查询分析、地理围栏查询、点面查询等更加复杂的业务需求。相较于传统的Geomesa、ElasticSearch等NoSQL时空方案,Ganos在多种场景下性能均有3-5倍以上的提升,同时兼容适配Flink、Spark引擎进一步降低了客户技术方案的复杂性,结合Lindorm在写入、压缩等方面的优势,Lindorm Ganos在海量时空数据管理分析领域构建出了既能满足客户功能与性能需求,又可大幅度降低存储计算成本的全新方案。

相关文章
|
3月前
|
存储 Cloud Native 搜索推荐
Lindorm Ganos
Lindorm Ganos 是阿里云推出的一款云原生超融合多模数据库,它集成了流引擎、宽表引擎、对象引擎、搜索引擎等多种功能,可用于解决海量数据的存储和查询问题。其中,Ganos 时空引擎是 Lindorm 的一个重要组件,主要负责处理时空数据。
26 3
|
3月前
|
存储 SQL 达摩院
Lindorm Ganos轨迹点
Lindorm Ganos 是阿里云推出的一款云原生超融合多模数据库,它集成了达摩院空天数据库引擎 Ganos
24 1
|
10月前
|
SQL 消息中间件 监控
阿里云云原生多模数据库Lindorm简介和购买流程
Lindorm是面向物联网、互联网、车联网等设计和优化的云原生多模超融合数据库,支持宽表、时序、文本、对象、流、空间等多种数据的统一访问和融合处理,并兼容SQL、HBase/Cassandra/S3、TSDB、HDFS、Solr、Kafka等多种标准接口和无缝集成三方生态工具,是日志、监控、账单、广告、社交、出行、风控等场景首选数据库
|
10月前
|
存储 消息中间件 SQL
基于Lindorm Ganos的车辆实时行为分析
本文介绍了Ganos时空数据库在Lindorm流引擎上的全新能力与最佳实践,帮助客户解决车辆网场景中实时时空数据分析的需求。Lindorm Ganos实现了Lindorm宽表、流、计算等引擎在时空领域的打通,支持原生时空类型与多种时空算子,支持多种不同的时空索引,不仅可用于传统的周边查询,还面向了历史轨迹的查询分析、地理围栏查询、点面查询等更加复杂的业务需求。
|
存储 SQL NoSQL
NoSQL“小钢炮”,Lindorm时空引擎Ganos轨迹处理实测
Lindorm作为一款阿里云推出的云原生超融合多模数据库,包含了流引擎、宽表引擎、对象引擎、搜索引擎等。最新发布的Lindorm已经深度融合了达摩院空天数据库引擎Ganos(Lindorm Ganos),可以一站式的解决海量轨迹场景的存储和各类查询需求,本文通过对Lindorm Ganos在常用的时空场景进行测试,用过程和实际的数据展示Lindorm Ganos的具备的能力和特性。
NoSQL“小钢炮”,Lindorm时空引擎Ganos轨迹处理实测
|
SQL 分布式计算 并行计算
用 Lindorm Ganos 一条 SQL 计算轨迹距离
Lindorm 多模数据库提供宽表、时序、搜索、文本、空间等多种数据模型,面向互联网、IoT、车联网等场景,是阿里巴巴核心业务提供关键支撑的数据库之一。Lindorm Ganos 将 Ganos 对时空数据的处理能力深度融合到 Lindorm 中,提供原生的时空数据类型和时空算子,内置时空主键索引和时空二级索引,将时空算子下推并优化了查询计划,可以很好地满足车联网业务对轨迹、位置、范围等数据处理的需求。针对轨迹距离计算场景,Lindorm Ganos 内置 ST_Length_Rows 函数来高效实现轨迹距离计算。
用 Lindorm Ganos 一条 SQL 计算轨迹距离
|
3月前
|
存储 人工智能 Cloud Native
阿里云瑶池数据库训练营权益:《玩转Lindorm》学习资料开放下载!
阿里云瑶池数据库训练营权益:《玩转Lindorm》学习资料开放下载!
|
8月前
|
存储 SQL 机器学习/深度学习
VLDB论文解读|一文剖析阿里云Lindorm数据库在DB for AI领域的探索
论文主要针对大规模监控场景下海量时序数据的存储、访问、分析和管理带来的挑战,描述了阿里云多模数据库 Lindorm 带来的一站式解决方案。
|
8月前
|
存储 Java 数据挖掘
阿里云时序数据库简介和购买使用流程
阿里云时序数据库(Lindorm Time Series Database,简称TSDB)是阿里云原生多模数据库Lindorm中的核心组件,专门负责处理时序数据。它具有许多优势,包括高并发写入、高压缩比存储、实时时序指标聚合、统计、预测以及ML/AI计算等强大功能。 时序数据是指表示物理设备、系统、应用过程或行为随时间变化的数据,这类数据在物联网、工业物联网、基础运维系统等场景中有着广泛的应用。阿里云TSDB可以解决大规模时序数据的可靠写入问题,显著降低数据存储成本,并且能够实时灵活地完成业务数据的聚合分析。 TSDB针对不同应用场景,支持多元数据存储与索引,具有高效的写入性能和实时数据分析能
|
8月前
|
人工智能 自然语言处理 多模数据库
视野数科联合阿里云Lindorm多模数据库推动AIGC应用在金融领域落地
野数科与阿里云Lindorm多模数据库达成AIGC应用联合创新合作