官方中文文档:https://docs.taosdata.com/
1、ubuntu24 安装TDengine
添加软件仓库:
wget -qO - http://repos.taosdata.com/tdengine.key | sudo gpg --dearmor -o /etc/apt/keyrings/tdengine-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/tdengine-keyring.gpg arch=amd64] http://repos.taosdata.com/tdengine-stable stable main" | sudo tee /etc/apt/sources.list.d/tdengine-stable.list
安装:
sudo apt update
sudo apt install tdengine-tsdb
启动:
sudo systemctl start taosd
sudo systemctl start taosadapter
查看运行状态:
systemctl status taosd
集群部署:
TDengine 也支持集群部署,集群部署后的节点分为 mnode和vnode,,mnode是管理节点、每个mnode的数据都是一样的;客户端缓存了mnode信息列表,发起请求时负载均衡到其中一个mnode,从mnode中获取元数据(表结构、表字段、某个子表的时间段对应的数据块位置),确定数据块之后再发起请求给vnode,vnode读写数据后返回;
2、连接 TDengine
我使用DBeaver 连接TDengine,默认的账号密码是 root/taosdata,端口默认6041;

3、概念说明:
时序数据库和传统的关系型数据库在 数据库、表、字段 等含义上是相同的,在用法上有些不一样:
库:在创建库时可以指定数据的有效期、多少天的数据保存在一个文件中、内存池大小等;
表:分为超级表和子表,超级表是定义了一个表模板,一个超级表可以创建N个子表,子表的列和超级表完全一致;超级表定义模板、子表存储数据;
4、TDengine 常用语法
建库:CREATE DATABASE power PRECISION 'ms' KEEP 3650 DURATION 10 BUFFER 16;
也可以不指定这些参数,以下这些值默认值;
PRECISION 'ms'
:这个数据库的时序数据使用毫秒(ms)精度的时间戳KEEP 3650
:这个库的数据将保留 3650 天,超过 3650 天的数据将被自动删除DURATION 10
:每 10 天的数据放在一个数据文件中BUFFER 16
:写入使用大小为 16MB 的内存池。
建超级表:
CREATE STABLE meters (
ts timestamp,
current float,
voltage int,
phase float
) TAGS (
location varchar(64),
group_id int
);
**创建子表,**USING meters (location,group_id) 表示使用超级表的列名列表,TAGS用于给这个子表打标签:
CREATE TABLE d1001
USING meters (
location,
group_id
) TAGS (
"California.SanFrancisco",
2
);
插入数据,子表不存在自动创建:
INSERT INTO d1002
USING meters
TAGS (
"California.SanFrancisco",
2
) VALUES (
NOW,
10.2,
219,
0.32
);
普通表,创建语法和传统关系型数据库一致;
其他更多用法参考文档
5、索引结构
主键索引:在创建超级表和普通表时第一列必须是时间类型,也是系统默认的主键索引,数据存储在块中,严格有序,每一个子表都有自己的主键索引,一个子表的一个时间段指向一个数据块;
非主键索引:除了主键索引之外可以在其他列中建立索引,非主键索引是作用在超级表上的,也就是一个超级表下面的所有子表共用一个索引 ,非主键索引是使用倒排索引的结构存储;这里的倒排索引和es的倒排所有不同,es中的倒排索引是根据内部维护的字典分词后记录词的位置,而这里的倒排索引不会分词,直接记录某一列值的位置,时序数据库的应用场景是根据时间统计个观察数据,很少会用到非主键索引;
6、应用场景
时序库的设计重心在于高性能处理时序数据,只提供了单行数据的原子性和一致性,所以对于操作多行、多表等场景不能保证数据的一致性,更多应用于非关系型业务的时序场景;