版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IoT物联网TDengine时序数据库实战教程适配TDengine3.0+(TDengineCloud/开源社区版/企业版)TDengine定位:物联网、设备采集、传感器、IoT监控、工控、电梯/电力设备指标时序存储;完美适配工业IoT场景。一、核心基础概念TDengine独创超级表(STable)+子表模型数据库database:设置数据保留时长、分片参数、副本数超级表STable(SuperTable)一类设备的模板(例如:device_metric所有电梯采集指标)时间戳ts:主键,时序数据必须字段采集指标列(普通列):温度、电压、运行速度、楼层、告警状态标签tags(维度):设备唯一编号、楼宇编号、区域、设备类型(不可频繁变更)子表SubTable每个设备一张自动生成子表,基于超级表创建;tags作为区分不同设备维度优势:按设备天然分片;按标签快速过滤;聚合查询极快;自动分区;支持数据自动删除。⚠️最佳实践:变动频繁数值→普通列设备静态属性(设备ID、站点)→标签tag数据模型示例(电梯物联网)超级表:st_elevator_data表格字段类型说明类别tsTIMESTAMP采集时间戳主键speedFLOAT电梯运行速度普通列floorINT当前楼层普通列loadFLOAT载重百分比普通列alarm_codeINT告警码普通列device_idNCHAR(32)设备编号TAGbuilding_idNCHAR(32)楼宇IDTAGcityNCHAR(16)城市TAG二、快速部署TDengine3.0方式1:Docker(推荐开发测试)bash#启动容器dockerrun-d\--nametdengine\-p6030:6030-p6041:6041-p6043:6043\-vtd-data:/var/lib/taos\tdengine/tdengine:#进入客户端dockerexec-ittdenginetaos方式2Linux二进制部署(生产)官方下载server包,systemd托管服务,端口:6030:原生TAOS连接(taosc驱动)6041:RESTAPI6043:WebSocket生产建议:优先使用原生驱动taosc,性能远高于Restful。三、TDengineSQL实战(客户端直接执行)1.创建数据库sql--数据库:保留数据90天,分片间隔1天CREATEDATABASEIFNOTEXISTSiot_elevatorKEEP90DURATION1d;USEiot_elevator;参数说明:KEEP:数据保存最大天数,超期自动删除DURATION:单个数据分片时间跨度2.创建超级表sqlCREATESTABLEIFNOTEXISTSst_elevator_data(tsTIMESTAMP,speedFLOAT,floorINT,loadFLOAT,alarm_codeINT)TAGS(device_idNCHAR(32),building_idNCHAR(16),cityNCHAR(16));3.自动创建子表并写入数据方式1:自动建子表(推荐,业务最常用)子表命名规则t_${deviceId}sqlINSERTINTOt_elev_001USINGst_elevator_dataTAGS('elev_001','building_A','Langfang')VALUES(NOW(),1.6,8,45.2,0);执行逻辑:不存在t_elev_001自动创建子表,再写入一行时序数据。4.基础查询sql--查询单设备最近100条SELECT*FROMst_elevator_dataWHEREdevice_id='elev_001'ORDERBYtsDESCLIMIT100;--指定时间范围SELECTts,floor,speedFROMst_elevator_dataWHEREdevice_id='elev_001'ANDts>'2026-08-0100:00:00'ANDts<NOW();5.降采样聚合(时序核心能力!代替代码内存聚合)场景:原始采集1Hz,前端展示需要5分钟平均值sql--每5分钟聚合:平均速度、平均载重SELECTTS,AVG(speed)avg_speed,AVG(load)avg_loadFROMst_elevator_dataWHEREdevice_id='elev_001'INTERVAL(5m)SLIDING(5m);INTERVAL采样窗口SLIDING滑动步长6.常用聚合函数AVG,SUM,MAX,MIN,COUNT,FIRST,LASTsql--时间段内最高速度、最低楼层SELECTMAX(speed),MIN(floor)FROMst_elevator_dataWHEREdevice_id='elev_001'ANDts>NOW()-24h;7.标签过滤多设备批量查询sql--查询廊坊市所有楼宇设备数据SELECT*FROMst_elevator_dataWHEREcity='Langfang'ANDts>=NOW()-1h;8.删除过期数据无需手动删除,数据库KEEP参数自动清理;如需手动清理某设备历史:sqlDELETEFROMst_elevator_dataWHEREdevice_id='elev_001'ANDts<'2026-01-01';四、多语言驱动实战代码4.1SpringBootJava(taos-jdbcdriver3.0,物联网项目主流)maven依赖xml<dependency><groupId>com.taosdata.jdbc</groupId><artifactId>taos-jdbcdriver</artifactId><version></version></dependency>application.ymlyamlspring:datasource:driver-class-name:com.taosdata.jdbc.TSDBDriverurl:jdbc:TAOS://:6030/iot_elevatorusername:rootpassword:taosdata写入工具示例java运行importjava.sql.*;publicclassTDWriteDemo{publicstaticvoidmain(String[]args)throwsSQLException{Stringurl="jdbc:TAOS://:6030/iot_elevator";Connectionconn=DriverManager.getConnection(url,"root","taosdata");Stringsql="INSERTINTOt_elev_001USINGst_elevator_dataTAGS(?,?,?)VALUES(?,?,?,?,?)";PreparedStatementpstmt=conn.prepareStatement(sql);//参数:tags(device_id,building_id,city)+ts,speed,floor,load,alarm_codepstmt.setString(1,"elev_001");pstmt.setString(2,"building_A");pstmt.setString(3,"Langfang");pstmt.setTimestamp(4,newTimestamp(System.currentTimeMillis()));pstmt.setFloat(5,1.5f);pstmt.setInt(6,10);pstmt.setFloat(7,30.0f);pstmt.setInt(8,0);pstmt.execute();pstmt.close();conn.close();}}生产批量写入:使用SQL批量values、或者stmt批量写入API(非PreparedStatement),千万不要循环单行insert,吞吐量极低。4.2Go语言驱动(边缘网关优选)go运行packagemainimport( "database/sql" "fmt" "time" _"/taosdata/driver-go/v3/taosSql")funcmain(){ db,err:=sql.Open("taosSql","root:taosdata@tcp(:6030)/iot_elevator") iferr!=nil{ panic(err) } deferdb.Close() now:=time.Now() sqlStr:=`INSERTINTOt_elev_001USINGst_elevator_dataTAGS('elev_001','building_A','Langfang')VALUES(?,?,?,?,?)` _,err=db.Exec(sqlStr,now,1.2,5,22.5,0) iferr!=nil{ fmt.Println(err) }}五、工业IoT落地最佳实践1.数据流架构plaintext电梯终端采集→MQTT(Kafka)→Java服务→TDengine存储前端可视化查询(实时曲线/历史趋势/5min聚合报表)告警系统:查询时序数据识别异常指标2.写入规范(避坑重点)时间戳统一使用毫秒时间戳,全部服务UTC或者统一东八区,避免时区错乱高频采集(1~5Hz)禁止单条循环插入;批量攒包写入(攒200~500条一次提交)TAG不要频繁更新!TD标签不适合经常修改;经常变化字段放普通列超级表不要建太多,同类设备尽量复用一张STable3.查询规范查询必须携带时间范围!禁止不带ts条件全表扫描,时序数据库巨量数据会直接卡死✅good:wherets>now-24handdevice_id='xxx'❌bad:select*fromst_elevator_datawheredevice_id='xxx'历史报表尽量使用INTERVAL服务端降采样,不要原始数据全部拉到内存聚合六、性能优化清单开启批量写入:StmtAPI/多行VALUES合并合理设置DURATION分片,采集频率1Hz级别建议DURATION1天磁盘:使用SSD;关闭磁盘同步刷盘参数(根据业务可靠性权衡)分库规划:设备量几十万以上,可以按城市分多个database冷热分离:TD企业版支持冷热分层;社区版只能依靠KEEP自动清理+定期导出冷数据至对象存储索引:标签自带索引,无需额外建立索引;普通列不要随意创建索引七、高频问题&踩坑记录Q:标签可以update修改吗?A:TDengine3.0支持ALTERTABLE修改tags,但是性能差,设计阶段尽量避免动态标签。Q:写入很慢,吞吐量上不去?A:99%原因:循环单行Insert,没有批量攒包。Q:时间查询结果错乱?时区问题A:所有服务统一时区;客户端连接指定时区timezone=Asia/S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年永州市芝山区街道办人员招聘考试试题及答案详解
- 2025年思茅地区翠云区中小学教师招聘考试试题及答案详解
- 2026年广东省梅州市法检系统书记员招聘考试参考试题及答案详解
- 月幼师班主任工作计划及安排
- 2026年福建省漳州市街道办人员招聘笔试备考试题及答案详解
- 2026年宜昌市西陵区街道办人员招聘考试参考试题及答案详解
- 2026年河南省商丘市法检系统书记员招聘笔试备考试题及答案详解
- 2026年宜宾市翠屏区法检系统书记员招聘考试参考试题及答案详解
- 2026年汽车冲压生产线操作工中级模拟考试题含答案
- 2026年民法典测试题与答案
- 2026年“麻醉药品、精神药品”管理和使用培训考核试题(含答案)
- 2026年安徽省辅警(协警)招聘考试题库及答案
- 餐饮储值卡销售合同
- 2024至2030年中国浙江省智慧交通行业发展运行现状及投资潜力预测报告
- 中医医疗技术手册2013普及版
- 提高服务行业人员的品牌形象塑造能力的培训课程
- 项目九-任务一-采购风险管理
- 诗与远方-初中语文九上第一单元整合公开课一等奖创新教学设计
- 小儿多发伤的护理业务学课件
- 广东深圳历年中考语文现代文之散文阅读4篇(2003-2021年)
- HY/T 094-2022沿海行政区域分类与代码
评论
0/150
提交评论