当前位置: 首页 > 工具软件 > TDengine > 使用案例 >

TDengine的使用

闻人树
2023-12-01

TDengine

简介

  • TDengine是一个高效的存储、查询、分析时序大数据的平台,专为物联网、车联网、工业互联网、运维监测等优化而设计。你可以像使用关系型数据库MySQL一样来使用它,简单又方便

特点

  1. 数据是时序的,一定带有时间戳
  2. 数据是结构化的
  3. 数据极少有更新或删除操作
  4. 数据源是唯一的
  5. 相对于互联网,写多读少
  6. 用户关注的是一段时间的趋势,而不是某一特定时间点的值
  7. 数据是有保留期限的
  8. 数据的查询分析一定是基于时间段和地理区域的

一个数据采集点一张表:对每个数据采集点单独建表(比如有一千万个智能电表,就需创建一千万张表,上述表格中的d1001, d1002, d1003, d1004都需单独建表)

SQL

---- 创建库(这个库的数据将保留 365 天(超过 365 天将被自动删除),每 10 天一个数据文件,内存块数为 6,允许更新数据)
CREATE DATABASE power KEEP 365 DAYS 10 BLOCKS 6 UPDATE 1;

---- 创建超级表
CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);

---- 以超级表为模板创建数据表
create table test using meter  tags('California.SanFrancisco', 2);

---- 单独创建表
create table t (ts timestamp, speed int);

---- 一次插入多条数据
INSERT INTO d1001 VALUES (1538548684000, 10.2, 220, 0.23) (1538548696650, 10.3, 218, 0.25);

---- 一次写入多表
INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31) (1538548695000, 12.6, 218, 0.33) d1002 VALUES (1538548696800, 12.3, 221, 0.31);

---- 插入记录时自动创建表
INSERT INTO d21001 USING meters TAGS ('California.SanFrancisco', 2) VALUES ('2021-07-13 14:06:32.272', 10.2, 219, 0.32);
insert into device01 using device_category tags('shanghai',11) values ('2022-08-04 05:20:00','集控器','as0001',1, 35.1)
-- 关联超级表的时候只需要最开始的初始化表的时候using stable,后续写入数据不需要带using:
 insert into device01  values (now(),'ZigBee窗帘','as0006',1, 35.1);
 
---- 分页查询
select * from device01 limit 10 offset 2;

超级表可以直接查询数据:
select * from test.meters limit 10;

  • 超级表
    采集点的静态属性往往可以作为标签,比如采集点的地理位置、设备型号、设备组 ID、管理员 ID 等等。标签的 schema 可以事后增加、删除、修改。具体定义以及细节请见 TAOS SQL 的超级表管理 章节

  • 更新数据:

    1. 创建数据库时使用默认参数,数据库的 update 属性为 0,相同时间戳的数据丢失,此时数据无法更新;
    1. update设置为1时,插入的数据使用重复时间戳,会覆盖之前的数据

写入操作

  • 写入数据时,先将数据点写进 Commit日志,然后转发给同一虚拟节点组里的其他节点,再按列写入分配的内存块。当内存块的剩余空间达到一定临界值或设定的commit 时间时, 内存块的数据将写入硬盘。内存块是固定大小(如16K)的,但依据系统内存的大小,每个采集点可以分配一个到多个内存块,采取 LRU 策略进行管理。在一个内存块里,数据是连续存放的,但块与块是不连续的,因此TDengine为每一个表在内存里建立有块的索引,以方便写入和查询。
  • 数据先写入预写日志,然后再写入vnode(虚拟数据节点),然后定期或者达到存储上限把数据flush到硬盘

TDengine 在数据落盘时会打开新的预写日志文件,在落盘后则会删除老的预写日志文件,避免日志文件无限制的增长

连续查询

  • 连续查询是 TDengine 定期自动执行的查询,采用滑动窗口的方式进行计算,是一种简化的时间驱动的流式计算

数据聚合

  • 查询温度传感器t1记录的温度没五分钟的平均值:
select avg(degree) from t1 interval(5);
  • 查询上海所有温度传感器记录的温度没五分钟的平均值(超级表:t_master):
select avg(degree) from t_master where location='shanghai' interval(5);

数据压缩

  • 采取列式存储,便于压缩
  • 不同数据采用不同的压缩算法,包括delta-delta编码、sample 8B方法、zig-zag编码、LZ4等算法
  • 二阶段压缩:压缩的基础上,用通用压缩算法进行再压缩

