跳转至

体验 TDengine 时序数据库


2023-06-15 by dongnan

什么是时序数据库

时序数据库全称为时间序列数据库。时间序列数据库指主要用于处理带时间标签(按照时间的顺序变化)的数据,带时间标签的数据也称为时间序列数据。

TDengine

TDengine 是一款开源(GNU AGPL v3.0 )的时序数据库,应用场景包括物联网、车联网、工业互联网、金融、IT运维等场景并进行了优化。

目标

使用 Docker 快速部署 TDengine 时序数据库服务器,并初步体验TDengine

环境描述

VM: 2vCPU/4GB/100GB On XenServer
OS: Ubuntu Server 20.04
Docker: docker-ce:20.10.12
镜像: tdengine/tdengine:latest
网络: 容器默认使用宿主机网络

操作步骤

下载镜像

# 2023年6月12号 版本为 3.0.5.0 
docker pull tdengine/tdengine:latest

创建容器

docker run -d \
   --name tdengine \
   -e TAOS_FQDN=tdengine \
   -p 6030:6030 \
   -p 6041-6049:6041-6049 \
   -p 6041-6049:6041-6049/udp \
   -v td-data:/var/lib/taos \
   tdengine/tdengine
  • 参数 --name 创建容器的名称为 tdengine
  • 参数 -p 创建容器到主机的端口映射。
  • 参数 -v 创建数据卷,容器内某些目录做数据持久化
监听端口
  • TDengine 3.0 服务端使用 TCP协议 6030端口。TCP/UDP协议6041-6049端口为 taosAdapter 所使用提供REST服务。
默认目录
  • 配置文件目录:/etc/taos/taos.cfg
  • 数据库目录:/var/lib/taos
  • 日志目录:/var/log/taos

验证容器

查看容器日志

docker logs tdengine --tail 5
06/15 09:14:37.846415 00000059 DND The daemon initialized successfully
06/15 09:14:38.845235 00000081 MND dnode:1, mnode syncState from offline to leader, restoreState from 0 to 1
06/15 09:14:38.845261 00000081 MND dnode:1, from offline to online, memory avail:3683354624 total:4111257600 cores:4.00
06/15 09:14:38.845400 00000089 DND status rsp received from mnode, statusSeq:1:1 dnodeVer:0:2, gtid:0x:0x5d8b0be55df00002
06/15 09:14:38.846367 00000089 DND succeed to write dnode file:/var/lib/taos//dnode/dnode.json, num:1 ver:2

进入容器内部

docker exec -ti tdengine /bin/bash

容器内当前路径

root@d2940e232526:~# pwd
/root

命令行客户端

进入命令行客户端:

# 输入 taos 命令
taos>

退出命令行客户端:

taos> exit
root@d2940e232526:~#

写入1亿条记录

taosBenchmark 命令将在数据库 test 下面自动创建一张超级表 meters,该超级表下有1万张表,表名为d0d9999;

每张表有1万条记录,每条记录有 ts、current、voltage、phase 四个字段, 每张表带有标签 locationgroupIdgroupId 被设置为110

root@d2940e232526:~#  taosBenchmark
[06/15 09:42:26.251611] INFO: client version: 3.0.5.0
#...省略
[06/15 09:44:20.353091] SUCC: insert delay, min: 14.2040ms, avg: 20.9869ms, p90: 30.3120ms, p95: 35.3520ms, p99: 47.5260ms, max: 125.5410ms

查询数据

TDengine 采用 SQL 作为查询语言。应用程序可以通过 REST API 或连接器发送 SQL 语句,还可以通过命令行工具 taos 手动执行 SQL 即席查询。

进入客户端:

root@d2940e232526:~# taos
Welcome to the TDengine Command Line Interface, Client Version:3.0.5.0
taos>

查看数据库:

taos> show databases;
              name              |
=================================
 information_schema             |
 performance_schema             |
 test                           |
Query OK, 3 row(s) in set (0.001700s)

进入数据库:

taos> use test;
Database changed.

查看表结构:

taos> desc test.meters;
             field              |         type         |   length    |   note   |
=================================================================================
 ts                             | TIMESTAMP            |           8 |          |
 current                        | FLOAT                |           4 |          |
 voltage                        | INT                  |           4 |          |
 phase                          | FLOAT                |           4 |          |
 groupid                        | INT                  |           4 | TAG      |
 location                       | VARCHAR              |          24 | TAG      |
Query OK, 6 row(s) in set (0.001184s)

查询超级表meters总条数:

taos> select count(*) from test.meters;
       count(*)        |
========================
             100000000 |
Query OK, 1 row(s) in set (0.136925s)

查询平均值、最大值、最小值:

taos> select avg(current), max(voltage), min(phase) from test.meters;
       avg(current)        | max(voltage) |      min(phase)      |
==================================================================
               9.980024408 |          114 |              0.29167 |
Query OK, 1 row(s) in set (0.279108s)

查询 where 条件

taos> select count(*) from test.meters where location="California.SanFrancisco";
       count(*)        |
========================
               9970000 |
Query OK, 1 row(s) in set (0.038702s)

小结

  • TDengine 作为开源时序数据库,社区版本数据读写速度非常快、满足一般的使用场景,如需要高级功能可以使用企业版。
  • 社区支持优秀,技术文档清晰完整,为开发者提供了主流语言SDKREST API接口;
  • 更容易上手,虽然是非关系数型的据库但可以用SQL语句操作数据,这对熟悉mysql等关系型数据库用户比较友好。

参考文档

回到页面顶部