中智车联:用 TDengine 高效处理车辆运营可视化管理

小 T 导读:车联网业务是中通科技配送全链路业务中非常重要的一环,在实际的项目需求中,需要实时查询车辆最新位置状态,达到车辆运营可视化管理。中智车联服务平台选择了用 TDengine 来高效处理从车辆上实时采集的时序数据。

业务背景

目前,中通科技拥有一支千人规模的研发团队,在数字信息科技研发方面以“互联网+物流”的理念,自研的软件系统和数字化工具已达百余个,赋能覆盖快递业务全场景,同时为快运、国际、云仓、优选、金融、商业等生态圈业务提供全方位的研发支持,建立起完善的互联网产品研发体系,全场景、全链路的数字化、互联化和智能化的业务地图愈发成熟。

2021 年年底,中通快递已完成了总部园区的实景三维模型,通过接入园区内的在线传感器,根据现有园区各功能区的区位布局,基于此三维模型开展园区内生产规划、调度运行和维护管理的全过程应用,从而实现园区内人、车、物在精准运行、资源优化和配置服务中的全过程精益化管理。

随着生产设备的小型化和智能化,快递企业也将更快地进入空间地理信息数据生产领域,有包裹流动的地方,就会有时空数据服务的需求。

这里先给大家介绍一下配送全链路业务,这是指包裹从商家仓出来一直到用户手上的这段派送履约链路,它包含 4 个主要的实操流程,分别是分拨实操、运输实操、站点实操和快递员实操。把 4 种实操管理放到三个系统里面,这三个系统分别是分拨管理、运输管理、末端站点实操管理。具体如下图所示。

其中车联网业务也是非常重要的一环,通过人、车、货、场全链条覆盖的车联网设备应用,实现物流运输全链路感知。在实际的项目需求中,我们需要实时查询车辆最新位置状态,达到车辆运营可视化管理,也就是我们的中智车联服务平台

技术选型

在上述业务过程中,我们使用了 TDengine 来完成这个目标。

在选型时,我们对比了 Prometheus 和 TDengine 这两款很有代表性的时序数据库(Time-Series Database)。 相对而言,TDengine 的“一个设备采集点一张表”的底层设计,自带的降采样和窗口函数的优秀性能,都十分契合车辆网场景。其列式存储带来的压缩比也更好。所以我们选择了 TDengine。

技术架构

我们在每辆车上都安装了部标机(即卫星定位汽车行驶记录仪),来实时采集车辆的行驶速度、时间、里程以及与车辆行驶相关的其他状态信息。采集到的数据,通过我们的 IoT service 这层应用来处理。然后数据经由 MQ (消息队列)层由 JDBC-RESTful 的方式写入 TDengine 集群,以供上游平台使用,而部标机产生的其他类数据则通过别的途径供上游平台使用。

我们使用了三节点三副本的模式落地了 TDengine 集群。 

 建表很简单,我们选择了一类数据对应一张超级表,超级表下根据车牌号划分子表,表结构如下图所示。目前还是项目初期,所以只接入了 700 余辆车,后续会逐步增加接入车辆。也正因为这套环境接入设备不多,写入方面并无压力,远远达不到 TDengine 的写入极限。 

 

 

具体应用

我们要通过数据的变化来实时得到车辆的很多信息,比如是否有停留、超速、缓行、离线等事件发生。有些功能可以通过 TDengine 的查询功能实现,有些不方便实现的暂时通过应用来完成。

下面我们通过几个例子来看看目前业务中使用比较频繁的查询:

1.获取车辆的最新位置

SQL 语句如下。

select  last_row(longitude,latitude),deviceId   from ioc_gps.vehicle_location groupby deviceId  where device_id = #{deviceId}  and ts >= #{startTime} and ts <= #{endTime}

业务需要快速查询每辆车的最新坐标,这里用到了 TDengine 提供的 last_row 函数。除了查询单独某辆车,经常还会根据 groupId 或者一批 deviceId 去查询一批车辆的最新坐标。

系统界面如下图所示。

2. 车查轨迹信息查询:

select ts,device_id as deviceId,longitude,latitude,altitude,speed as speed,direction,alarm as warnBit,status as statusBit,mobile,mileage,speed2,rssi,satellites,signal_status as signalStatus,gmt_create as gmtCreate,create_ip as createIp,kind,oil,message_id as messageId,device_name as deviceName,plate,device_group_id as deviceGroupId,device_group_name as deviceGroupName,acc, device_code as deviceCodefrom ioc_gps.vehicle_locationwhere device_id = #{deviceId}and ts >= #{startTime}and ts <= #{endTime}

 通过指定时间范围和具体的车牌号,就可以立刻获得该车辆的轨迹数据并渲染出轨迹图像。如果知道子表名的话,还可以直接查询子表,这样会减少超级表中对于标签的检索。

系统界面如下图所示。

未来规划

