Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
22904903
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
22904903
编写于
3月 24, 2022
作者:
B
Bo Ding
提交者:
GitHub
3月 24, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refine modle part (#10981)
上级
29347590
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
27 addition
and
26 deletion
+27
-26
docs-cn/02-concept/02-concept.md
docs-cn/02-concept/02-concept.md
+1
-0
docs-cn/04-connect/04-connect.mdx
docs-cn/04-connect/04-connect.mdx
+2
-2
docs-cn/05-model/05-model.mdx
docs-cn/05-model/05-model.mdx
+18
-16
docs-cn/13-tdinternal/01-arch.md
docs-cn/13-tdinternal/01-arch.md
+5
-7
docs-cn/14-reference/01-taos-sql/05-insert.md
docs-cn/14-reference/01-taos-sql/05-insert.md
+1
-1
未找到文件。
docs-cn/02-concept/02-concept.md
浏览文件 @
22904903
...
...
@@ -13,6 +13,7 @@
| D1001 | 1538548695000 | 12.6 | 218 | 0.33 | Red | Tesla |
| D1004 | 1538548696600 | 11.8 | 221 | 0.28 | Black | Honda |
每一条记录都有设备 ID,时间戳,采集的物理量,还有与每个设备相关的静态标签。每个设备是受外界的触发,或按照设定的周期采集数据。采集的数据点是时序的,是一个数据流。
**数据特征**
...
...
docs-cn/04-connect/04-connect.mdx
浏览文件 @
22904903
...
...
@@ -53,7 +53,7 @@ TDengine 提供了 RESTful 接口,应用程序无需安装任何依赖,只
<TabItem label="Rust" value="rust">
<ConnRust />
</TabItem>
<TabItem label="Node
JS
" value="node">
<TabItem label="Node
.js
" value="node">
<ConnNode />
</TabItem>
</Tabs>
...
...
@@ -79,7 +79,7 @@ TDengine 提供了 RESTful 接口,应用程序无需安装任何依赖,只
<TabItem label="Rust" value="rust">
<ConnRustNative />
</TabItem>
<TabItem label="Node
JS" value="nodejs
">
<TabItem label="Node
.js" value="node
">
<ConnNodeNative />
</TabItem>
<TabItem label="C#" value="csharp">
...
...
docs-cn/05-model/05-model.mdx
浏览文件 @
22904903
# TDengine 数据建模
TDengine 采用关系型数据模型,需要建库、建表。因此对于一个具体的应用场景,需要考虑库、超级表和普通表的设计。本节不讨论细致的语法规则,只介绍概念。
...
...
@@ -9,15 +8,15 @@ TDengine 采用关系型数据模型,需要建库、建表。因此对于一
不同类型的数据采集点往往具有不同的数据特征,包括数据采集频率的高低,数据保留时间的长短,副本的数目,数据块的大小,是否允许更新数据等等。为了在各种场景下 TDengine 都能最大效率的工作,TDengine 建议将不同数据特征的表创建在不同的库里,因为每个库可以配置不同的存储策略。创建一个库时,除 SQL 标准的选项外,应用还可以指定保留时长、副本数、内存块个数、时间精度、文件块里最大最小记录条数、是否压缩、一个数据文件覆盖的天数等多种参数。比如:
```
my
sql
```sql
CREATE DATABASE power KEEP 365 DAYS 10 BLOCKS 6 UPDATE 1;
```
上述语句将创建一个名为 power 的库,这个库的数据将保留 365 天(超过 365 天将被自动删除),每 10 天一个数据文件,内存块数为 6,允许更新数据。详细的语法及参数请见 [
TAOS SQL 的数据管理](https://www.taosdata.com/cn/documentation/taos-sql#management
) 章节。
上述语句将创建一个名为 power 的库,这个库的数据将保留 365 天(超过 365 天将被自动删除),每 10 天一个数据文件,内存块数为 6,允许更新数据。详细的语法及参数请见 [
数据库管理](/reference/taos-sql/database
) 章节。
创建库之后,需要使用 SQL 命令
USE
将当前库切换过来,例如:
创建库之后,需要使用 SQL 命令
`USE`
将当前库切换过来,例如:
```
my
sql
```sql
USE power;
```
...
...
@@ -33,9 +32,9 @@ USE power;
## 创建超级表
一个物联网系统,往往存在多种类型的设备,比如对于电网,存在智能电表、变压器、母线、开关等等。为便于多表之间的聚合,使用 TDengine, 需要对每个类型的数据采集点创建一个超级表。以[表 1](
https://www.taosdata.com/cn/documentation/architecture
#model_table1) 中的智能电表为例,可以使用如下的 SQL 命令创建超级表:
一个物联网系统,往往存在多种类型的设备,比如对于电网,存在智能电表、变压器、母线、开关等等。为便于多表之间的聚合,使用 TDengine, 需要对每个类型的数据采集点创建一个超级表。以[表 1](
/tdinternal/arch
#model_table1) 中的智能电表为例,可以使用如下的 SQL 命令创建超级表:
```
my
sql
```sql
CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);
```
...
...
@@ -43,7 +42,7 @@ CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAG
这一指令中的 STABLE 关键字,在 2.0.15 之前的版本中需写作 TABLE 。
:::
与创建普通表一样,创建表时,需要提供表名(示例中为 meters),表结构 Schema,即数据列的定义。第一列必须为时间戳(示例中为 ts),其他列为采集的物理量(示例中为 current, voltage, phase),数据类型可以为整型、浮点型、字符串等。除此之外,还需要提供标签的 schema (示例中为 location, groupId),标签的数据类型可以为整型、浮点型、字符串等。采集点的静态属性往往可以作为标签,比如采集点的地理位置、设备型号、设备组 ID、管理员 ID 等等。标签的 schema 可以事后增加、删除、修改。具体定义以及细节请见 [TAOS SQL 的超级表管理](
https://www.taosdata.com/cn/documentation/taos-sql#super-
table) 章节。
与创建普通表一样,创建表时,需要提供表名(示例中为 meters),表结构 Schema,即数据列的定义。第一列必须为时间戳(示例中为 ts),其他列为采集的物理量(示例中为 current, voltage, phase),数据类型可以为整型、浮点型、字符串等。除此之外,还需要提供标签的 schema (示例中为 location, groupId),标签的数据类型可以为整型、浮点型、字符串等。采集点的静态属性往往可以作为标签,比如采集点的地理位置、设备型号、设备组 ID、管理员 ID 等等。标签的 schema 可以事后增加、删除、修改。具体定义以及细节请见 [TAOS SQL 的超级表管理](
/reference/taos-sql/s
table) 章节。
每一种类型的数据采集点需要建立一个超级表,因此一个物联网系统,往往会有多个超级表。对于电网,我们就需要对智能电表、变压器、母线、开关等都建立一个超级表。在物联网中,一个设备就可能有多个数据采集点(比如一台风力发电的风机,有的采集点采集电流、电压等电参数,有的采集点采集温度、湿度、风向等环境参数),这个时候,对这一类型的设备,需要建立多张超级表。一张超级表里包含的采集物理量必须是同时采集的(时间戳是一致的)。
...
...
@@ -51,29 +50,32 @@ CREATE STABLE meters (ts timestamp, current float, voltage int, phase float) TAG
## 创建表
TDengine 对每个数据采集点需要独立建表。与标准的关系型数据库一样,一张表有表名,Schema,但除此之外,还可以带有一到多个标签。创建时,需要使用超级表做模板,同时指定标签的具体值。以[表 1](
https://www.taosdata.com/cn/documentation/architecture
#model_table1)中的智能电表为例,可以使用如下的 SQL 命令建表:
TDengine 对每个数据采集点需要独立建表。与标准的关系型数据库一样,一张表有表名,Schema,但除此之外,还可以带有一到多个标签。创建时,需要使用超级表做模板,同时指定标签的具体值。以[表 1](
/tdinternal/arch
#model_table1)中的智能电表为例,可以使用如下的 SQL 命令建表:
```
my
sql
```sql
CREATE TABLE d1001 USING meters TAGS ("Beijing.Chaoyang", 2);
```
其中 d1001 是表名,meters 是超级表的表名,后面紧跟标签 Location 的具体标签值 ”Beijing.Chaoyang",标签 groupId 的具体标签值 2。虽然在创建表时,需要指定标签值,但可以事后修改。详细细则请见 [TAOS SQL 的表管理](
https://www.taosdata.com/cn/documentation/taos-sql#
table) 章节。
其中 d1001 是表名,meters 是超级表的表名,后面紧跟标签 Location 的具体标签值 ”Beijing.Chaoyang",标签 groupId 的具体标签值 2。虽然在创建表时,需要指定标签值,但可以事后修改。详细细则请见 [TAOS SQL 的表管理](
/reference/taos-sql/
table) 章节。
:::
note
:::
warning
目前 TDengine 没有从技术层面限制使用一个 database (dbA)的超级表作为模板建立另一个 database (dbB)的子表,后续会禁止这种用法,不建议使用这种方法建表。
:::
TDengine 建议将数据采集点的全局唯一 ID 作为表名(比如设备序列号)。但对于有的场景,并没有唯一的 ID,可以将多个 ID 组合成一个唯一的 ID。不建议将具有唯一性的 ID 作为标签值。
**自动建表**:在某些特殊场景中,用户在写数据时并不确定某个数据采集点的表是否存在,此时可在写入数据时使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表。比如:
### 自动建表
在某些特殊场景中,用户在写数据时并不确定某个数据采集点的表是否存在,此时可在写入数据时使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表。比如:
```
my
sql
```sql
INSERT INTO d1001 USING meters TAGS ("Beijng.Chaoyang", 2) VALUES (now, 10.2, 219, 0.32);
```
上述 SQL 语句将记录
(now, 10.2, 219, 0.32)插入表 d1001。如果表 d1001 还未创建,则使用超级表 meters 做模板自动创建,同时打上标签值 `“
Beijing.Chaoyang", 2`。
上述 SQL 语句将记录
`(now, 10.2, 219, 0.32)`插入表 d1001。如果表 d1001 还未创建,则使用超级表 meters 做模板自动创建,同时打上标签值 `"
Beijing.Chaoyang", 2`。
关于自动建表的详细语法请参见 [插入记录时自动建表](
https://www.taosdata.com/cn/documentation/taos-sql#auto_create_table
) 章节。
关于自动建表的详细语法请参见 [插入记录时自动建表](
reference/taos-sql/insert#插入记录时自动建表
) 章节。
## 多列模型 vs 单列模型
...
...
docs-cn/13-tdinternal/01-arch.md
浏览文件 @
22904903
...
...
@@ -10,8 +10,6 @@ sidebar_label: 数据模型和整体架构
在典型的物联网、车联网、运维监测场景中,往往有多种不同类型的数据采集设备,采集一个到多个不同的物理量。而同一种采集设备类型,往往又有多个具体的采集设备分布在不同的地点。大数据处理系统就是要将各种采集的数据汇总,然后进行计算和分析。对于同一类设备,其采集的数据都是很规则的。以智能电表为例,假设每个智能电表采集电流、电压、相位三个量,其采集的数据类似如下的表格:
<a
class=
"anchor"
id=
"model_table1"
></a>
<table>
<thead><tr>
<th
>
设备ID
</th>
...
...
@@ -105,7 +103,7 @@ sidebar_label: 数据模型和整体架构
</tbody>
</table>
<center>
表 1:智能电表数据示例
</center>
<center>
<a
href=
"#model_table1"
>
表 1:智能电表数据示例
</a>
</center>
每一条记录都有设备 ID,时间戳,采集的物理量(如上图中的电流、电压、相位),还有与每个设备相关的静态标签(如上述表 1 中的位置 Location 和分组 groupId)。每个设备是受外界的触发,或按照设定的周期采集数据。采集的数据点是时序的,是一个数据流。
...
...
@@ -231,7 +229,7 @@ TDengine 分布式架构的逻辑结构图如下:
通过 taosc 缓存机制,只有在第一次对一张表操作时,才需要访问 mnode,因此 mnode 不会成为系统瓶颈。但因为 schema 有可能变化,而且 vgroup 有可能发生改变(比如负载均衡发生),因此 taosc 会定时和 mnode 交互,自动更新缓存。
##
<a class="anchor" id="sharding"></a>
存储模型与数据分区、分片
## 存储模型与数据分区、分片
### 存储模型
...
...
@@ -276,7 +274,7 @@ TDengine 除 vnode 分片之外,还对时序数据按照时间段进行分区
**提示:负载均衡由参数 balance 控制,决定开启/关闭自动负载均衡。**
##
<a class="anchor" id="replication"></a>
数据写入与复制流程
## 数据写入与复制流程
如果一个数据库有 N 个副本,那一个虚拟节点组就有 N 个虚拟节点,但是只有一个是 master,其他都是 slave。当应用将新的记录写入系统时,只有 master vnode 能接受写的请求。如果 slave vnode 收到写的请求,系统将通知 taosc 需要重新定向。
...
...
@@ -328,7 +326,7 @@ Vnode 会保持一个数据版本号(version),对内存数据进行持久化
采用同步复制,系统的性能会有所下降,而且 latency 会增加。因为元数据要强一致,mnode 之间的数据同步缺省就是采用的同步复制。
##
<a class="anchor" id="persistence"></a>
缓存与持久化
## 缓存与持久化
### 缓存
...
...
@@ -395,7 +393,7 @@ dataDir /mnt/data6 2 0
2.
禁止手动移除使用中的挂载盘,挂载盘目前不支持非本地的网络盘。
3.
多级存储目前不支持删除已经挂载的硬盘的功能。
##
<a class="anchor" id="query"></a>
数据查询
## 数据查询
TDengine 提供了多种多样针对表和超级表的查询处理功能,除了常规的聚合查询之外,还提供针对时序数据的窗口查询、统计聚合等功能。TDengine 的查询处理需要客户端、vnode、mnode 节点协同完成。
...
...
docs-cn/14-reference/01-taos-sql/05-insert.md
浏览文件 @
22904903
...
...
@@ -41,7 +41,7 @@ INSERT INTO d1001 VALUES ('2021-07-13 14:06:32.272', 10.2, 219, 0.32) (162616420
:::
## 插入记录,数据对应到指定的列
\*
## 插入记录,数据对应到指定的列
向数据子表中插入记录时,无论插入一行还是多行,都可以让数据对应到指定的列。对于 SQL 语句中没有出现的列,数据库将自动填充为 NULL。主键(时间戳)不能为 NULL。例如:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录