TDengine小知识-数据文件命名规则

TDengine 时序数据库对数据文件有自己的命名规则,文件名中包含了vnodeID、时间范围、版本、文件类型等多种信息。了解数据文件命名规则,可以让运维工作更简单。
废话不多说,直接上图:
TDengine小知识-数据文件命名规则_第1张图片

  • v4:文件所属 Vgroup 组,该文件属于 Vgroup 4。
  • f1833:FileID,该ID使用时间命名,为时间分片的初始时间点,ID=UnixTime/Duration。
[root@c2-125 ~]# echo "1833*864000"|bc
1583712000
[root@c2-125 ~]# date -d @1583712000 +'%Y-%m-%d %H:%M:%S'
2020-03-09 08:00:00
##Otherway
[root@c2-125 ~]# echo "1833*864000"|bc|awk '{print strftime("%Y-%m-%d",$1)}'
2020-03-09

f1833 表示存储 2023-03-09 至 2023-03-19 时间范围的数据(以上示例数据库 Duration 是10天[864000秒])。

TIPS:TDengine 是按照零时区进行的时间分片和本地时区设置无关。

  • ver151:版本号,随文件更新而递增。
  • data:文件类型。

TDengine 3.0 版本有如下文件类型:

  1. data 数据文件,存储时序数据
  2. head 头文件(索引文件):存储data文件中的数据分布信息。
  3. stt 临时文件:临时存储不满足落盘条件(minRows)的数据。
  4. sma 预计算文件:存储时序数据的预计算结果。

案例演示

下面我们对上述说法进行验证,验证步骤如下:

  1. 创建数据库
  2. 写入指定时间数据
  3. 让数据落盘
  4. 检查文件名称

1. 创建数据库

taos> show databases;
              name              |
=================================
 information_schema             |
 performance_schema             |
Query OK, 2 row(s) in set (0.001396s)

taos> create database db01 vgroups 1 duration 1d wal_retention_period 0;
Create OK, 0 row(s) affected (0.090438s)

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

为方便展示将 vgroups 数量设置为 1,文件分片粒度 duration 设置为 1天,wal 保存时间设置为 0。

2. 写入指定时间数据

taos> use db01;
Database changed.

taos> create table t1(ts timestamp,v1 int);
Create OK, 0 row(s) affected (0.001026s)

taos> insert into t1 values('2023-05-01T00:00:00Z',1);
Insert OK, 1 row(s) affected (0.000884s)

taos> insert into t1 values('2023-05-01T00:00:01Z',2);
Insert OK, 1 row(s) affected (0.000697s)

taos> insert into t1 values('2023-05-01T00:00:03Z',3);
Insert OK, 1 row(s) affected (0.000729s)

taos> select * from t1;
           ts            |     v1      |
========================================
 2023-05-01 08:00:00.000 |           1 |
 2023-05-01 08:00:01.000 |           2 |
 2023-05-01 08:00:03.000 |           3 |
Query OK, 3 row(s) in set (0.016896s)

TIPS: 我在写入数据时采用的是 ISO8601 时间格式,指定时区为零时区。而我本地客户端设置的是东八区,因此显示的时间和我写入的时间相差 8 小时。
为保证写入数据时间的准确性,TDengine 建议采用 ISO8601 和 Epoch (Unix Time) 两种格式。

3. 数据落盘

taos> flush database db01;
Query OK, 0 row(s) affected (0.003168s)

4. 检查文件名称

检查文件名称前,我们先查看以下文件所属Vgroup

taos> show vgroups;
  vgroup_id  |            db_name             |   tables    | v1_dnode |  v1_status  | v2_dnode |  v2_status  | v3_dnode |  v3_status  | v4_dnode |  v4_status  |  cacheload  | cacheelements | tsma |
======================================================================================================================================================================================================
           6 | db01                           |           1 |        1 | leader      | NULL     | NULL        | NULL     | NULL        | NULL     | NULL        |           0 |             0 |    0 |
Query OK, 1 row(s) in set (0.002075s)
[root@c2-125 ~]# cd /var/lib/taos/vnode/vnode6/tsdb/
[root@c2-125 tsdb]# ll
total 8
drwxr-xr-x 2 root root  123 Oct 20 08:51 cache.rdb
-rwxrwxrwx 1 root root  135 Oct 20 08:57 current.json
-rwxrwxrwx 1 root root 4096 Oct 20 08:57 v6f19478ver1.stt

查看数据文件目录,可以看到里面只有 1 个 v6f19478ver1.stt 文件,因为刚才只写了 3 条数据,达不到落盘条件。

[root@c2-125 tsdb]# echo "19478*86400"|bc
1682899200
[root@c2-125 tsdb]# date -d @1682899200 +'%Y-%m-%d %H:%M:%S'
2023-05-01 08:00:00

做一下时间转换,显示该文件时间起始范围是 2023-05-01。

扩展

知道数据文件的命名规则可以帮助我们做哪些事情呢?

  1. 了解数据文件在硬盘上的分布。
  2. 了解进程在对哪些数据进行操作(lsof -p pidof taosd|grep REG)
  3. 了解不同时间范围数据特征(如果stt文件较大,可能需要compact)

你可能感兴趣的:(TDengine,tdengine,大数据,时序数据库,DBA)