通过项目初期的表现,可以知道 TDengine 能够轻松满足我们的业务需求。未来我们还有其他的使用规划,比如在我们的表字段中,有个 ACC 字段,1 表示点火,0 表示熄火,要求能够计算点火驾驶行程,由于 TDengine 当前还没有直接支持 GIS 计算,暂时不能通过坐标算出直线距离(当前所用的 TDengine 2.0 版本可能需要使用自定义的 UDF 实现),但是应该可以通过状态窗口+加权平均速度+开火时间算出车辆每次点火的驾驶路程,就想这样:

select time*speed from (select elapsed(ts,1s)as time,twa(speed) as speed,acc from t1 state_window(acc)) where acc =1  ;

 而每次 ACC 开火熄火的起始点和结束点信息,可以通过 state_window 配合 first/last 函数来实现,比如:

select last(*),first(*) from t2 state_window(charge);

除此之外,我们也需要电子围栏计算,需要快速计算新轨迹点是否进入某电子围栏之中,或者需要快速计算(1s 内)位于某行政区划(省份/城市)边界内的所有车辆的数量。这类查询都需要等 TDengine 继续完善才能实现。

后续我们接入的车辆会达到几万辆,对于部标机产生的相关时序数据的使用也会越来越多。期待 TDengine 可以继续为车联网场景下的查询提供更为多样性的支持,产品越来越好。


想了解更多 TDengine Database的具体细节,欢迎大家在GitHub上查看相关源代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/67397.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT带你领略自动驾驶技术

一、自动驾驶技术现概述 自动驾驶技术是指利用计算机、传感器和其他设备&#xff0c;使车辆能够在不需要人类干预的情况下自主行驶的技术。目前&#xff0c;自动驾驶技术已经在一些汽车厂商和科技公司中得到广泛应用&#xff0c;但仍然存在一些技术和法律上的挑战&#xff0c;需…

Google面试题——及答案

1、 村子里有100对夫妻&#xff0c;其中每个丈夫都瞒着自己的妻子偷情。。。村里的每个妻子都能立即发现除自己丈夫之外的其他男人是否偷情&#xff0c;唯独不知道她自己的丈夫到底有没有偷情。村里的规矩不容忍通奸。任何一个妻子&#xff0c;一旦能证明自己的男人偷情&#x…

代码大战白热化:WizardCoder挑落Bard及Claude,性能直追ChatGPT

Github链接&#xff1a; https://github.com/nlpxucan/WizardLM/tree/main/WizardCoder 论文链接&#xff1a; https://arxiv.org/abs/2306.08568 作为大语言模型&#xff08;LLM&#xff09;最重要也最具挑战性的能力之一&#xff0c;代码生成与补全同时吸引了 AIGC 学术界与工…

微信小程序接入第三方接口

史上最全&#xff0c;最简单微信小程序实现第三方接口 本文以第三方&#xff08;聚合新闻头条&#xff09;接口为例。 聚合接口基本上都是免费的。例如&#xff0c;天气查询&#xff0c;新闻。笑话&#xff0c;万年历等。 1.先去聚合官网注册账号 &#xff0c;然后申请新闻头…

黑马点评项目学习笔记(15w字详解,堪称史上最详细,欢迎收藏)

黑马点评项目学习笔记 文章目录 黑马点评项目学习笔记前言项目搭建导入数据库初始化项目启动项目启动前端项目启动后端项目 基于Session实现短信验证码登录短信验证码登录配置登录拦截器数据脱敏 Session集群共享问题基于Redis实现短信验证码登录短信验证登录配置登录拦截器 店…

【Python】装上后这 14 个插件后,PyCharm 真的是无敌的存在

作者&#xff1a;写代码的明哥来源&#xff1a;Python编程时光 1. Key Promoter X 如果让我给新手推荐一个 PyCharm 必装插件&#xff0c;那一定是 Key Promoter X 。 它就相当于一个快捷键管理大师&#xff0c;它时刻地在&#xff1a; 教导你&#xff0c;当下你的这个操作&a…

【测试工具】jmeter组件大全及如何使用详解

文章目录 前言一、Jmeter是什么&#xff1f;可以做什么&#xff1f;二、jmeter入门到进阶1.基础组件线程组逻辑控制器HTTP请求http信息头管理器响应断言BeanShell断言HTTP Cookie管理器查看结果树聚合报告用户自定义变量Debug Sampler后置处理器json提取器正则表达式提取器Bean…

【项目方案】OpenAI流式请求实现方案

文章目录 实现目的效果比对非stream模式stream模式实现方案方案思路总体描述前端方案对比event-source-polyfill代码示例前端实现遇到的问题与解决方法后端参考资料时序图关键代码示例后端实现时遇到的问题与解决方法实现目的 stream是OpenAI API中的一个参数,用于控制请求的…

如何接收用户发送的短信验证码,判断是否合法-短信验证码开发10

