1. 为什么选择TDengine时序数据库

第一次接触TDengine是在一个物联网项目的数据存储方案选型会上。当时我们需要处理每秒上万台设备的传感器数据,试过几个主流数据库都遇到性能瓶颈,直到同事推荐了这个国产时序数据库。说实话,刚开始我对国产数据库是持怀疑态度的,但实测下来发现写入性能比InfluxDB快3倍,存储空间节省了80%,这彻底改变了我的看法。

时序数据库和传统关系型数据库最大的区别在于,它是专门为时间序列数据设计的。想象一下你家的智能电表,每隔1秒就会产生一条用电量记录,这些数据有两个鲜明特点:一是每条数据都带时间戳,二是数据一旦写入就很少修改。TDengine正是针对这种场景做了深度优化,采用列式存储和自适应压缩算法,实测单机就能轻松支撑每秒10万级的写入吞吐量。

2. 环境准备与依赖检查

2.1 操作系统要求

我这次用的是CentOS 7.9最小化安装版,干净的环境能避免很多奇怪的问题。这里有个坑要注意:TDengine对glibc版本有要求,建议先用ldd --version检查下版本是否在2.17以上。如果系统比较老,可以先升级基础库:

yum update -y glibc

2.2 硬件资源配置

根据官方建议,生产环境至少需要:

  • 4核CPU(实测2核也能跑,但性能会打折扣)
  • 8GB内存(重要!TDengine对内存敏感)
  • 100GB以上SSD存储(机械硬盘写入性能下降明显)

可以用下面命令快速检查本机资源:

free -h      # 查看内存
df -h        # 查看磁盘
lscpu        # 查看CPU

3. 二进制安装实战

3.1 获取安装包

官网下载需要填邮箱验证,对于无GUI的服务器环境,推荐用wget直接获取最新稳定版(当前是3.0.4.2):

wget https://www.taosdata.com/assets-download/3.0/TDengine-server-3.0.4.2-Linux-x64.tar.gz

下载完成后务必校验文件完整性:

md5sum TDengine-server-3.0.4.2-Linux-x64.tar.gz
# 对比官网公布的MD5值

3.2 解压与安装

解压时建议使用-v参数观察解压过程,确保没有报错:

tar -zxvf TDengine-server-3.0.4.2-Linux-x64.tar.gz
cd TDengine-server-3.0.4.2

执行安装脚本时,-e no参数表示不启用企业版功能(社区版够用了):

./install.sh -e no

安装完成后会输出关键信息:

  • 配置文件路径:/etc/taos/taos.cfg
  • 服务管理命令:systemctl start taosd
  • 客户端连接命令:taos -h 主机名

4. 配置调优指南

4.1 基础配置修改

编辑/etc/taos/taos.cfg,这几个参数需要重点关注:

# 数据文件存储目录(SSD优先)
dataDir               /var/lib/taos

# 单个vnode的内存缓存大小(默认16MB,可适当调大)
cache                32

# 每张表的内存块大小(影响写入性能)
blocks               6

4.2 系统参数优化

修改Linux系统限制,避免连接数过多被拒绝:

echo "root soft nofile 65536" >> /etc/security/limits.conf
echo "root hard nofile 65536" >> /etc/security/limits.conf

调整内核参数提升网络性能:

echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
sysctl -p

5. 服务管理与监控

5.1 服务启停操作

启动服务时建议按顺序操作:

systemctl start taosd       # 主服务
systemctl start taosadapter # REST接口服务

检查服务状态的小技巧:

systemctl status taosd -l   # 显示完整日志
journalctl -u taosd -f      # 实时跟踪日志

5.2 基础监控配置

TDengine自带监控功能,先创建监控数据库:

CREATE DATABASE monitor;
USE monitor;
CREATE TABLE IF NOT EXISTS cluster_metrics (
  ts TIMESTAMP,
  metric_name NCHAR(64),
  metric_value DOUBLE
);

然后配置taos.cfg开启监控:

monitor               1
monitorInterval       30
monitorDbName         monitor

6. 实战操作演示

6.1 基础CRUD操作

创建测试数据库(注意时序数据库需要指定保留策略):

CREATE DATABASE test 
KEEP 365 DAYS 10 BLOCKS 4;
USE test;

建表示例(必须包含TIMESTAMP字段):

CREATE TABLE devices (
  ts TIMESTAMP,
  temperature FLOAT,
  humidity INT,
  device_id NCHAR(32)
);

批量插入效率更高:

INSERT INTO devices VALUES
  ('2023-08-01 10:00:00', 25.3, 45, 'device001'),
  ('2023-08-01 10:00:01', 25.5, 46, 'device001');

6.2 超级表使用技巧

超级表(STable)是TDengine的特色功能,先创建模板:

CREATE STABLE meters (
  ts TIMESTAMP,
  current FLOAT,
  voltage INT,
  phase FLOAT
) TAGS (
  location BINARY(32),
  groupid INT
);

基于模板创建子表:

CREATE TABLE d1001 USING meters TAGS ("California.SanFrancisco", 1);

查询时可以按TAG过滤:

SELECT AVG(current) FROM meters WHERE groupid=1;

7. 性能压测实战

用内置的taosBenchmark工具测试:

taosBenchmark \
  --interlace-rows 10000 \
  --num-of-tables 100 \
  --rows-per-table 100000

关键参数说明:

  • --interlace-rows:批量写入行数
  • --num-of-tables:模拟的设备数
  • --rows-per-table:每设备数据量

实测结果解读:

  • 单机写入速度:约30万点/秒
  • 平均延迟:<50ms
  • 存储空间:原始数据的1/10

8. 常见问题排查

问题1:启动服务时报错"Unable to establish connection"

检查步骤:

  1. 确认taosd进程是否运行:ps -ef | grep taosd
  2. 检查端口6030是否监听:netstat -tlnp | grep 6030
  3. 查看日志:tail -50 /var/log/taos/taosd.log

问题2:写入速度突然下降

可能原因:

  1. 磁盘空间不足:df -h /var/lib/taos
  2. 内存不足:free -m
  3. 数据文件压缩中(正常现象)

问题3:客户端连接超时

解决方案:

  1. 检查客户端与服务端版本是否一致
  2. 确认防火墙规则:firewall-cmd --list-all
  3. 测试网络连通性:telnet 服务器IP 6030

9. 生产环境建议

  1. 数据备份策略

    • 定期执行taosdump导出数据
    • 配置cronjob自动备份:
      0 2 * * * taosdump -o /backup -D test
      
  2. 监控指标

    • 重点监控taosd进程内存占用
    • 关注dataDir目录磁盘空间
    • 定期检查慢查询日志
  3. 性能调优

    • 根据业务特点调整cache参数
    • 高频写入场景增加blocks
    • 使用批量插入减少网络开销

第一次部署TDengine时,建议先在测试环境充分验证。我在实际项目中遇到过时区配置问题导致的时间戳异常,后来发现是CentOS默认没装tzdata包。这类问题在文档中可能不会特别说明,但确实会影响使用体验。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