Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
0f3c2ef5
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
0f3c2ef5
编写于
7月 29, 2022
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: update arch
上级
f2807216
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
38 addition
and
44 deletion
+38
-44
docs/zh/21-tdinternal/01-arch.md
docs/zh/21-tdinternal/01-arch.md
+4
-4
tests/script/jenkins/basic.txt
tests/script/jenkins/basic.txt
+11
-11
tests/script/tsim/parser/alter1.sim
tests/script/tsim/parser/alter1.sim
+1
-1
tests/script/tsim/parser/tags_filter.sim
tests/script/tsim/parser/tags_filter.sim
+1
-1
tests/script/tsim/parser/union_sysinfo.sim
tests/script/tsim/parser/union_sysinfo.sim
+0
-6
tests/script/tsim/parser/where.sim
tests/script/tsim/parser/where.sim
+16
-14
tests/script/tsim/tag/change.sim
tests/script/tsim/tag/change.sim
+1
-1
tests/script/tsim/tag/delete.sim
tests/script/tsim/tag/delete.sim
+4
-6
未找到文件。
docs/zh/21-tdinternal/01-arch.md
浏览文件 @
0f3c2ef5
...
...
@@ -25,9 +25,9 @@ TDengine 分布式架构的逻辑结构图如下:
**管理节点(mnode):**
一个虚拟的逻辑单元,负责所有数据节点运行状态的监控和维护,以及节点之间的负载均衡(图中 M)。同时,管理节点也负责元数据(包括用户、数据库、超级表等)的存储和管理,因此也称为 Meta Node。TDengine 集群中可配置多个(最多不超过 3 个)mnode,它们自动构建成为一个虚拟管理节点组(图中 M1,M2,M3)。mnode 支持多副本,采用 RAFT 一致性协议,保证系统的高可用与高可靠,任何数据更新操作只能在 Leader 上进行。mnode 集群的第一个节点在集群部署时自动完成,其他节点的创建与删除由用户通过 SQL 命令完成。每个 dnode 上至多有一个 mnode,由所属的数据节点的 EP 来唯一标识。每个 dnode 通过内部消息交互自动获取整个集群中所有 mnode 所在的 dnode 的 EP。
**弹性计算点(qnode):**
一个虚拟的逻辑单元,运行查询计算任务,也包括基于系统表来实现的 show 命令(图中 Q)。集群中可配置多个 qnode,在整个集群内部共享使用(图中 Q1,Q2,Q3)。qnode 不与具体的 DB 绑定,即一个 qnode 可以同时执行多个 DB 的查询任务。每个 dnode 上至多有一个 qnode,由所属的数据节点的 EP 来唯一标识。客户端通过与 mnode 交互,获取可用的 qnode 列表,当没有可用的 qnode 时,计算任务在 vnode 中执行。
**弹性计算
节
点(qnode):**
一个虚拟的逻辑单元,运行查询计算任务,也包括基于系统表来实现的 show 命令(图中 Q)。集群中可配置多个 qnode,在整个集群内部共享使用(图中 Q1,Q2,Q3)。qnode 不与具体的 DB 绑定,即一个 qnode 可以同时执行多个 DB 的查询任务。每个 dnode 上至多有一个 qnode,由所属的数据节点的 EP 来唯一标识。客户端通过与 mnode 交互,获取可用的 qnode 列表,当没有可用的 qnode 时,计算任务在 vnode 中执行。
**流计算点(snode):**
一个虚拟的逻辑单元,只运行流计算任务(图中 S)。集群中可配置多个 snode,在整个集群内部共享使用(图中 S1,S2,S3)。snode 不与具体的 stream 绑定,即一个 snode 可以同时执行多个 stream 的计算任务。每个 dnode 上至多有一个 snode,由所属的数据节点的 EP 来唯一标识。由 mnode 调度可用的 snode 完成流计算任务,当没有可用的 snode 时,流计算任务在 vnode 中执行。
**流计算
节
点(snode):**
一个虚拟的逻辑单元,只运行流计算任务(图中 S)。集群中可配置多个 snode,在整个集群内部共享使用(图中 S1,S2,S3)。snode 不与具体的 stream 绑定,即一个 snode 可以同时执行多个 stream 的计算任务。每个 dnode 上至多有一个 snode,由所属的数据节点的 EP 来唯一标识。由 mnode 调度可用的 snode 完成流计算任务,当没有可用的 snode 时,流计算任务在 vnode 中执行。
**虚拟节点组(VGroup):**
不同数据节点上的 vnode 可以组成一个虚拟节点组(vgroup),采用 RAFT 一致性协议,保证系统的高可用与高可靠。写操作只能在 leader vnode 上进行,系统采用异步复制的方式将数据同步到 follower vnode,这样确保了一份数据在多个物理节点上有拷贝。一个 vgroup 里虚拟节点个数就是数据的副本数。如果一个 DB 的副本数为 N,系统必须有至少 N 数据节点。副本数在创建 DB 时通过参数 replica 可以指定,缺省为 1。使用 TDengine 的多副本特性,可以不再需要昂贵的磁盘阵列等存储设备,就可以获得同样的数据高可靠性。虚拟节点组由管理节点创建、管理,并且由管理节点分配一个系统唯一的 ID,VGroup ID。如果两个虚拟节点的 VGroup ID 相同,说明他们属于同一个组,数据互为备份。虚拟节点组里虚拟节点的个数是可以动态改变的,容许只有一个,也就是没有数据复制。VGroup ID 是永远不变的,即使一个虚拟节点组被删除,它的 ID 也不会被收回重复利用。
...
...
@@ -103,11 +103,11 @@ TDengine 存储的数据包括采集的时序数据以及库、表相关的元
vnode(虚拟数据节点)负责为采集的时序数据提供写入、查询和计算功能。为便于负载均衡、数据恢复、支持异构环境,TDengine 将一个数据节点根据其计算和存储资源切分为多个 vnode。这些 vnode 的管理是 TDengine 自动完成的,对应用完全透明。
对于单独一个数据采集点,无论其数据量多大,一个 vnode(或 vgroup,如果副本数大于 1)有足够的计算资源和存储资源来处理(如果每秒生成一条 16 字节的记录,一年产生的原始数据不到 0.5G),因此 TDengine 将一张表(一个数据采集点)的所有数据都存放在一个 vnode 里,而不会让同一个采集点的数据分布到两个或多个 dnode 上。而且一个 vnode 可存储多个数据采集点(表)的数据,一个 vnode 可容纳的表的数目的上限为一百万。设计上,一个 vnode 里所有的表都属于同一个 DB。
一个数据节点上,除非特殊配置,一个 DB 拥有的 vnode 数目不会超过系统核的数目。
对于单独一个数据采集点,无论其数据量多大,一个 vnode(或 vgroup,如果副本数大于 1)有足够的计算资源和存储资源来处理(如果每秒生成一条 16 字节的记录,一年产生的原始数据不到 0.5G),因此 TDengine 将一张表(一个数据采集点)的所有数据都存放在一个 vnode 里,而不会让同一个采集点的数据分布到两个或多个 dnode 上。而且一个 vnode 可存储多个数据采集点(表)的数据,一个 vnode 可容纳的表的数目的上限为一百万。设计上,一个 vnode 里所有的表都属于同一个 DB。
TDengine 3.0 采用 hash 一致性算法,确定每张数据表所在的 vnode。创建 DB 时,系统会立刻分配指定数目的 vnode,并确定每个 vnode 所负责的数据表范围。当创建一张表时,系统根据数据表名计算出所在的 vnodeID,立即在该 vnode 创建表。如果 DB 有多个副本,系统不是只创建一个 vnode,而是一个 vgroup(虚拟数据节点组)。系统对 vnode 的数目没有任何限制,仅仅受限于物理节点本身的计算和存储资源。
每张表的 meta data(包含 schema,标签等)也存放于 vnode 里,而不是集中存放于 mnode,实际上这是对
M
eta 数据的分片,这样便于高效并行的进行标签过滤操作。
每张表的 meta data(包含 schema,标签等)也存放于 vnode 里,而不是集中存放于 mnode,实际上这是对
m
eta 数据的分片,这样便于高效并行的进行标签过滤操作。
### 数据分区
...
...
tests/script/jenkins/basic.txt
浏览文件 @
0f3c2ef5
...
...
@@ -89,7 +89,7 @@
./test.sh -f tsim/parser/alter_column.sim
./test.sh -f tsim/parser/alter_stable.sim
./test.sh -f tsim/parser/alter.sim
# TD-17
661
./test.sh -f tsim/parser/alter1.sim
# TD-17
959
./test.sh -f tsim/parser/alter1.sim
./test.sh -f tsim/parser/auto_create_tb_drop_tb.sim
./test.sh -f tsim/parser/auto_create_tb.sim
./test.sh -f tsim/parser/between_and.sim
...
...
@@ -145,7 +145,7 @@
./test.sh -f tsim/parser/select_across_vnodes.sim
./test.sh -f tsim/parser/select_distinct_tag.sim
./test.sh -f tsim/parser/select_from_cache_disk.sim
# TD-17832
./test.sh -f tsim/parser/select_with_tags.sim
./test.sh -f tsim/parser/select_with_tags.sim
./test.sh -f tsim/parser/selectResNum.sim
./test.sh -f tsim/parser/set_tag_vals.sim
./test.sh -f tsim/parser/single_row_in_tb.sim
...
...
@@ -155,14 +155,14 @@
./test.sh -f tsim/parser/slimit1.sim
./test.sh -f tsim/parser/stableOp.sim
# TD-17661 ./test.sh -f tsim/parser/tags_dynamically_specifiy.sim
# TD-17661
./test.sh -f tsim/parser/tags_filter.sim
./test.sh -f tsim/parser/tags_filter.sim
./test.sh -f tsim/parser/tbnameIn.sim
./test.sh -f tsim/parser/timestamp.sim
./test.sh -f tsim/parser/top_groupby.sim
./test.sh -f tsim/parser/topbot.sim
./test.sh -f tsim/parser/union.sim
# TD-17704
./test.sh -f tsim/parser/union_sysinfo.sim
# TD-17661
./test.sh -f tsim/parser/where.sim
./test.sh -f tsim/parser/union_sysinfo.sim
./test.sh -f tsim/parser/where.sim
# ---- query ----
./test.sh -f tsim/query/charScalarFunction.sim
...
...
@@ -422,18 +422,18 @@
./test.sh -f tsim/tag/bool_binary.sim
./test.sh -f tsim/tag/bool_int.sim
./test.sh -f tsim/tag/bool.sim
# TD-17
661
./test.sh -f tsim/tag/change.sim
# TD-17
407
./test.sh -f tsim/tag/change.sim
./test.sh -f tsim/tag/column.sim
./test.sh -f tsim/tag/commit.sim
# TD-17
661
./test.sh -f tsim/tag/create.sim
# TD-17
661
./test.sh -f tsim/tag/delete.sim
# TD-17
661
./test.sh -f tsim/tag/double.sim
# TD-17661
./test.sh -f tsim/tag/filter.sim
# TD-17
407
./test.sh -f tsim/tag/create.sim
# TD-17
407
./test.sh -f tsim/tag/delete.sim
# TD-17
407
./test.sh -f tsim/tag/double.sim
./test.sh -f tsim/tag/filter.sim
# TD-17407 ./test.sh -f tsim/tag/float.sim
./test.sh -f tsim/tag/int_binary.sim
./test.sh -f tsim/tag/int_float.sim
./test.sh -f tsim/tag/int.sim
# TD-17
661
./test.sh -f tsim/tag/set.sim
# TD-17
959
./test.sh -f tsim/tag/set.sim
./test.sh -f tsim/tag/smallint.sim
./test.sh -f tsim/tag/tinyint.sim
...
...
tests/script/tsim/parser/alter1.sim
浏览文件 @
0f3c2ef5
...
...
@@ -103,7 +103,7 @@ endi
print ================== change a tag value
sql alter table car1 set tag carid=10
sql select carId, carmodel from car1
sql select
distinct
carId, carmodel from car1
if $rows != 1 then
return -1
endi
...
...
tests/script/tsim/parser/tags_filter.sim
浏览文件 @
0f3c2ef5
...
...
@@ -100,7 +100,7 @@ endi
sql drop database $db
sql show databases
if $rows !=
0
then
if $rows !=
2
then
return -1
endi
...
...
tests/script/tsim/parser/union_sysinfo.sim
浏览文件 @
0f3c2ef5
...
...
@@ -25,11 +25,5 @@ sql (select database()) union all (select database())
if $rows != 2 then
return -1
endi
if $data00 != @union_db0@ then
return -1
endi
if $data10 != @union_db0@ then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
tests/script/tsim/parser/where.sim
浏览文件 @
0f3c2ef5
...
...
@@ -77,12 +77,12 @@ if $rows != $val then
return -1
endi
sql select tbname from $mt
sql select
distinct
tbname from $mt
if $rows != $tbNum then
return -1
endi
sql select tbname from $mt where t1 < 2
sql select
distinct
tbname from $mt where t1 < 2
if $rows != 2 then
return -1
endi
...
...
@@ -249,14 +249,14 @@ sql_error insert into tb_where_NULL values(now, ?, '12')
sql insert into tb_where_NULL values ('2019-01-01 09:00:00.000', 1, 'val1')
sql insert into tb_where_NULL values ('2019-01-01 09:00:01.000', NULL, NULL)
sql insert into tb_where_NULL values ('2019-01-01 09:00:02.000', 2, 'val2')
sql
_error
select * from tb_where_NULL where c1 = NULL
sql
_error
select * from tb_where_NULL where c1 <> NULL
sql
_error
select * from tb_where_NULL where c1 < NULL
sql
_error
select * from tb_where_NULL where c1 = "NULL"
sql
_error
select * from tb_where_NULL where c1 <> "NULL"
sql
_error
select * from tb_where_NULL where c1 <> "nulL"
sql
_error
select * from tb_where_NULL where c1 > "NULL"
sql
_error
select * from tb_where_NULL where c1 >= "NULL"
sql select * from tb_where_NULL where c1 = NULL
sql select * from tb_where_NULL where c1 <> NULL
sql select * from tb_where_NULL where c1 < NULL
sql select * from tb_where_NULL where c1 = "NULL"
sql select * from tb_where_NULL where c1 <> "NULL"
sql select * from tb_where_NULL where c1 <> "nulL"
sql select * from tb_where_NULL where c1 > "NULL"
sql select * from tb_where_NULL where c1 >= "NULL"
sql select * from tb_where_NULL where c2 = "NULL"
if $rows != 0 then
return -1
...
...
@@ -300,15 +300,17 @@ endw
system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode1 -s start
sql
_error
select * from wh_mt0 where c3 = 'abc' and tbname in ('test_null_filter');
sql select * from wh_mt0 where c3 = 'abc' and tbname in ('test_null_filter');
sql select * from wh_mt0 where c3 = '1' and tbname in ('test_null_filter');
if $row != 0 then
return -1
endi
sql select * from wh_mt0 where c3 = '1';
if $row == 0 then
sql select * from wh_mt0 where c3 = 1;
print $rows -> 1000
print $data00 $data01 $data02
if $row != 1000 then
return -1
endi
...
...
@@ -336,7 +338,7 @@ sql insert into where_ts values('2021-06-19 16:22:00', 1);
sql insert into where_ts values('2021-06-19 16:23:00', 2);
sql insert into where_ts values('2021-06-19 16:24:00', 3);
sql insert into where_ts values('2021-06-19 16:25:00', 1);
sql select * from (select * from where_ts) where ts<'2021-06-19 16:25:00' and ts>'2021-06-19 16:22:00'
sql select * from (select * from where_ts) where ts<'2021-06-19 16:25:00' and ts>'2021-06-19 16:22:00'
order by ts;
if $rows != 2 then
return -1
endi
...
...
tests/script/tsim/tag/change.sim
浏览文件 @
0f3c2ef5
...
...
@@ -311,7 +311,7 @@ sql select * from $mt where tgcol2 = 1 -x step52
return -1
step52:
sql select * from $mt where tgcol3
= 1
sql select * from $mt where tgcol3
< 2
print $data01 $data02 $data03
if $rows != 1 then
return -1
...
...
tests/script/tsim/tag/delete.sim
浏览文件 @
0f3c2ef5
...
...
@@ -97,10 +97,10 @@ if $data23 != TAG then
return -1
endi
sql alter table $mt drop tag tgcol2
sql alter table $mt drop tag tgcol1 -x step40
return -1
step40:
sql alter table $mt drop tag tgcol2
print =============== step5
$i = 5
...
...
@@ -123,11 +123,11 @@ if $data03 != 2 then
return -1
endi
sql alter table $mt drop tag tgcol2
sql alter table $mt drop tag tgcol1 -x step50
return -1
step50:
sql alter table $mt drop tag tgcol2
print =============== step6
$i = 6
$mt = $mtPrefix . $i
...
...
@@ -186,7 +186,7 @@ endi
if $data31 != TINYINT then
return -1
endi
if $data41 !=
BINARY
then
if $data41 !=
VARCHAR
then
return -1
endi
if $data22 != 2 then
...
...
@@ -405,8 +405,6 @@ sql alter table $mt drop tag tgcol3
sql alter table $mt drop tag tgcol4
sql alter table $mt drop tag tgcol6
sleep 3000
print =============== step2
$i = 2
$mt = $mtPrefix . $i
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录