在《向用户发送手机验证码》这篇教程中&#xff0c; 你已经通过php在服务器端生成和保存验证码&#xff0c; 并且通过腾讯云的短信发送接口&#xff0c; 把验证码发送到用户手机上。 当用户根据提示&#xff0c; 把手机上的验证码&#xff0c; 以短信的方式回复&#xff0c; 你…

揭秘验证码,你可能不知道的那些事儿

在现代网络世界中&#xff0c;我们经常遇到验证码这个概念。它是一种用于验证使用者身份或防止恶意行为的安全机制。然而&#xff0c;除了表面上的使用和功能&#xff0c;验证码还有许多有趣而不为人所知的方面。本文将带你揭秘验证码背后的秘密&#xff0c;探索你可能不知道的…

注册kaggle人机验证没有验证码

打开edge浏览器,安装header editor扩展。 1.点击扩展 2.管理扩展 3.获取扩展 4.搜索框中输入“header editor”。 5.点击获取&#xff0c;我这里是因为已经获取了。所以获取按钮是删除。 6. 获取成功后&#xff0c;打开扩展的详细信息。 7.点击扩展选项。 8.在URL内输入网址。…

Kaggle账号注册时验证码无法显示问题解决方法

学习机器学习&#xff0c;想用深度神经网络做一个猫狗识别的程序&#xff0c;然后到kaggle上下载训练集猫狗图片&#xff0c;奈何一直出现验证码未填写的情况。看了很多文章说是要下载谷歌浏览器还有助手什么的&#xff0c;想起手机之前有个浏览器&#xff0c;一直没用过&#…

什么是消息验证码

在信息安全领域中&#xff0c;常见的信息保护方法分为加密和认证两大类。认证技术又分为对用户的认证和对消息的认证两种方式。用户认证用于鉴别用户的身份是否是合法用户&#xff1b;消息认证就是验证所收到的消息确实是来自真实的发送方且未被修改的消息&#xff0c;可以验证…

5个值得推荐的英语学习网站及1个英语学习App

1、练习听力 美国国家公共广播电台NPR&#xff1a;http://www.npr.org/特点&#xff1a;标准美式英语。 建议&#xff1a;每天花三十分钟左右&#xff0c;反复听英语广播&#xff0c;这是听力过关的必经之路。点击网页中左边“BROWSE TOPICS”下面的“News”选项。选择自己有…

随时随地学英语的美好愿望 Tutorabc 能帮你实现

随着互联网技术的飞速发展&#xff0c;在线教育也随着得到长足的发展&#xff0c;而后随着它的优势不断凸显&#xff0c;越来越多的人开始认可并接受在线教育。这也是在线英语学习平台能不断发展和进步的主要原因&#xff0c;正是因为越来越多的人能接受这一新的学习方式&#…

精选 8个 学习英语的APP,完全免费,适合不同阶段的你

一直有小伙伴找盘哥要学习英语的软件&#xff0c;以前零零星星的分享过几个&#xff0c;这次花了2天时间&#xff0c;重新挑选了10个良心好用的英语学习APP&#xff0c;有安卓版本的&#xff0c;也有iOS版本的&#xff0c;希望对你有所帮助。 文章比较长&#xff0c;希望你在饭…

全天候自动化的企业知识库文档、帮助中心到底有什么用?

想要给客户提供一个良好的客户体验&#xff0c;除了出色的服务态度之外&#xff0c;很重要的就是可以及时给到客户们他们想要的信息。最好的方法就是建立一个企业的知识库文档&#xff0c;也可以叫做是帮助中心。很多时候&#xff0c;客户都是根据帮助中心的内容来作出购买决定…

用C端经验做B端产品,需要考虑客户的整个体验旅程

B端产品大多需要保障业务流程的顺畅。一款B端SAAS产品选择长尾部分的客户&#xff0c;对产品设计和运营提出了高要求&#xff0c;除了考虑产品满足客户实际管理需求外&#xff0c;更需要考虑客户整个体验旅程。 B端产品大多需要保障业务流程的顺畅。一款B端SAAS产品选择长尾部分…

实现layui中每次切换页面时刷新页面(tab页面)

实现layui中每次切换页面时刷新页面&#xff08;tab页面&#xff09; 在html中找到tabChange方法&#xff0c;加上下面这部分代码即可实现每次切换tab页面时刷新页面&#xff08;重新载入&#xff09; tabChange: function (id) {//切换到指定Tab项element.tabChange(demo, i…

【微信小程序】页面tabBar切换、下拉刷新

目录 前言 一、tabBar切换 1.为什么使用tabBar 2.注意事项&#xff08;官网提示&#xff09; 3.如何使用&#xff08;附源码&#xff09; 二、下拉刷新 前言 基本上&#xff0c;所有的小程序&#xff0c;页面底部都有个tab,来实现页面的切换&#xff0c;效果如下 一、t…