TDengine学习

  5 分钟   6897 字    |    

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

JAVA实操

  1. 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>
  1. 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
  1. 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

~  ~  The   End  ~  ~


 赏 
感谢您的支持,我会继续努力哒!
支付宝收款码
tips
文章二维码 分类标签:技术数据库tdengine
文章标题:TDengine学习
文章链接:http://120.46.217.131:82/archives/44/
最后编辑:2022 年 10 月 4 日 21:41 By Yang
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
(*) 8 + 3 =
快来做第一个评论的人吧~