背景
我们的项目涉及物联网相关业务,由于一开始的年少无知,传感器数据采用了 MySQL 进行存储,经过近两年的数据累积,目前几个核心表,单表数据已过亿,虽然通过索引优化、 SQL 优化以及读写分离等措施,勉强满足基本的查询,能在秒级给出数据;但是一方面当前 MySQL 数据表索引的大小甚至超过了数据大小,这样下去肯定不行;另一方面来自于前端感知设备的数据量还在持续增加,当面对用户多维度的统计需求,在实现上、效率上总是那么不尽如人意。。
大概是2021年的6月份,一次偶然的机会,我在一个技术交流群中了解到涛思数据。后来花了三五天,把 TDengine 官网的文档过了一遍,并通过实际代码体验了一番,大大小小总结了15篇文章,当前的专栏偏项目实战,不涉及 TDengine 各项功能的具体说明,如果你对 TDengine 的基本使用感兴趣,可以先看下那15篇文章快速上手。
下载安装启动
[root@iot1 local]
[root@iot1 local]
准备中...
正在升级/安装...
1:tdengine-2.4.0.16-3
Start to install TDengine...
System hostname is: iot1
Enter FQDN:port (like h1.taosdata.com:6030) of an existing TDengine cluster node to join
OR leave it blank to build one:
Enter your email address for priority support or enter empty to skip:
Created symlink from /etc/systemd/system/multi-user.target.wants/taosd.service to /etc/systemd/system/taosd.service.
To configure TDengine : edit /etc/taos/taos.cfg
To start TDengine : sudo systemctl start taosd
To access TDengine : taos -h iot1 to login into TDengine server
TDengine is installed successfully!
[root@iot1 local]
● taosd.service - TDengine server service
Loaded: loaded (/etc/systemd/system/taosd.service; enabled; vendor preset: disabled)
Active: inactive (dead)
[root@iot1 local]
[root@iot1 local]
● taosd.service - TDengine server service
Loaded: loaded (/etc/systemd/system/taosd.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2022-04-10 22:58:19 EDT; 7s ago
Process: 80163 ExecStartPre=/usr/local/taos/bin/startPre.sh (code=exited, status=0/SUCCESS)
Main PID: 80169 (taosd)
CGroup: /system.slice/taosd.service
└─80169 /usr/bin/taosd
4月 10 22:58:19 iot1 systemd[1]: Starting TDengine server service...
4月 10 22:58:19 iot1 systemd[1]: Started TDengine server service.
4月 10 22:58:19 iot1 TDengine:[80169]: Starting TDengine service...
4月 10 22:58:19 iot1 TDengine:[80169]: Started TDengine service successfully.
Note: TDengine 使用 FQDN 来访问,所以要配置下 hostname ,命令: vi /etc/hosts , 我这里的配置是:
192.168.44.138 iot1
入门体验
Linux 版的 TDengine 在安装完后就自带了客户端,在本机命令行键入: taos ,进入交互式界面。
[root@iot1 local]
Welcome to the TDengine shell from Linux, Client Version:2.4.0.16
Copyright (c) 2020 by TAOS Data, Inc. All rights reserved.
taos> show databases;
name | created_time | ntables | vgroups | replica | quorum | days | keep | cache(MB) | blocks | minrows | maxrows | wallevel | fsync | comp | cachelast | precision | update | status |
===========================================================================================================
log | 2022-04-10 22:58:20.969 | 11 | 1 | 1 | 1 | 10 | 30 | 1 | 3 | 100 | 4096 | 1 | 3000 | 2 | 0 | us | 0 | ready |
Query OK, 1 row(s) in set (0.001580s)
taos> create database db;
Query OK, 0 of 0 row(s) in database (0.001529s)
taos> use db;
Database changed.
taos> create table t (ts timestamp, speed int);
Query OK, 0 of 0 row(s) in database (0.005688s)
taos> show tables;
table_name | created_time | columns | stable_name | uid | tid | vgId |
==========================================================================================================================================================
t | 2022-04-10 23:01:55.656 | 2 | | 844424946917281 | 1 | 3 |
Query OK, 1 row(s) in set (0.001593s)
taos> describe t;
Field | Type | Length | Note |
=================================================================================
ts | TIMESTAMP | 8 | |
speed | INT | 4 | |
Query OK, 2 row(s) in set (0.000545s)
taos> insert into t values ('2019-07-15 00:00:00', 10);
Query OK, 1 of 1 row(s) in database (0.000677s)
taos> insert into t values (now, 100);
Query OK, 1 of 1 row(s) in database (0.000615s)
taos> select count(*) from t;
count(*) |
========================
2 |
Query OK, 1 row(s) in set (0.001231s)
taos> select * from t;
ts | speed |
========================================
2019-07-15 00:00:00.000 | 10 |
2022-04-10 23:02:24.150 | 100 |
Query OK, 2 row(s) in set (0.001117s)
taos> select * from db.t;
ts | speed |
========================================
2019-07-15 00:00:00.000 | 10 |
2022-04-10 23:02:24.150 | 100 |
Query OK, 2 row(s) in set (0.001084s)
taos> select * from t limit 1;
ts | speed |
========================================
2019-07-15 00:00:00.000 | 10 |
Query OK, 1 row(s) in set (0.001145s)
taos> select * from t order by ts desc;
ts | speed |
========================================
2022-04-10 23:02:24.150 | 100 |
2019-07-15 00:00:00.000 | 10 |
Query OK, 2 row(s) in set (0.001989s)
taos> drop table t;
Query OK, 0 of 0 row(s) in database (0.002666s)
taos> show tables;
Query OK, 0 row(s) in set (0.001786s)
taos> drop database db;
Query OK, 0 of 0 row(s) in database (0.003368s)
taos> show databases;
name | created_time | ntables | vgroups | replica | quorum | days | keep | cache(MB) | blocks | minrows | maxrows | wallevel | fsync | comp | cachelast | precision | update | status |
===========================================================================================================
log | 2022-04-10 22:58:20.969 | 12 | 1 | 1 | 1 | 10 | 30 | 1 | 3 | 100 | 4096 | 1 | 3000 | 2 | 0 | us | 0 | ready |
Query OK, 1 row(s) in set (0.001084s)
taos> exit
[root@iot1 local]
Note:
- 若通过其他主机的客户端访问
TDengine ,则需要指定主机名:taos -h ip/hostname - 我们注意到在通过
taos 连接时,并没有指定用户名与密码,其实,TDengine 在用户未指定认证信息时,默认为root, taosdata
参考官方文档,常用的几个命令行参数:
-c, --config-dir: 指定配置文件目录,默认为/etc/taos
-h, --host: 指定服务的FQDN,默认为本地服务
-s, --commands: 在不进入终端的情况下运行TDengine命令
-u, --user: 连接TDengine服务器的用户名,缺省为root
-p, --password: 连接TDengine服务器的密码,缺省为taosdata
-?, --help: 打印出所有命令行参数
经过此番体验,乍看起来, TDengine 与我们用过的关系型数据库 MySQL 没啥区别呀,且慢,这只是用类 SQL 语句操作了下 TDengine ,后续实战中我们继续看下与传统 SQL 不太一样的地方,同时体验下 TDengine 的写入、查询效率。
查看日志
如果在实际开发、运维过程中怀疑服务有问题,那么通过查看 TDengine 日志的方式进行排查。
[root@iot1 taos]
04/11 01:27:14.775739 00001167 SDB vgId:1, mnode:1, role:master
04/11 01:27:14.775748 00001167 MND vgId:1, update mnodes epSet, numOfMnodes:1
04/11 01:27:14.775755 00001167 MND vgId:1, mnodes epSet is set, num:1 inUse:0
04/11 01:27:14.775761 00001167 MND vgId:1, mnode:1, fqdn:iot1 shell:6030 peer:6035
04/11 01:27:14.776953 00001167 SDB vgId:1, update mnodes role, replica:1
04/11 01:27:14.776978 00001167 SDB vgId:1, mnode:1, role:master
04/11 01:27:14.776986 00001167 MND vgId:1, update mnodes epSet, numOfMnodes:1
04/11 01:27:14.776993 00001167 MND vgId:1, mnodes epSet is set, num:1 inUse:0
04/11 01:27:14.776999 00001167 MND vgId:1, mnode:1, fqdn:iot1 shell:6030 peer:6035
客户端连接
有这么几种方式对 TDengine 进行远程访问:RESTFul各种端,命令行客户端、GUI客户端、IDEA数据库连接、JNI程序端。
命令行客户端
https://www.taosdata.com/assets-download/TDengine-client-2.4.0.16-Windows-x64.exe
- 指定主机名访问:
taos -h ip/hostname - 认证信息可不加:默认为root, taosdata
GUI 客户端
https://github.com/skye0207/TDengineGUI
在用了新版的 TDengine 后遇到一个问题:发现远程客户端通过 6041 端口无法建立连接(防火墙已开放6041端口),咦,奇了个怪~
莫慌,我在 TDengine 的开源仓库的 Issues 中发现了类似问题,_
[root@iot1 taos]
原来,新版的 TDengine 还有个 taosadapter ,启动 taosadapter 后才可以连接到 6041 端口,小坑!
IDEA数据库连接
需要加载 TDengine 的驱动,记得连接地址的主机名根据实际修改。
- 中文乱码,通过charset参数解决:jdbc: TAOS://iot1:6030/demo?charset=CP936
JNI程序端
后续在代码中我们将使用这种方式建立连接。因为 JDBC-JNI 使用的是 com.taosdata.jdbc.TSDBDriver ,连接 6030 端口,所以需要同时开放TCP、UDP。
iptables -I INPUT -p TCP --dport 6030 -j ACCEPT
iptables -I INPUT -p UDP --dport 6030 -j ACCEPT
JDBC-JNI和JDBC-RESTful的对比
对比项 | JDBC-JNI | JDBC-RESTful |
---|
支持的操作系统 | Linux、Windows | 全平台 | 是否需要安装 client | 需要 | 不需要 | server 升级后是否需要升级 client | 需要 | 不需要 | 写入性能 | JDBC-RESTful 是 JDBC-JNI 的 50%~90% | | 查询性能 | JDBC-RESTful 与 JDBC-JNI 没有差别 | |
Reference
If you have any questions or any bugs are found, please feel free to contact me.
Your comments and suggestions are welcome!
|