TDengine学习
TDengine学习
简介
TDengine 是一款开源、高性能、云原生的时序数据库,且针对物联网、车联网、工业互联网、金融、IT 运维等场景进行了优化。TDengine 的代码,包括集群功能,都在 GNU AGPL v3.0 下开源。除核心的时序数据库功能外,TDengine 还提供缓存、数据订阅、流式计算等其它功能以降低系统复杂度及研发和运维成本。
概念
TDengine要求每个数据采集点单独建表。独立建表的模式能够避免写入过程中的同步加锁,因此能够极大地提升数据的插入/查询性能。但是独立建表意味着系统中表的数量与采集点的数量在同一个量级。如果采集点众多,将导致系统中表的数量也非常庞大,让应用对表的维护以及聚合、统计操作难度加大。为降低应用的开发难度,TDengine引入了超级表(Super Table, 简称为STable)的概念。
超级表 STable
STable是同一类型数据采集点的抽象,是同类型采集实例的集合,包含多张数据结构一样的子表。每个STable为其子表定义了表结构和一组标签:表结构即表中记录的数据列及其数据类型;标签名和数据类型由STable定义,标签值记录着每个子表的静态信息,用以对子表进行分组过滤。
字表
子表本质上就是普通的表,由一个时间戳主键和若干个数据列组成,每行记录着具体的数据,数据查询操作与普通表完全相同;但子表与普通表的区别在于每个子表从属于一张超级表,并带有一组由STable定义的标签值。
语法
TDengine的语法与sql一致
创建数据库:
create database if not exists demo KEEP 365 DURATION 10;
DURATION:数据文件存储数据的时间跨度 PRECISION:数据库的时间戳精度。ms 表示毫秒,us 表示微秒,ns 表示纳秒,默认 ms 毫秒。
创建超级表:
create stable if not exists demo.weather(ts timestamp, temperature float, humidity float) tags(location nchar(64), groupId int);
创建字表:
create table if not exists demo.t1 using demo.weather tags('杭州余杭区', 1);
插入数据:
insert into demo.t1 values (now, 6.1,8.0);
- 写入多条:insert into demo.t1 values (1538548684000, 6.1,8.0) (1538548696650, 6.2,8.1); - 写入多表:insert into demo.t1 values (1538548684000, 6.1,8.0) demo.t2(1538548696650, 6.2,8.1);
查询:
SELECT AVG(temperature),AVG(humidity), MAX(temperature), MIN(temperature) FROM demo.weather WHERE location='杭州西湖区' or location='上海宝山区' GROUP BY groupId;
备份:终端输入
- 导出:taosdump test d11 -o /dump -uroot -ptaosdata - 导入:taosdump -uroot -ptaosdata -i /dump
支持类型
TDengine DataType | JDBCType |
---|---|
TIMESTAMP | java.sql.Timestamp |
INT | java.lang.Integer |
BIGINT | java.lang.Long |
FLOAT | java.lang.Float |
DOUBLE | java.lang.Double |
SMALLINT | java.lang.Short |
TINYINT | java.lang.Byte |
BOOL | java.lang.Boolean |
BINARY | byte array |
NCHAR | java.lang.String |
JSON | java.lang.String |
流式计算
在时序数据的处理中,经常要对原始数据进行清洗、预处理,再使用时序数据库进行长久的储存。
- 创建流:
create stream current_stream into current_stream_output_stb as select _wstart as start, _wend as end, max(current) as max_current from meters where voltage <= 220 interval (5s);
current_stream
:流名current_stream_output_stb
:流处理后存入的表名
数据订阅
TDengine 提供了类似消息队列产品的数据订阅、消费接口, TDengine 的 topic 是基于一个已经存在的超级表、子表或普通表的查询条件,即一个 SELECT
语句。
- 创建topic:
- SQL创建:
CREATE TOPIC topic_name AS SELECT ts, c1, c2, c3 FROM tmqdb.stb WHERE c1 > 1;
- 超级表创建:
CREATE TOPIC topic_name AS STABLE stb_name
- SQL创建:
JAVA实操
- pom.xml
关键是mybatis,HikariCP以及taos-jdbcdriver
因为TDengine用的是sql语句,所以mybatis-plus也能用
<dependency>
<!--导入MyBatis-Plus作为持久层框架-->
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<!--导入jdbc使用HikariCP作为数据库连接池-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--TDengine-->
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>3.0.0</version>
</dependency>
- application.properties
server.port=6666
spring.datasource.driver-class-name=com.taosdata.jdbc.rs.RestfulDriver
spring.datasource.url=jdbc:TAOS-RS://10.18.187.24:6041/test?timezone=UTC-8&charset=UTF-8&locale=en_US.UTF-8
spring.datasource.username=root
spring.datasource.password=taosdata
# hikari
spring.datasource.hikari.connection-timeout=20000
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=12
spring.datasource.hikari.idle-timeout=300000
spring.datasource.hikari.max-lifetime=1200000
spring.datasource.hikari.auto-commit=true
- mapper
@Mapper
public interface WeatherMapper extends BaseMapper<Weather> {
@Select("SELECT COUNT(*) FROM test.meters")
int findCount();
}
参考
[ 1 ] https://www.taosdata.com/
[ 2 ] https://blog.csdn.net/qq_36608921/article/details/108119386
文章标题:TDengine学习
文章链接:http://120.46.217.131:82/archives/44/
最后编辑:2022 年 10 月 4 日 21:41 By Yang
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)