您现在的位置是:首页 >技术教程 >TDengine3.0与2.0版本的差异网站首页技术教程

TDengine3.0与2.0版本的差异

黎陌MLing 2024-07-25 12:01:01
简介TDengine3.0与2.0版本的差异

一、TDEnigne3.0相关环境构建及使用

  最近把TDEngine2.4升级到TDEngine3.0了,发现了不少坑,很多地方不能套用 2.x 的经验了,以下是我个人遇到的差异总结。

二、3.0与2.0的版本差异

2.1 mnode及集群创建

  用过 TDengine 2.x 的都知道,多节点 TDengine 集群,mnode 必须配置多个(2~3)才能保证高可用。mnode 数量受 numOfMnodes 参数控制。但是 TDengine 3.0 这个参数已经消失了。
1

  1. 对于新建的集群,mnode 只有一个。
    ·
    查看了官方文档,原来 mnode 是需要集群创建好以后,手动创建的。
    1
  2. 集群创建
      添加节点的命令没有变化,和 2.x 一样。CREATE DNODE "fqdn:port";
    1
      TDengine 3.0 有个神奇的参数support_vnodes,这个列说明了对应节点允许创建的 vnode 个数,决定了1个节点上最大的vnode数量,默认是cpu的2倍。

创建数据库报错 Out of dnodes,明明是3节点集群,确无法创建3副本数据库。

2.2 创建数据库

  1. 和 2.x 最大的区别就是多了information_schema和performance_schema两张表,对于熟悉 MySQL 的同学,是不是有点眼熟了。
    1
  2. TDengine 3.0 的建库语句也发生了很大变化,通过show create database 可要看到建库的参数越来越陌生了。
taos> show create database testG;
*************************** 1.row ***************************
       Database: test
Create Database: CREATE DATABASE `test` BUFFER 96 CACHEMODEL 'none' COMP 2 DURATION 14400m WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 KEEP 5256000m,5256000m,5256000m PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 3 STRICT 'off' WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0
Query OK, 1 rows in database (0.000644s)

按照 2.x 的命令创建数据,直接报 DB error: Syntax error
1
查看官方文档才知道,相关参数已经改了:
2

2.3 数据库和超级表的详细查询

  2.x 的时候,查看数据库和超极表的详细信息,直接
show databases;
show stables; 就可以了。
如下:
1
可是到了 3.0,显示的信息简单的不得了。
1
如果要查看详细信息,只能到 informaiont_schema 这个库去找了,这个数据库是 3.0 新增的,专门用来存储数据库相关信息。
1

  1. 查询数据库相关信息:
    1
  2. 查询超级表相关信息:
    2
    虽然查询起来麻烦一些,但是也有一些好的地方,比如过可以做数据过滤了,这在show时代可是不支持的。
    3

2.4 查看超级表下有多少子表

TDengine 3.0 只能用以下两种方法:

taos> select count(*) from information_schema.ins_tables where stable_name='meters' and db_name='test';
       count(*)        |
========================
                 10000 |
Query OK, 1 rows in database (0.027683s)

taos> select count(*) from (select distinct tbname from meters);
       count(*)        |
========================
                 10000 |
Query OK, 1 rows in database (0.019055s)

2.5 RESTful 不兼容

  1. rest api差异
    1
  2. 响应码差异:
#TDengine 2.x 响应代码和消息体
{
  "status": "succ",
  "head": [ "name", "created_time","ntables","vgroups","replica","quorum",  "days", "keep1,keep2,keep(D)",  "cache(MB)","blocks", "minrows "maxrows",
    "wallevel", "fsync","comp", "precision", "status"
  ],
  "data": [
    [ "log",  "2020-09-02 17:23:00.039",4,1,1,1, 10,"30,30,30",1,3,100,4096, 1,3000, 2,   "us","ready"  ]
  ],
  "rows": 1
}

#TDengine 3.x 响应代码和消息体

{
    "code": 0,
    "column_meta": [
        [  "name", "VARCHAR",   64],
        [ "ntables",  "BIGINT", 8],
        [ "status", "VARCHAR", 10]
    ],
    "data": [
        [  "information_schema", 16,"ready"
        ],
        [ "performance_schema", 9, "ready"
        ]
    ],
    "rows": 2
}

在2.x中是通过status = ‘succ’来判断查询、插入是否成功的,而在3.x中,通过code来判断的:
(1)如果执行过程中出现异常,返回格式:

{
	code:(int)错误码。
	desc:(string)错误描述。
}
#示例
{
  "code": 9728,
  "desc": "syntax error near "1""
}

(2)如果执行正常,返回格式:

{
	code:(int)0 代表成功。
	column_meta:([][3]any) 列信息,每个列会用三个值来说明,分别为:列名(string)、列类型(string)、类型长度(int)。
	rows:(int)数据返回行数。
	data:([][]any)具体数据内容(时间格式仅支持 RFC3339,结果集为 0 时区)。
}
#示例
{
  "code": 0,
  "column_meta": [
    ["ts", "TIMESTAMP", 8], ["count", "BIGINT", 8]
  ],
  "data": [
    [ "2022-06-29T05:50:55.401Z",2 ],
  ],
  "rows": 4
}

2.6 无法修改副本数

3.x已经不支持修改副本了,不只是副本,很多参数都不支持修改了。

taos> alter database test replica 3;
DB error: Syntax error near "replica 3;" (0.000048s)

2.7 消失的时间戳

对于时序数据,我们经常会进行窗口查询,比如统计每秒的数据量。

  • 2.x的窗口查询
    1
  • 3.x的窗口查询:
    1
    结果,时间戳去哪里了? 没有时间戳要这数据有啥用??
    1
    原来,有个伪劣_wstart
taos> select _wstart,count(*) from test.meters interval(1s);
         _wstart         |       count(*)        |
==================================================
 2017-07-14 10:40:00.000 |              10000000 |
 2017-07-14 10:40:01.000 |              10000000 |
 2017-07-14 10:40:02.000 |              10000000 |
 2017-07-14 10:40:03.000 |              10000000 |
 2017-07-14 10:40:04.000 |              10000000 |
 2017-07-14 10:40:05.000 |              10000000 |
 2017-07-14 10:40:06.000 |              10000000 |
 2017-07-14 10:40:07.000 |              10000000 |
 2017-07-14 10:40:08.000 |              10000000 |
 2017-07-14 10:40:09.000 |              10000000 |
Query OK, 10 rows in database (4.847837s)
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。