TDengine3.0与2.0版本的差异
- 一、TDEnigne3.0相关环境构建及使用
- 二、3.0与2.0的版本差异
- 2.1 mnode及集群创建
- 2.2 创建数据库
- 2.3 数据库和超级表的详细查询
- 2.4 查看超级表下有多少子表
- 2.5 RESTful 不兼容
- 2.6 无法修改副本数
- 2.7 消失的时间戳
一、TDEnigne3.0相关环境构建及使用
最近把TDEngine2.4升级到TDEngine3.0了,发现了不少坑,很多地方不能套用 2.x 的经验了,以下是我个人遇到的差异总结。
-
1. TDEngine3.0下载、安装及配置详细*
-
2. TDEngine - taosdump的安装与使用实战*
-
3. TDEngine的常用命令总结*
二、3.0与2.0的版本差异
2.1 mnode及集群创建
用过 TDengine 2.x 的都知道,多节点 TDengine 集群,mnode 必须配置多个(2~3)才能保证高可用。mnode 数量受 numOfMnodes 参数控制。但是 TDengine 3.0 这个参数已经消失了。
- 对于新建的集群,mnode 只有一个。
查看了官方文档,原来 mnode 是需要集群创建好以后,手动创建的。
- 集群创建
添加节点的命令没有变化,和 2.x 一样。CREATE DNODE "fqdn:port";
TDengine 3.0 有个神奇的参数support_vnodes,这个列说明了对应节点允许创建的 vnode 个数,决定了1个节点上最大的vnode数量,默认是cpu的2倍。
创建数据库报错 Out of dnodes,明明是3节点集群,确无法创建3副本数据库。
2.2 创建数据库
- 和 2.x 最大的区别就是多了information_schema和performance_schema两张表,对于熟悉 MySQL 的同学,是不是有点眼熟了。
- TDengine 3.0 的建库语句也发生了很大变化,通过show create database 可要看到建库的参数越来越陌生了。
taos> show create database test\G;
*************************** 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
查看官方文档才知道,相关参数已经改了:
2.3 数据库和超级表的详细查询
2.x 的时候,查看数据库和超极表的详细信息,直接
show databases;
show stables;
就可以了。
如下:
可是到了 3.0,显示的信息简单的不得了。
如果要查看详细信息,只能到 informaiont_schema 这个库去找了,这个数据库是 3.0 新增的,专门用来存储数据库相关信息。
- 查询数据库相关信息:
- 查询超级表相关信息:
虽然查询起来麻烦一些,但是也有一些好的地方,比如过可以做数据过滤了,这在show时代可是不支持的。
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 不兼容
- rest api差异
- 响应码差异:
#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的窗口查询
- 3.x的窗口查询:
结果,时间戳去哪里了? 没有时间戳要这数据有啥用??
原来,有个伪劣_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)