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


    TDengine 时序数据库对数据文件有自己的命名规则,文件名中包含了vnodeID、时间范围、版本、文件类型等多种信息。了解数据文件命名规则,可以让运维工作更简单。
    废话不多说,直接上图:
    在这里插入图片描述

    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    为方便展示将 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

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

    3. 数据落盘

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

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    [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
    • 2
    • 3
    • 4
    • 5
    • 6

    查看数据文件目录,可以看到里面只有 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
    
    • 1
    • 2
    • 3
    • 4

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

    扩展

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

    1. 了解数据文件在硬盘上的分布。
    2. 了解进程在对哪些数据进行操作(lsof -p pidof taosd|grep REG)
    3. 了解不同时间范围数据特征(如果stt文件较大,可能需要compact)
  • 相关阅读:
    H5 台球猜位置小游戏
    VMWARE安装Ubuntu24.04桌面版的问题
    CentOS 搭建k8s
    特斯拉4万亿美元的【市值目标】将是一个巨大的危险信号
    编程入门之字符编码与乱码
    SpringBoot+EasyExcel导入导出【加水印】
    精读《素书》精彩语录及感悟篇(三)
    Kafka开发环境搭建
    async/await与promise
    一种基于暗通道先验算法的图像去雾技术研究
  • 原文地址:https://blog.csdn.net/weixin_43700866/article/details/133938533