|
@@ -0,0 +1,798 @@
|
|
1
|
+# 基本概念
|
|
2
|
+
|
|
3
|
+TDengine有三个模块。一个是客户端模块`taosc`。另外两个是服务端模块,一个是管理节点模块`MGMT`,一个是数据节点模块`DNODE`。客户端模块把请求交给管理节点模块,通过TCP/UDP的方式,在配置文件中通过`mgmtShellPort`来配置端口,默认端口是`6030`。客户端模块也会和数据节点模块打交道,也通过TCP/UDP的方式,默认端口是`6035`。
|
|
4
|
+
|
|
5
|
+所有的元数据、存储和查询都会首先和管理节点模块打交道,会有缓存。元数据包括用户、数据库、表。
|
|
6
|
+
|
|
7
|
+在数据节点模块中的一个最重要的概念是虚拟节点`vnode`.一个库可以有很多`vnode`。一个表只会在一个`vnode`里,不会跨`vnode`存在。在写数据的时候里面有一个`预写日志`机制,就是把数据先放在缓存里,如果遇到突然断电的情况也没关系,因为当电力恢复之后缓存的数据还会进入硬盘,专业术语叫做`落盘`。落盘有两种方式。一种是`时间驱动落盘`,就是每隔一段时间缓存数据就会进入硬盘,默认为1小时,在`taos.cfg`中的`commitTime`字段配置;另外一种是`数据驱动落盘`,当缓存数据达到一定规模数据会进入硬盘,并且刷新日志文件。关键几个配置如下:
|
|
8
|
+
|
|
9
|
+```
|
|
10
|
+数据保存位置:
|
|
11
|
+ 默认放在了/var/lib/taos/目录中,通过dataDir设置。
|
|
12
|
+
|
|
13
|
+数据分片:
|
|
14
|
+ 默认vnode中表数据按10天切片,通过daysPerFile设置。
|
|
15
|
+
|
|
16
|
+保存时间:
|
|
17
|
+ 默认是3650天,系统自动删除,通过daysToKeep设置。
|
|
18
|
+
|
|
19
|
+数据块:
|
|
20
|
+ 按列存储。
|
|
21
|
+
|
|
22
|
+数据文件种类:
|
|
23
|
+ -data文件
|
|
24
|
+ -head文件
|
|
25
|
+ -last文件
|
|
26
|
+```
|
|
27
|
+
|
|
28
|
+**最佳实践**
|
|
29
|
+
|
|
30
|
+- **一个设备一张表**:提升读取写入速度,在存储介质上是连续的,一张表只有一个写入者,没有锁,以追加的方式写数据
|
|
31
|
+- **采集的物理量**:也就是列,类型包括整型、浮点型、字符串型,没有索引。
|
|
32
|
+- **时间戳**:有索引
|
|
33
|
+- **标签**:保存在超级表的元数据节点中
|
|
34
|
+- **超级表**:方便聚合统计
|
|
35
|
+- **库**:涉及保留时长、备份数、Cache大小、文件块大小、是否压缩分库
|
|
36
|
+- **库和表的数量**:没有限制
|
|
37
|
+
|
|
38
|
+# SQL语句
|
|
39
|
+
|
|
40
|
+- <> 表示用户需要输入的内容
|
|
41
|
+- [] 表示用户输入的内容可选
|
|
42
|
+- | 表示多选一
|
|
43
|
+- ... 表示前面的项可重复多个
|
|
44
|
+
|
|
45
|
+# 时间戳
|
|
46
|
+
|
|
47
|
+- 时间格式:YYYY-MM-DD HH:mm:ss.MS, 2017-08-12 18:25:58.128
|
|
48
|
+- 时间分辨率:默认毫秒
|
|
49
|
+- 服务器内部函数:now表示服务器的当前时间
|
|
50
|
+- 时间戳为0:默认使用服务器当前时间
|
|
51
|
+- Epoche Time,长整数:表示从1970-01-01 08:00:00.000开始的毫秒数
|
|
52
|
+- 时间可以加减:比如`now-2h`,a表示毫秒,s表示秒,m表示分钟,h表示小时,d表示天,w表示周,n表示月,y表示年。比如`select * from t1 where ts > now-2w and ts <=now-1w`
|
|
53
|
+- 启用微秒:通过`enableMicrosecond`
|
|
54
|
+
|
|
55
|
+# 数据类型
|
|
56
|
+
|
|
57
|
+- TIMESTAMP:8 bytes, 时间戳,最小精度为毫秒,从格林威治时间1970-01-01 08:00:00.000开始
|
|
58
|
+- INT:4 bytes, 整型,范围是[-2^31+1,2^31-1],-2^31被用作null值
|
|
59
|
+- BIGINT: 8 bytes,长整型,范围是[-2^59,2^59]
|
|
60
|
+- FLOAT:4 bytes, 浮点型,有效位数6-7
|
|
61
|
+- DOUBLE:8 bytes, 双精度浮点型,有效位数15-16
|
|
62
|
+- BINARY: 长度自定义,记录字符串,最长不能超过504bytes,字符串两端使用单引号,否则英文全部自动转换为小写。使用时需指定大小,比如binary(20)是最长是20个字符的字符串,每个字符站1byte的存储空间,如果字符串超过20个字节,将自动截断。对于字符串内的单引号,用转义符`\'`。
|
|
63
|
+- SMALLINT,2 bytes, 短整型,范围[-32767.32767]
|
|
64
|
+- TINYINT, 1 bytes, 单字节整型,范围[-127,127]
|
|
65
|
+- BOOL, 1 bytes, 布尔类型,true或false
|
|
66
|
+- NCHAR,自定义大小,拥有记录非ASCII字符串,如中文字符,每个nchar占用4个字节大小。字符串两端使用单引号,字符串内的单引号需要转义`\'`,nchar(10)表示最多存储10个nchar字符,占用40bytes空间。如果字符串超出声明长度将被自动截断。
|
|
67
|
+
|
|
68
|
+# 数据库管理
|
|
69
|
+
|
|
70
|
+SQL语句中的英文字符默认不区分大小写,统一自动转换为小写执行。如果有大小写敏感,需要使用单引号把大写字母引用起来。
|
|
71
|
+
|
|
72
|
+- 创建数据库:`CREATE DATABASE MYDB`,默认数据库数据保存10年
|
|
73
|
+- 使用数据库:`USE MYDB`
|
|
74
|
+- 删除数据库:`DROP DATABASE MYDB`
|
|
75
|
+- 显示所有数据库:`SHOW DATABASES`
|
|
76
|
+
|
|
77
|
+# 表管理
|
|
78
|
+
|
|
79
|
+- 创建表:`CREATE TABLE tb_name (timestamp_field_name TIMESTAMP, field1_name data_type1)`表的第一个字段必须是`TIMESTAMP`类型,系统会自动将其设置为主键。表的每行的长度不能超过托4096个字节。使用数据类型binary或nchar需要制定最长的字节数,比如binary(20)
|
|
80
|
+- 删除表:`DROP TABLE tb_name`
|
|
81
|
+- 显示数据库下的所有表信息:`SHOW TABLES`,可以使用like过滤,比如`SHOW TABLES LIKE ...`,%匹配0到任意个字符,_表示匹配一个字符
|
|
82
|
+- 获取表结构:`DESCRIBE`
|
|
83
|
+- 表增加列:·`ALTER TABLE tb_name ADD COLUMN field_name data_type`
|
|
84
|
+- 表删除列:`ALTER TABLE tb_name DROP COLUMN filed_name`
|
|
85
|
+
|
|
86
|
+注意:
|
|
87
|
+
|
|
88
|
+- 如果通过超级表创建,只能针对超级表进行操作,同时针对超级表的结构更改对所有表都会生效。
|
|
89
|
+- 使用`use db_name`操作后操作当前数据库下的表
|
|
90
|
+- 切换到其它数据库的表,可以使用`demo.tb1`来表示
|
|
91
|
+
|
|
92
|
+# 数据写入
|
|
93
|
+
|
|
94
|
+- 插入一条记录:`INSERT INTO tb_name VALUES (field_value, ...)`
|
|
95
|
+- 插入一条记录到指定的列:`INSERT INTO tb_name(field1_name,...) VALUES(field1_value)`,语句中没有出现的列,数据库将自动填充为NULL
|
|
96
|
+- 插入多条记录:`INSERT INTO tb_names VALUES (field1_value1, ...) (field1_value2,...)`
|
|
97
|
+- 按指定的列插入多条记录:`INSERT INTO tb_name(field1_name,...) VALUES(field1_value1,...)(field1_value2,...)`
|
|
98
|
+- 向多个表插入多条记录:`INSERT INTO tb1_name VALUES (field1_value1,...)(field1_value2,...)... tb2_name VALUES (field1_value1,...)(field1_value2,...)...`
|
|
99
|
+- 同时向多个表按列插入多条记录
|
|
100
|
+
|
|
101
|
+```
|
|
102
|
+INSERT INTO tb1_name (tb1_field1_name,...) VALUES(field1_value1,...)(field1_value1,...)
|
|
103
|
+ tb2_name (tb2_field1_name,...) VALUES(field1_value1,...)(field1_value2,...)
|
|
104
|
+```
|
|
105
|
+
|
|
106
|
+注意:
|
|
107
|
+
|
|
108
|
+- 对于同一张表,记录的时间戳必须是递增,否则会跳过插入该条记录;如果时间错为0,会默认使用服务器当前时间作为时间戳
|
|
109
|
+- 如果需要将时间戳小于最后一条记录时间的记录写入到数据库,可以使用IMPORT命令替代INSERT命令,语法是一样的;如果同时IMPORT多条记录,需要保证一批记录是按时间戳排序好的
|
|
110
|
+
|
|
111
|
+# 数据查询
|
|
112
|
+
|
|
113
|
+```
|
|
114
|
+SELECT {* | expr_list} FROM tb_name
|
|
115
|
+ [WHERRE wehre_condition]
|
|
116
|
+ [ORDER BY _c0 {DESC | ASC}]
|
|
117
|
+ [LIMIT limit, [, OFFSET offset]]
|
|
118
|
+ [>> export_file]
|
|
119
|
+
|
|
120
|
+SELECT function_list FROM tb_name
|
|
121
|
+ [WHERE where_condition]
|
|
122
|
+ [LIMIT limit [, OFFSET offset]]
|
|
123
|
+ [>> export_file]
|
|
124
|
+```
|
|
125
|
+
|
|
126
|
+- 返回所有列:*
|
|
127
|
+- 指定列
|
|
128
|
+- 对数字列进行四则运算
|
|
129
|
+- 给列取别名
|
|
130
|
+- where语句结合逻辑判断
|
|
131
|
+- where语句结合通配符
|
|
132
|
+- `_c0`表示首列的时间戳
|
|
133
|
+- 输出结果默认按时间戳升序排列
|
|
134
|
+- ORDER BY只能对时间戳操作,对其它字段操作属于非法
|
|
135
|
+
|
|
136
|
+过滤操作:同时使用多个字段过滤需要使用`AND`,暂时不支持`OR`。针对同一字段的过滤条件必须单一,例如`Value>20 and value <30`是合法的,`Value<20 AND Value <> 5`是非法的。
|
|
137
|
+
|
|
138
|
+- `>` 适用于timestamp 和 numeric types
|
|
139
|
+- `<` 适用于timestamp 和 numeric types
|
|
140
|
+- `>= ` 适用于 timestamp 和 numeric types
|
|
141
|
+- `<=` 适用于 timestamp 和 numeric types
|
|
142
|
+- `=` 适用于所有类型
|
|
143
|
+- `<>` 适用于所有类型
|
|
144
|
+- `%` 适用于 binary 和 nchar
|
|
145
|
+- `_` 适用于 binary 和 nchar
|
|
146
|
+
|
|
147
|
+# SQL函数
|
|
148
|
+
|
|
149
|
+COUNT
|
|
150
|
+```
|
|
151
|
+SELECT COUNT([*|field_name]) FROM tb_name [WHERE clause]
|
|
152
|
+返回行数或某列的非空值数量
|
|
153
|
+返回类型为INT64
|
|
154
|
+应用于全部字段,表和超级表
|
|
155
|
+```
|
|
156
|
+
|
|
157
|
+AVG
|
|
158
|
+```
|
|
159
|
+SELECT AVG(field_name) FROM tb_name [WHERE clause]
|
|
160
|
+
|
|
161
|
+返回统计表或超级表中某列的平均值,返回结果类型为double,不能应用在timestamp, binary, nchar, bool字段
|
|
162
|
+```
|
|
163
|
+
|
|
164
|
+WAVG
|
|
165
|
+```
|
|
166
|
+SELECT WAVG(field_name) FROM tb_name WHERE clause
|
|
167
|
+
|
|
168
|
+加权平均,返回sdouble,不能用在timestamp, binary, nchar, bool类型,适用于表和超级表
|
|
169
|
+```
|
|
170
|
+
|
|
171
|
+SUM
|
|
172
|
+```
|
|
173
|
+SELECT SUM(field_name) FROM tb_name [WHERE clause]
|
|
174
|
+
|
|
175
|
+统计表或超级表某列的和,返回double或int64,不能用在timestamp, binary, nchar, bool
|
|
176
|
+```
|
|
177
|
+
|
|
178
|
+STDDEV
|
|
179
|
+```
|
|
180
|
+SELECT STDDEV(field_name) FROM tb_name [WHERE clause]
|
|
181
|
+
|
|
182
|
+统计某列的均方差,返回double,不能用在timestamp, binary, nchar, bool
|
|
183
|
+```
|
|
184
|
+
|
|
185
|
+LEASTSQUARES
|
|
186
|
+```
|
|
187
|
+SELECT LEASTSQUARES(field_name) FROM tb_name [WHERE clause]
|
|
188
|
+
|
|
189
|
+返回表中某列值是主键(时间戳)的拟合直线方程,返回结果是字符串(斜率,截距),不能应用在timestamp, binary, nchar, bool,自变量是时间戳,因变量是该列的值,适用于表
|
|
190
|
+```
|
|
191
|
+
|
|
192
|
+MIN
|
|
193
|
+```
|
|
194
|
+SELECT MIN(field_name) FROM {tb_name | stb_name} [WHERE clause]
|
|
195
|
+
|
|
196
|
+不能用在timestamp, binary, ncahr, bool
|
|
197
|
+```
|
|
198
|
+
|
|
199
|
+MAX
|
|
200
|
+```
|
|
201
|
+SELECT MAX(field_name) FROM {tb_name | stb_name} [WHERE clause]
|
|
202
|
+```
|
|
203
|
+
|
|
204
|
+FIRST
|
|
205
|
+```
|
|
206
|
+SELECT FIRST(field_name) FROM {tb_name | stb_name} [WHERE clause]
|
|
207
|
+
|
|
208
|
+表或超级表中某列值最先写入的非NULL值,适用于所有字段,各个列FIRST(*),如果结果集中的某列全部为NULL,该列的返回结果也是NULL,如果结果集中所有列全部为NULL值则不返回结果
|
|
209
|
+```
|
|
210
|
+
|
|
211
|
+LAST
|
|
212
|
+```
|
|
213
|
+SELECT LAST(field_name) FROM {tb_name | stb_name} [WHERE clause]
|
|
214
|
+
|
|
215
|
+表或超级表中某列的值最后写入的非NULL值,所有字段,如果返回各个列LAST(*),如果结果集中某列全部为NULL值则该列返回的结果也是NULL,如果结果集中所有列全部为NULL则不返回结果。
|
|
216
|
+```
|
|
217
|
+
|
|
218
|
+TOP
|
|
219
|
+```
|
|
220
|
+SELECT TOP(field_name, K) FROM {tb_name | stb_name} [WHERE clause]
|
|
221
|
+
|
|
222
|
+统计表或超级表中某列的值最大k个非null值,不能用在timestamp, binary, ncahr, bool,k的取值范围在[1,100]
|
|
223
|
+```
|
|
224
|
+
|
|
225
|
+BOTTOM
|
|
226
|
+```
|
|
227
|
+SELECT BOTTOM(field_name, K) FROM {tb_name | stb_name} [WHERE clause]
|
|
228
|
+```
|
|
229
|
+
|
|
230
|
+PERCENTILE
|
|
231
|
+```
|
|
232
|
+SELECT PERCENTILE(field_name, P) FROM {tb_name | stb_name} [WHERE clause]
|
|
233
|
+
|
|
234
|
+表中某列值的百分比分位数,返回double, 不能用在timestamp, binary, ncahr, bool,k的范围0和100之间,0时候等同于MIN,100的时候等同于MAX
|
|
235
|
+```
|
|
236
|
+
|
|
237
|
+LAST_ROW
|
|
238
|
+```
|
|
239
|
+SELECT LAST_ROW(field_name) FROM {tb_name | stb_name}
|
|
240
|
+
|
|
241
|
+返回表或超级表的最后一条记录,与last函数不同,last_row不支持时间范围限制,强制返回最后一条记录
|
|
242
|
+```
|
|
243
|
+
|
|
244
|
+DIFF
|
|
245
|
+```
|
|
246
|
+SELECT DIFF(field_name) FROM tb_name [WHERE clause]
|
|
247
|
+
|
|
248
|
+统计表中某列的值与前一行对应值的差,不能应用在timestamp, binary, nchar, bool类型
|
|
249
|
+```
|
|
250
|
+
|
|
251
|
+SPREAD
|
|
252
|
+```
|
|
253
|
+SELECT SPREAD(field_namne) FROM {tb_name | stb_name}[WHERE clause]
|
|
254
|
+
|
|
255
|
+统计超级表或表中某列的最大值和最小值之差,返回double,不能用在binary, nchar, bool类型,可用于TIEMSTAMP字段表示记录的时间覆盖范围
|
|
256
|
+```
|
|
257
|
+
|
|
258
|
+四则运算
|
|
259
|
+```
|
|
260
|
+SELECT field_name [+|-|*|/|%][value | field_name] from {tb_name | stb_name} [WHERE clause]
|
|
261
|
+
|
|
262
|
+统计表或超级表中某列或多列的计算,不能用在timestamp, binary, nchar, bool类型,支持两列或多列之间计算,使用括号表示优先级,Null字段不参与计算,如果参与计算的某行中保包含null,改行的结果是Null
|
|
263
|
+```
|
|
264
|
+
|
|
265
|
+# 举例
|
|
266
|
+
|
|
267
|
+```
|
|
268
|
+CREATE TABLE tb1(ts timestamp, col1 int, col2 float, col3 binary(50))
|
|
269
|
+
|
|
270
|
+SELECT * FROM tb1 WHERE ts >= NOW - 1h
|
|
271
|
+
|
|
272
|
+SELECT * FROM tb1 WHERE ts > '2018-06-01 08:00:00.000' AND ts <= '2018-06-02 08:00:00.000' AND col3 LIKE `%nny` ORDER BY ts DESC
|
|
273
|
+
|
|
274
|
+SELECT (col1 + col2) AS `complex` FROM tb1 WHERE ts > '2018-06-01 08:00:00.000' AND col2 > 1.2 LIMIT 10 OFFSET 5
|
|
275
|
+
|
|
276
|
+SELECT COUNT(*) FROM tb1 WHERE ts >= NOW - 10m AND col2 > 3.14 >> /home/testoutpu.csv
|
|
277
|
+```
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+# 时间维度聚合
|
|
281
|
+
|
|
282
|
+按照时间切割再聚合,比如温度传感器每秒采集一次数据,徐查询每隔10分钟温度的平均值。
|
|
283
|
+
|
|
284
|
+```
|
|
285
|
+SELECT function_list FROM tb_name
|
|
286
|
+ [WHERE where_condition]
|
|
287
|
+ INTERVAL(interval)
|
|
288
|
+ [FILL ({None | VALUE | PREV | NULL | LINEAR})]
|
|
289
|
+
|
|
290
|
+SELECT function_list FROM stb_name
|
|
291
|
+ [WHERE where_condition]
|
|
292
|
+ [GTOUP BY tags]
|
|
293
|
+ [FILL ({VALUE | PREV | NULL | LINEAR})]
|
|
294
|
+```
|
|
295
|
+
|
|
296
|
+- 聚合时间段由INTERVAL指定,最短时间10毫秒,10a
|
|
297
|
+- 仅限于单个输出的函数:count, avg, sum, stddev, leastsquares, percentile, min, max, first, last不能用于多行输出函数比如top, bottom, diff和四则运算
|
|
298
|
+- WHERE语句指定查询的起止时间和过滤条件
|
|
299
|
+- FILL语句指定某一时间数据确实情况下的填充模式。NONE,也是默认的方式,不填充;VALUE,固定值填充;NULL,使用NULL值填充;PREV,使用上一个非NULL值填充数据
|
|
300
|
+- 使用FILL时候,务必指定查询的时间区间,针对每次查询系统可返回不超过1千万条结果
|
|
301
|
+- 在实践维度聚合中,返回的结果中时间序列严格单调递增
|
|
302
|
+- 如果查询对象是超级表,则聚合函数会作用于该超级表下满足值过滤条件的所有表。如果查询中没有group by语句,则返回的结果按照该时间序列严格单调递增。如果查询中使用了group by语句分组,则返回结果中每个group内部按照时间序列严格单调递增。
|
|
303
|
+
|
|
304
|
+```
|
|
305
|
+create table sensor(ts timestamp, degree double, pm25 smallint)
|
|
306
|
+
|
|
307
|
+SLECT AVG(degree), MAX(degree), LEASTSQUARES(degree), PERCENTILE(degree, 50) FROM sensor
|
|
308
|
+ WHERE TS>=now -1d //过去20小时
|
|
309
|
+ INTERVAL(10M) //以10分钟为一个阶段
|
|
310
|
+ FILL(PREV);
|
|
311
|
+```
|
|
312
|
+
|
|
313
|
+# 超级表STable
|
|
314
|
+
|
|
315
|
+对单个采集点单独建表导致表数量增加,如何对这些表进行聚合、统计呢?引入STable。
|
|
316
|
+
|
|
317
|
+> 什么是超级表STable
|
|
318
|
+
|
|
319
|
+- 同类型数据采集点的抽象
|
|
320
|
+- 包含多长数据结构一样的字表
|
|
321
|
+- STable为其子表定义了表结构和一组标签。表结构就是表中记录的数据列及其数据类型。标签名也由STable定义,标签值记录每个子表的静态信息,用于对子表进行分组过滤。
|
|
322
|
+- 子表本质上就是普通的表,由一个时间戳和若干数据列组成
|
|
323
|
+- 子表与普通表的区别在于每个子表从属于一张超级表,并带有一组STable定义的标签值
|
|
324
|
+- 每种类型的采集设备可以定义一个STable。比如定义表的每列的数据类型,比如温度、电压、电流。标签信息属于Meta Data,如采集设别额序列号、型号、位置等是静态的。用户在创建表时指定Stable,还可以指定标签的值,也可以事后增加或修改。
|
|
325
|
+
|
|
326
|
+```
|
|
327
|
+create table thermometer (ts timestamp, degree float) tags (location binary(20), type int)
|
|
328
|
+
|
|
329
|
+create table t1 using thermometer tags ('beijing', 10)
|
|
330
|
+```
|
|
331
|
+
|
|
332
|
+- 可以使用STable创建数量无上限的、具有不同标签的表
|
|
333
|
+- STable就是具有相同数据模型,不同标签的表的集合
|
|
334
|
+- 将标签数据和采集的动态数据完全分离,对标签建立了高性能内存索引结构
|
|
335
|
+- 一个库可以有多个STable, 一个STable有多个子表
|
|
336
|
+
|
|
337
|
+> 超级表管理
|
|
338
|
+
|
|
339
|
+- 创建超级表:`CREATE TABLE <stable_name> (<field_name> TIMESTAMP, field_name1 field_type,...) TAGS (tag_name tag_type)`,TAGS的总长度不能超过512字节,数据类型不能是timestamp和nchar,不能与其它列名想听,不能为预留关键字
|
|
340
|
+- 显示已创建的超级表:`show stables;`
|
|
341
|
+- 删除超级表:`DROP TABLE <stable_name>`,删除超级表的前提要求先删除所有的子表
|
|
342
|
+- 查看属于某个超级表并满足条件的子表:`SELECT TBNAME,[TAG_NAME,…] FROM <stable_name> WHERE <tag_name> <[=|=<|>=|<>] values..> ([AND|OR] …)`
|
|
343
|
+- 查看属于某个超级表并满足查询条件的表,TBNAME为关键字:`SELECT COUNT(TBNAME) FROM <stable_name> WHERE <tag_name> <[=|=<|>=|<>] values..> ([AND|OR] …)`
|
|
344
|
+
|
|
345
|
+> 写数据时自动创建子表
|
|
346
|
+
|
|
347
|
+当定义好了超级表,在写数据的时候并不知道某个设备是否存在,可以采用自动创建子表,需要注意的是超级表是不能创建的。
|
|
348
|
+
|
|
349
|
+```
|
|
350
|
+INSERT INTO <tb_name> USING <stb_name> TAGS (<tag1_value>,...) VALUES (field_value,...)(field_value,...)...
|
|
351
|
+```
|
|
352
|
+
|
|
353
|
+对多个超级表下的子表创建。
|
|
354
|
+
|
|
355
|
+```
|
|
356
|
+INSERT INTO <tb1_name> USING <stb1_name> TAGS (<tag1_value1>, ...) VALUES (<field1_value1>,...)(<field1_value2>,...)...<tb_name2> USING <stb_name2> TAGS(<tag1_value2>,...) VALUES (<field1_value1>,...)
|
|
357
|
+```
|
|
358
|
+
|
|
359
|
+> TAG管理
|
|
360
|
+
|
|
361
|
+- 添加新的标签:`ALTER TABLE <stable_name> ADD TAG <new_tag_name> <TYPE>`,标签总数不能超过6个
|
|
362
|
+- 删除标签:`ALTER TABLE <stable_name> DROP TAG <tag_name>`,第一列标签不能删除,至少保留一个标签,从超级表删除某个标签后,其下的所有子表也会自动删除标签
|
|
363
|
+- 修改标签名:`ALTER TABLE <stable_name> CHANGE TAG <old_tag_name> <new_tag_name>`,其下所有子表的标签名也会改变
|
|
364
|
+- 修改子表的标签值:`ALTER TABLE <table_name> SET TAG <tag_name>=<new_tag_value>`
|
|
365
|
+
|
|
366
|
+> 多表聚合
|
|
367
|
+
|
|
368
|
+通过TAG值进行条件过滤,暂不支持针对binary类型的模糊匹配过滤。
|
|
369
|
+```
|
|
370
|
+SELECT function<field_name>,…
|
|
371
|
+ FROM <stable_name>
|
|
372
|
+ WHERE <tag_name> <[=|<=|>=|<>] values..> ([AND|OR] …)
|
|
373
|
+ INTERVAL (<time range>)
|
|
374
|
+ GROUP BY <tag_name>, <tag_name>…
|
|
375
|
+ ORDER BY <tag_name> <asc|desc>
|
|
376
|
+ SLIMIT <group_limit>
|
|
377
|
+ SOFFSET <group_offset>
|
|
378
|
+ LIMIT <record_limit>
|
|
379
|
+ OFFSET <record_offset>
|
|
380
|
+```
|
|
381
|
+
|
|
382
|
+- 支持的函数:sum, count, avg, first, last, min, max, top, bottom
|
|
383
|
+- 针对全部或部分列的投影操作
|
|
384
|
+- 暂不支持其它类型的聚合计算和四则运算
|
|
385
|
+- 不支持嵌套
|
|
386
|
+- 不使用GROUP BY会对满足筛选条件的子表按时间聚合,按照时间戳单调递增输出
|
|
387
|
+- 使用`ORDER BY _c0 ASC | DESC`对时间戳升序或降序
|
|
388
|
+- 使用GROUP BY,按tags进行分组,组间的排序由ORDER BY指定,每个组内,按时间单调递增
|
|
389
|
+- 使用SLIMIT/SOFFSET指定组间分页。使用LIMIT/OFFSET指定组内分页。
|
|
390
|
+
|
|
391
|
+> 举例
|
|
392
|
+
|
|
393
|
+```
|
|
394
|
+创建超级表:
|
|
395
|
+CREATE TABLE thermometer (ts timestamp, degree double) TAGS(location binary(20), type int)
|
|
396
|
+
|
|
397
|
+每个采集点一张表:
|
|
398
|
+CREATE TABLE term1 USING thermometer TAGS('beijing',1);
|
|
399
|
+CREATE TABLE therm2 USING thermometer TAGS('beijing',2);
|
|
400
|
+CREATE TABLE therm3 USING thermometer TAGS('tianjin',1);
|
|
401
|
+CREATE TABLE therm4 USING thermometer TAGS('shanghai',3);
|
|
402
|
+
|
|
403
|
+写入数据
|
|
404
|
+INSERT INTO therm1 VALUES ('2018-01-01 00:00:00.000',20);
|
|
405
|
+INSERT INTO therm2 VALUES ('2018-01-01 00:00:00.000',21);
|
|
406
|
+INSERT INTO therm3 VALUES ('2018-01-01 00:00:00.000',22);
|
|
407
|
+INSERT INTO therm4 VALUES ('2018-01-01 00:00:00.000',23);
|
|
408
|
+
|
|
409
|
+按标签聚合查询
|
|
410
|
+SELECT COUNT(*),AVG(degree), MAX(degree), MIN(degree)
|
|
411
|
+FROM thermoter
|
|
412
|
+WHERE location='beijing' or location='tianjing'
|
|
413
|
+GROUP BY location, type
|
|
414
|
+
|
|
415
|
+按时间周期聚合查询
|
|
416
|
+SELECT COUNT(*),AVG(degree), MAX(degree), MIN(degree)
|
|
417
|
+FROM thermometer
|
|
418
|
+WHERE name<>'beijing' and ts>now-1d
|
|
419
|
+INTEERVAL(10M)
|
|
420
|
+GROUPBY location,type
|
|
421
|
+```
|
|
422
|
+
|
|
423
|
+# 高级功能
|
|
424
|
+
|
|
425
|
+> 连续查询Continuoous Query
|
|
426
|
+
|
|
427
|
+- 定期自动执行
|
|
428
|
+- 滑动窗口的方式进行计算
|
|
429
|
+- 简化的、时间驱动的流式计算
|
|
430
|
+- 针对库中的表或超级表
|
|
431
|
+- 可以让TDengine推送查询结果,或者将结果写回到TDengine中
|
|
432
|
+- 每次执行的查询是一个时间窗口time window,时间窗口随着时间流动向前滑动
|
|
433
|
+- 定义时间窗口的大小interval,每次前向增量时间forward sliding times
|
|
434
|
+- 使用TAOS SQL定义
|
|
435
|
+- 采用时间驱动的模式
|
|
436
|
+- 催原始采集数据进行采样down sampling
|
|
437
|
+- 不同于其它流式计算实时反馈结果,连续查询只在时间窗口关闭以后才计算反馈结果。比如时间窗口周期是1天,那么反馈结果是在23:59:59秒以后才生成反馈结果
|
|
438
|
+- 反馈的结果有一个时间区间,如果此时有历史记录再写入到这个时间区间,连续查询不会重新执行,不会重新将结果推送给用户,不会更新已存在的计算结果
|
|
439
|
+- 服务端并不缓存客户端的计算状态,如果应用端崩溃,再次拉起的连续查询将只会从最接近的时间窗口开始计算;如果使用写回模式,TDengine可以确保写回的有效性和连续性。
|
|
440
|
+- 是在应用端启动连续查询的
|
|
441
|
+
|
|
442
|
+```
|
|
443
|
+SELECT COUNT(*)
|
|
444
|
+FROM FOO_TABLE
|
|
445
|
+INTERVAL(1M) SLIDING(30S)
|
|
446
|
+每一分钟统计一次,前向滑动的时间是30秒。
|
|
447
|
+
|
|
448
|
+SELECT COUNT(*)
|
|
449
|
+FROM FOO_TABLE
|
|
450
|
+INTERVAL(1M)
|
|
451
|
+每一分钟统计一次,前向滑动的时间是一分钟
|
|
452
|
+
|
|
453
|
+注意:
|
|
454
|
+前向滑动时间不能大于时间窗口的范围,如果大于了,系统将强制设置为时间窗口的范围。
|
|
455
|
+```
|
|
456
|
+
|
|
457
|
+将连续查询的结果写回到数据库中:
|
|
458
|
+```
|
|
459
|
+CREATE TABLE QUERY_RES
|
|
460
|
+ AS
|
|
461
|
+ SELECT COUNT(*)
|
|
462
|
+ FROM FOO_TABLE
|
|
463
|
+ INTERVAL(1M) SLIDING(30S)
|
|
464
|
+```
|
|
465
|
+
|
|
466
|
+默认如果不输入结束时间,连续查询会一直进行下去。还可以指定结束时间:
|
|
467
|
+```
|
|
468
|
+CREATE TABLE QUERY_RES
|
|
469
|
+ AS
|
|
470
|
+ SELECT COUNT(*)
|
|
471
|
+ FROM FOO_TABLE
|
|
472
|
+ WHERE TS > NOW AND TS <= NOW + 1H
|
|
473
|
+ INTERVAL(1M) SLIDING(30S)
|
|
474
|
+```
|
|
475
|
+
|
|
476
|
+查看系统中全部运行的连续查询
|
|
477
|
+```
|
|
478
|
+show streams
|
|
479
|
+```
|
|
480
|
+
|
|
481
|
+杀掉对应的连续查询
|
|
482
|
+```
|
|
483
|
+kill stream
|
|
484
|
+```
|
|
485
|
+
|
|
486
|
+**在写回模式中,如果把写回的表删除,连续查询也会自动停止**。
|
|
487
|
+
|
|
488
|
+> 数据订阅Publisher/Subscriber
|
|
489
|
+
|
|
490
|
+- 每一张表可视作一个标准的消息队列
|
|
491
|
+- 支持轻量级的消息订阅与推送服务
|
|
492
|
+- 使用系统提供的API,用户可以订阅数据库中的某一张表或超级表
|
|
493
|
+- 订阅的逻辑和操作状态的维护均由客户端完成
|
|
494
|
+- 客户端定时轮询服务器是否有新的记录到达,有新的记录到达就会将结果反馈到客户
|
|
495
|
+
|
|
496
|
+启动订阅服务:
|
|
497
|
+```
|
|
498
|
+TAOS_SUB *taos_subscribe(char *host, char *user, char *pass, char *db, char *table, int64_t time, int mseconds)
|
|
499
|
+
|
|
500
|
+--host: 主机ip地址
|
|
501
|
+--user: 数据库登录用户名
|
|
502
|
+--pass: 密码
|
|
503
|
+--db: 数据库名称
|
|
504
|
+--table: 超级表或表的名称
|
|
505
|
+--time: 启动时间,Unix Epoch,单位为毫秒,从1970年1月1日起计算的毫秒数,如果设置为0表示从当前时间开始订阅
|
|
506
|
+--mseconds: 查询数据库更新的时间间隔,单位为毫秒,一般设置为1000毫秒。返回值为指向TDengine_SUB结构的指针,如果返回为空,表示失败
|
|
507
|
+```
|
|
508
|
+
|
|
509
|
+获取订阅结果。用户应用程序置于一个无限循环语句,如果数据库表有新纪录到达,该API将放回最新的记录,如果没有新的记录该API将阻塞,如果返回值为空说明系统出错。
|
|
510
|
+```
|
|
511
|
+TASOS_ROW taos_consume(TAOS_SUB *tsub)
|
|
512
|
+
|
|
513
|
+--tsub: taos_subscribe的结构体指针
|
|
514
|
+```
|
|
515
|
+
|
|
516
|
+取消订阅。应用程序退出时,务必调用此函数以避免资源泄露。
|
|
517
|
+```
|
|
518
|
+void taos_unsubscribe(TAOS_SUB *tsub)
|
|
519
|
+```
|
|
520
|
+
|
|
521
|
+获取返回的一行记录中数据包含多少列。
|
|
522
|
+```
|
|
523
|
+int taos_num_subfields(TAOS_SUB *tsub)
|
|
524
|
+```
|
|
525
|
+
|
|
526
|
+获取每列数据的属性(数据类型、名字、长度)。
|
|
527
|
+```
|
|
528
|
+TAOS_FIELD *taos_fetch_subfields(TASO_SUB *tsub)
|
|
529
|
+```
|
|
530
|
+
|
|
531
|
+> 缓存Cache
|
|
532
|
+
|
|
533
|
+- 时间驱动缓存策略First-In-First-Out, FIFO
|
|
534
|
+- 写驱动的缓存管理机制,和读驱动的缓存模式Least-Recent-Use, LRU不一样
|
|
535
|
+- 最近写入的数据保存在缓存中,当缓存达到临界值时,将最早的数据批量写入磁盘
|
|
536
|
+- 获取数据实际就是从缓存中获取,并且是毫秒级的
|
|
537
|
+- 可以将TDengine当作缓存来使用
|
|
538
|
+- TDengine重启以后系统的缓存将被清空,之前的缓存数据均会被写入磁盘,缓存数据将不会像专门的key-value缓存系统那样再将之前的缓存数据重新加载到缓存中
|
|
539
|
+- TDengjine会分配固定大小的内存空间作为缓存空间
|
|
540
|
+- 每个vnode都有其独立的缓存池,不同的vnode不共享缓存池
|
|
541
|
+- 每个vnode里面的表共享该vnode的缓存池
|
|
542
|
+- 缓存的大小由缓存块的大小和数量相关,cacheBlockSize定义每个缓存块的大小,cacheNumOfBlocks定义每个vnode中可以缓存块的数量,TDengine要求每张表至少有2个缓存块可供使用,因此cacheNmOfBlocks的数值不应该小于vnode结点中所包含表数量的两倍
|
|
543
|
+
|
|
544
|
+获取一张表或超级表的最后一条记录
|
|
545
|
+```
|
|
546
|
+select last_row(degree) from thermometer where location='beijing'
|
|
547
|
+```
|
|
548
|
+
|
|
549
|
+# RESTful Connection
|
|
550
|
+
|
|
551
|
+通过HTTP方式进行。
|
|
552
|
+
|
|
553
|
+```
|
|
554
|
+http://<ip>:<PORT>/rest/sql
|
|
555
|
+http://192.168.0.1:6020/rest/sql
|
|
556
|
+
|
|
557
|
+-- IP: 集群中的任一台主机
|
|
558
|
+-- PORT:配置文件中的httpPort,默认值是6020
|
|
559
|
+-- Headler里带身份认证信息,单机版仅致辞Basic认证机制
|
|
560
|
+-- BODY里是一个完整的SQL语句,SQL语句中的数据表应该提供数据库前缀,否则系统会返回错误
|
|
561
|
+```
|
|
562
|
+
|
|
563
|
+请求:
|
|
564
|
+```
|
|
565
|
+curl -H 'Authorization:Basic <TOKEN>' -d '<SQL>' <ip>:<PORT>/rest/sql
|
|
566
|
+
|
|
567
|
+或
|
|
568
|
+
|
|
569
|
+curl -u username:password -d '<SQL>' <ip>:<PORT>/
|
|
570
|
+
|
|
571
|
+TOKEN为{username}:{password}经过Base64编码之后的字符串
|
|
572
|
+```
|
|
573
|
+
|
|
574
|
+返回格式:
|
|
575
|
+```
|
|
576
|
+{
|
|
577
|
+ "status": "succ",
|
|
578
|
+ "head": ["column1","column2", …],
|
|
579
|
+ "data": [
|
|
580
|
+ ["2017-12-12 23:44:25.730", 1],
|
|
581
|
+ ["2017-12-12 22:44:25.728", 4]
|
|
582
|
+ ],
|
|
583
|
+ "rows": 2
|
|
584
|
+}
|
|
585
|
+```
|
|
586
|
+
|
|
587
|
+# 系统管理
|
|
588
|
+
|
|
589
|
+> 练手
|
|
590
|
+
|
|
591
|
+根用户
|
|
592
|
+```
|
|
593
|
+-- 进入根用户: sudo su
|
|
594
|
+-- 退出根用户: exit
|
|
595
|
+```
|
|
596
|
+
|
|
597
|
+根目录
|
|
598
|
+```
|
|
599
|
+--来到根目录: cd /
|
|
600
|
+--退出控制台:exit
|
|
601
|
+```
|
|
602
|
+
|
|
603
|
+vi练习
|
|
604
|
+```
|
|
605
|
+--列出目录:ls
|
|
606
|
+--进入test目录: cd test
|
|
607
|
+--vi打开文件:vi hello.txt
|
|
608
|
+--决定光标的位置:
|
|
609
|
+ 方向:h,j,k,l
|
|
610
|
+ 行首:b
|
|
611
|
+ 行尾:w
|
|
612
|
+ 下面一行:o
|
|
613
|
+ 上面一行:O
|
|
614
|
+ 段首:{
|
|
615
|
+ 段尾:}
|
|
616
|
+--决定插入的位置:
|
|
617
|
+ 选择光标前后插入:i,a
|
|
618
|
+ 选择光标所在行行首行尾插入:i,A
|
|
619
|
+--退出编辑:esc
|
|
620
|
+--保存并退出::wq!
|
|
621
|
+--不保存并退出::q!
|
|
622
|
+
|
|
623
|
+```
|
|
624
|
+
|
|
625
|
+> 文件目录结构
|
|
626
|
+
|
|
627
|
+/etc/taos/taos.cfg 配置文件
|
|
628
|
+```
|
|
629
|
+-- cd /
|
|
630
|
+-- cd etc/taos
|
|
631
|
+```
|
|
632
|
+
|
|
633
|
+/usr/local/taos/driver 动态链接库目录
|
|
634
|
+```
|
|
635
|
+-- cd /
|
|
636
|
+-- cd usr/local/taos/driver
|
|
637
|
+```
|
|
638
|
+
|
|
639
|
+/var/lib/taos 数据文件默认目录
|
|
640
|
+```
|
|
641
|
+--cd /
|
|
642
|
+--cd var/lib/taos
|
|
643
|
+```
|
|
644
|
+
|
|
645
|
+/var/log/taos 日志文件目录
|
|
646
|
+```
|
|
647
|
+--cd /
|
|
648
|
+--cd var/log/taos
|
|
649
|
+```
|
|
650
|
+
|
|
651
|
+/usr/local/taos/bin 可执行文件目录
|
|
652
|
+```
|
|
653
|
+--cd /
|
|
654
|
+--cd usr/local/taos/bin
|
|
655
|
+
|
|
656
|
+taos:shell可执行文件
|
|
657
|
+taosd:服务端可执行文件
|
|
658
|
+taosdump:数据导出工具
|
|
659
|
+rmtaos:卸载
|
|
660
|
+```
|
|
661
|
+
|
|
662
|
+> 服务端配置
|
|
663
|
+
|
|
664
|
+在/etc/taos/taos.cfg配置,配置完成后需要重启taosd服务才能生效。
|
|
665
|
+
|
|
666
|
+指定配置文件的目录:
|
|
667
|
+```
|
|
668
|
+taosd -c /home/user
|
|
669
|
+```
|
|
670
|
+
|
|
671
|
+查看taos.cfg文件:
|
|
672
|
+```
|
|
673
|
+-- cd /
|
|
674
|
+-- cd etc/taos
|
|
675
|
+-- ls
|
|
676
|
+-- cat taos.cfg
|
|
677
|
+```
|
|
678
|
+
|
|
679
|
+配置详解:
|
|
680
|
+
|
|
681
|
+- internalIp:对外提供服务的ip地址
|
|
682
|
+- mgmtShellPort:管理结点与客户端通信使用的TCP/UDP端口号,默认6030,6030-6034端口被UDP占用,6030端口被TCP占用
|
|
683
|
+- vnodeShellPort:数据节点与客户端通信使用的TCP/UDP端口号,默认6035,6035-6039端口被UDP占用,6035端口被UDP占用
|
|
684
|
+- httpPort:数据结点对外提供RESTful服务使用的TCP端口号,默认6020
|
|
685
|
+- dataDir:数据库文件目录,默认/var/lib/taos
|
|
686
|
+- maxUsers:用户最大数量
|
|
687
|
+- maxDbs:数据库最大数量
|
|
688
|
+- maxTables:数据表最大数量
|
|
689
|
+- enableMonitor:系统检测,0关闭,1打开
|
|
690
|
+- logDir:日志文件目录,默认/var/log/taos
|
|
691
|
+- numOfLogLines:日志文件的最大行数
|
|
692
|
+- debugFlag: 131仅错误和报警信息,135:所有
|
|
693
|
+- days:一个数据文件覆盖的时间长度,单位是天
|
|
694
|
+- keep:数据库中保留数据的天数
|
|
695
|
+- rows:文件块中的记录条数
|
|
696
|
+- comp:文件压缩标志,0关闭,1一阶段压缩,2阶段压缩
|
|
697
|
+- ctime:数据从写入内存到写入硬盘的最长时间间隔,单位秒
|
|
698
|
+- clog:数据提交日志标志,0关闭,1打开
|
|
699
|
+- tables:每个vnode允许创建表的最大数目
|
|
700
|
+- cache:内存块的字节数大小
|
|
701
|
+- tblocks:每张表最大的内存块数
|
|
702
|
+- ablocks:每张表平均的内存块数
|
|
703
|
+- precision:时间戳,ms表示毫秒,us表示微秒
|
|
704
|
+
|
|
705
|
+创建数据库:
|
|
706
|
+- 将具有相同特征的表放在一个库里
|
|
707
|
+- 一个应用有多个库
|
|
708
|
+- 为每个库配置不同存储参数
|
|
709
|
+- 客户端通过sql创建的数据库配置参数会覆盖系统配置参数
|
|
710
|
+```
|
|
711
|
+create database demo days 10 cache 16000 ablocks 4
|
|
712
|
+```
|
|
713
|
+
|
|
714
|
+> 客户端配置
|
|
715
|
+
|
|
716
|
+在/etc/taos/taos.cfg配置,与taosd应用程序共享配置文件。启动taos时,也可以从命令行指定IP地址、端口号、用户名和密码,否则从taos.cfg读取。
|
|
717
|
+
|
|
718
|
+为客户端程序taos指定配置文件目录:
|
|
719
|
+```
|
|
720
|
+taos -c /home/cfg
|
|
721
|
+```
|
|
722
|
+
|
|
723
|
+参数详解:
|
|
724
|
+
|
|
725
|
+- masterIP:客户端默认发起请求的服务器IP地址
|
|
726
|
+- charset:指明客户端所使用的字符集,默认UTF-8,TDengine存储nchar类型数据时使用unicode存储,因此客户端需要告知服务自己所使用的字符集,即客户端所在系统的字符集
|
|
727
|
+- locale:设置系统语言环境,linux上客户端与服务端共享
|
|
728
|
+- defautlUser:默认登录用户,默认值root
|
|
729
|
+- defaultPass:默认登录密码,默认值taosdata
|
|
730
|
+
|
|
731
|
+> 用户管理
|
|
732
|
+
|
|
733
|
+- 创建用户:`CREATE USER user_name PASS 'password'`
|
|
734
|
+- 删除用户:`DROP USER user_name`,root用户使用
|
|
735
|
+- 修改用户密码:`ALTER USER user_name PASS 'password'`
|
|
736
|
+- 显示所有用户:`SHOW USERS`
|
|
737
|
+
|
|
738
|
+> 数据导入
|
|
739
|
+
|
|
740
|
+- 通过脚本文件导入:在文件中写好sql语句,每行一条,#表示注释
|
|
741
|
+- 从csv文件导入,每个csv文件属于一张表且格式和需要导入表的结构相同
|
|
742
|
+
|
|
743
|
+```
|
|
744
|
+insert into tb1 file a.csv b.csv tb2 c.csv ...
|
|
745
|
+import into tb1 file a.csv b.csv tb2 c.csv ...
|
|
746
|
+```
|
|
747
|
+
|
|
748
|
+> 数据导出
|
|
749
|
+
|
|
750
|
+- 按表导出csv文件,如果用户需要到处一个表或者一个STable表中的数据,可在shell中运行
|
|
751
|
+```
|
|
752
|
+select * from <tb_name> >> a.csv
|
|
753
|
+```
|
|
754
|
+
|
|
755
|
+- 用taosdump导出数据,通过`taosdump --help`获取更详细的用法说明
|
|
756
|
+```
|
|
757
|
+--导出数据库中一张或多张表:taosdump [OPTION...] dbname tbname ...
|
|
758
|
+--导出一个或多个数据库:taosdump [OPTION...] --database dbname...
|
|
759
|
+--导出所有数据库(不含监控数据库): taosdump [OPTION...] --all-databases
|
|
760
|
+```
|
|
761
|
+
|
|
762
|
+> 系统连接、任务查询关系
|
|
763
|
+
|
|
764
|
+正在进行的查询、流式计算,查看连接:
|
|
765
|
+```
|
|
766
|
+SHOW CONNECTIONS
|
|
767
|
+```
|
|
768
|
+
|
|
769
|
+强制关闭数据库连接:
|
|
770
|
+```
|
|
771
|
+KILL CONNECTION <connection-id>
|
|
772
|
+```
|
|
773
|
+
|
|
774
|
+显示数据查询:
|
|
775
|
+```
|
|
776
|
+SHOW QUERIES
|
|
777
|
+```
|
|
778
|
+
|
|
779
|
+强制关闭数据查询:
|
|
780
|
+```
|
|
781
|
+KILL QUERY <query-id>
|
|
782
|
+```
|
|
783
|
+
|
|
784
|
+显示流式计算:
|
|
785
|
+```
|
|
786
|
+KILL STREAM <stream-id>
|
|
787
|
+```
|
|
788
|
+
|
|
789
|
+> 系统监控
|
|
790
|
+
|
|
791
|
+- TDengine启动后会自动创建一个监测数据库SYS,并自动将服务器的CPU,内存,硬盘空间,带宽,请求数,磁盘读写速度,慢查询等信息定时写入该数据库
|
|
792
|
+- TDengine还将重要的系统操作,比如登录、创建、删除数据库等日志及各种错误报警信息记录下来存放在SYS库里
|
|
793
|
+- 通过CLI或者WEB图形界面查看监测信息
|
|
794
|
+- 监测信息的采集默认是打开的,单可以通过修改配置文件中的enableMonitor来修改
|
|
795
|
+
|
|
796
|
+# 连接数据库实战
|
|
797
|
+
|
|
798
|
+- 数据库ip: 192.168.8.129
|