数据迁移

注:超级表不可导入

使用taosdump工具

安装taosdump

  1. 下载taosdum工具压缩包并拷贝到对应的目录:
 sudo cp /mnt/e/file/tdengine/taosTools-2.0.0-Linux-x64.tar.gz /usr/local/td
  1. 解压并安装
 sudo tar -zxvf taosTools-2.0.0-Linux-x64.tar.gz
 sudo ./install-taostools.sh

步骤:

  • 创建导出目录:

mkdir -p /tmp/dump/db0
mkdir -p /tmp/dump/stb1
mkdir -p /tmp/dump/tb1

  • 导出:
  1. 导出数据库
tasodump -h td2.server.com -u root -ptaosdata -o /tmp/dump/db0 -T 8 rain
  1. 导出指定的超级表:
tasodump -h td2.server.com -u root -ptaosdata -o /tmp/dump/stb1 -T 8 rain master_test
  1. 导出指定的表:
tasodump -h td2.server.com -u root -ptaosdata -o /tmp/dump/tb1 -T 8 rain test1
  • 导入
  1. 导入数据库
tasodump -h td2.server.com -u root -ptaosdata -i /tmp/dump/db0 -T 8 
  1. 导入指定的超级表:
tasodump -h td2.server.com -u root -ptaosdata -i /tmp/dump/stb1 -T 8 
  1. 导入指定的表:
tasodump -h td2.server.com -u root -ptaosdata -i /tmp/dump/tb1 -T 8 

数据文件

  • 导出(导出文件在根目录 ~)(测试1w条数据,导出耗时0.021766s)
select * from test1 >> data.csv
  • 导入(测试1w条数据,导入耗时0.024142s、0.025041s)
insert into test1 file 'usr/local/td/file/data.csv'

数据导入:source

taos> source "/usr/local/taos/data.sql";

sql文件类似:

create database if not exists rain;

USE rain;

create stable if not exists power(ts timestamp, voltage int, current float, temperature float) tags(sn int, city nchar(64), groupid int);

create table if not exists device1 using power tags(1, "太原", 1);
create table if not exists device2 using power tags(2, "西安", 2);

insert into device1 values("2022-09-04 21:03:38.734", 1, 1.0, 1.0);
insert into device2 values("2022-09-04 21:03:40.734", 2, 2.0, 2.0);

基于DataX的TDengine数据迁移工具

环境准备

  • 下载DataX源码:git clone https://github.com/taosdata/DataX.git
  • 安装jdk环境
  • 安装Python环境
  • 配置maven

步骤

  • 运行打包DadaX项目:
    cd DataX
    mvn -U clean package assembly:assembly -Dmaven.test.skip=true
  • 拷贝到虚拟机上:
    cp target/datax.tar.gz your_install_dir
    cd your_install_dir
    tar -zxvf dataX.tar.gz
  • 配置json文件:
    {
       "job": {
         "content": [{
           "reader": {
             "name": "mysqlreader",
             "parameter": {
               "username": "root",
               "password": "root",
               "column": ["id","name"],
               "splitPk": "id",
               "connection": [{
                 "table": ["t_employee"],
                 "jdbcUrl": ["jdbc:mysql://192.168.15.152:3306/rain"]
               }]
             }
           },
           "writer": {
             "name": "tdenginewriter",
             "parameter": {
               "host": "192.168.31.56",
               "port": 6030,
               "dbname": "rain",
               "user": "root",
               "password": "taosdata",
               "batchSize": 1000
             }
           }
         }],
         "setting": {
           "speed": {
             "channel": 1
           }
         }
       }
     } 
  • 运行Python:
    python bin/datax.py job/opentsdb2tdengine.json

安装

  • 下载安装包:TDengine-server-3.0.0.1-Linux-x64.tar.gz (54.4 M)

  • 解压:

sudo tar -zxvf TDengine-server-3.0.0.1-Linux-x64.tar.gz
  • 运行安装命令:
sudo ./install.sh
  • 配置taos.cfg文件

  • 启动

sudo taosd (Ubuntu安装)

卸载

  • 卸载压缩包安装方式:
rmtaos
  • 卸载 taosTools 命令:
rmtaostools
  • Deb安装方式的卸载
sudo dpkg -r tdengine
  • 清除文件:
sudo rm -rf /var/log/taos/
sudo rm -rf /var/lib/taos/
sudo rm -rf /etc/taos/taos.cfg
 类似资料: