浏览代码

完成局域网使用TDengine

master
qdjjx 5 年前
父节点
当前提交
16bbd68c58
共有 1 个文件被更改,包括 312 次插入0 次删除
  1. 312
    0
      实践/数据库/TDengine在项目中的使用.md

+ 312
- 0
实践/数据库/TDengine在项目中的使用.md 查看文件

@@ -0,0 +1,312 @@
1
+# TDengine时序数据库安装
2
+
3
+云上Ubuntu服务器前期准备
4
+```
5
+apt update 
6
+sudo apt update
7
+apt-get update
8
+sudo apt-get update
9
+```
10
+
11
+安装可视化桌面
12
+```
13
+apg-get install ubuntu-desktop
14
+```
15
+
16
+Windows远程桌面连接Ubuntu.Ubuntu支持xrdp和vnc两种远程桌面协议。vnc是默认的基于RFB协议的远程桌面程序,但不够友好。
17
+```
18
+sudo apt-get install xrdp
19
+sudo apt-get install vnc4server tightvnserver
20
+sudo apt-get install xubuntu-desktop
21
+echo "xfce4-session" >~/.xsession
22
+sudo service xrdp restart
23
+通过windows远程桌面连接,连接成功,输入用户名和密码,终于看到ubuntu的界面!并且可以浏览网站!
24
+```
25
+
26
+安装TDengine
27
+```
28
+确认是否有systemd命令:whick systemd
29
+登录网址:https://www.taosdata.com/cn/getting-started/ 
30
+下载:下载deb包,输入邮件地址
31
+安装位置:/root/Downloads/
32
+打开命令行终端:alt+f2, gnome-terminal
33
+查看当前位置:pwd
34
+来到所在目录:cd Downloads
35
+安装TDengine: sudo dpkg -i tdengine-1.6.2.2.deb
36
+安装成功提示:
37
+    TDengine is installed successfully!
38
+    To configure TDengine: edt /etc/taos/taos.cfg
39
+    To start TDengine: sudo systemctrl start taosd
40
+    To access TDengine: use taos in shell
41
+回到根目录: cd ~
42
+来到TDengine的配置文件:cd /etc/taos/
43
+检查taosd状态:systemctl status taosd
44
+启动服务:systemctl start taosd
45
+再次查看服务状态:systemctl status taosd
46
+```
47
+
48
+在linux上小试牛刀
49
+```
50
+taos
51
+创建数据库:create database db;
52
+查看所有数据库:show databases;
53
+使用数据库:use db;
54
+创建表:create table t(ts timestamp, cdata int);
55
+插入数据:
56
+    insert into t values ('2019-07-15 00:00:00',10);
57
+    insert into t values ('2019-07-15 01:00:00', 20);
58
+
59
+查询:select * from t;
60
+```
61
+
62
+Windows连接Ubuntu上的TDengine
63
+```
64
+初次连接失败: ./taos.exe -h ip
65
+查看是否ping通:ping ip
66
+安装最新的客户端版本
67
+```
68
+
69
+还是不行。熟悉vi的使用,修改配置文件。
70
+```
71
+三种命令模式:
72
+    命令模式切换到插入模式:i
73
+    从插入模式切回到命令模式:esc
74
+    在命令模式下,按 :wq 表示保存并退出, 按 :q! 表示不保存并退出
75
+三种插入模式:
76
+    i 从光标当前位置开始
77
+    a 从光标所在位置的下一个位置开始
78
+    o 从光标的行首插入一行
79
+命令模式下光标的移动:
80
+    h 向左
81
+    l 向右
82
+    k 向上
83
+    j 向下
84
+    数字0 本行最开头
85
+    G 最后一行最开头
86
+    $ 本行行尾
87
+    ^ 所在行行首
88
+    w 下一个字母的开头
89
+    e 下一个字母的结尾
90
+    b 上一个字母的开头
91
+命令模式下删除文字
92
+    x 每按一次删除光标位置后面的一个字符
93
+    6x 删除光标位置后面的6个字符
94
+    X 每按一次删除光标位置前面的一个字符
95
+    20X 删除光标位置前面的20个字符
96
+    dd 删除光标所在行
97
+```
98
+
99
+修改taos.cfg配置文件
100
+```
101
+- 确认配置:sudo vi /etc/taos/taos.cfg  internalIP:是ifconfig中的地址
102
+- 确认开启服务:systemctl stop taosd systemctl start taosd systemctl status taosd
103
+- 确认服务器防火墙没在起作用:sudo ufw status
104
+- 确认服务器开放6020-6040端口,并且是TCP和UDP都要打开(安全组设置tcp和udp都要打开,小于64KB的包默认是udp发送)
105
+- 确认客户端命令正确:./taos.exe -h ip
106
+- ubuntu重启:reboot
107
+```
108
+
109
+# 本地环境搭建
110
+
111
+- 本地服务器:192.168.8.131 teche123
112
+- 确认模块ip地址:187ED5314E0C 192.168.9.134
113
+- 登录模块:192.168.9.134:82 root abc123 
114
+- 修改服务器指向:192.168.8.131:8080/ebx-bishop/data/carry
115
+- 确认服务打开:MysqlServer, redis-server
116
+- 启动网站:dot.net exe TaiHe.Electricity.Web.dll
117
+- 打开网站:192.168.8.131:8080  TecheFwd2018(泰和网站密码DrrnFwd2018,泰和服务器密码TecheFwd123) 
118
+- 测试可视化界面是否可以操作
119
+
120
+# SDK使用原理
121
+
122
+> Startup.cs中的设置
123
+
124
+包括参数、数据库、普通表和超级表配置、帮助类、模拟数据的背景现场。
125
+
126
+```
127
+ //参数配置
128
+            services.Configure<TConfiguration>(Configuration.GetSection("TDegnine"));//在appsetting.json中配置TDengine结点
129
+
130
+            //数据库配置
131
+            services.AddTransient<ITDatabase, TDatabase>();//数据库接口和实现
132
+
133
+            //普通表和超级表配置
134
+            services.AddTransient<ITSuperTable<SuperReal>, TSuperTable<SuperReal>>();//超级表,实时数据
135
+            services.AddTransient<ITSuperTable<SuperRealTj>, TSuperTable<SuperRealTj>>();//超级表,实时数据统计
136
+
137
+            services.AddTransient<ITSuperTable<SuperWarning>, TSuperTable<SuperWarning>>();//超级表,报警
138
+            services.AddTransient<ITSuperTable<SuperWarningTj>, TSuperTable<SuperWarningTj>>();//超级表,报警统计
139
+
140
+            services.AddTransient<ITSuperTable<SuperDl>, TSuperTable<SuperDl>>();//超级表,电量
141
+
142
+            services.AddTransient<ITSuperTable<SuperKg>, TSuperTable<SuperKg>>();//超级表,开关统计
143
+            services.AddTransient<ITSuperTable<SuperKgTj>, TSuperTable<SuperKgTj>>();//超级表,开关统计的统计
144
+
145
+            //子表配置
146
+            services.AddTransient<ITChildTable<Real>, TChildTable<Real>>();//子表,实时数据
147
+            services.AddTransient<ITChildTable<RealTj>, TChildTable<RealTj>>();//子表,实时数据统计
148
+            services.AddTransient<ITChildTable<Warning>, TChildTable<Warning>>();//子表,报警
149
+            services.AddTransient<ITChildTable<WarningTj>, TChildTable<WarningTj>>();//子表,报警统计
150
+            services.AddTransient<ITChildTable<Dl>, TChildTable<Dl>>();//子表,电量
151
+            services.AddTransient<ITChildTable<Kg>, TChildTable<Kg>>();//子表,开关统计
152
+            services.AddTransient<ITChildTable<KgTj>, TChildTable<KgTj>>();//子表,开关统计统计
153
+
154
+            //实时计算流返回结果保存到普通表
155
+            //services.AddTransient<ITStream<RealTj>, TStream<RealTj>>(); //实时数据流计算结果
156
+            //services.AddTransient<ITStream<WarningTj>, TStream<WarningTj>>();//报警数据流计算结果
157
+            //services.AddTransient<ITStream<KgTj>, TStream<KgTj>>();//开关统计流计算结果
158
+
159
+            //帮助类配置
160
+            services.AddSingleton(typeof(CommonHelper));//共用帮助类
161
+            services.AddTransient(typeof(MacHelper));//获取模块的帮助类
162
+
163
+            services.AddSingleton(typeof(RealHelper));//帮助类,实时数据
164
+            services.AddSingleton(typeof(RealTjHelper));//帮助类,实时数据统计
165
+
166
+            services.AddTransient(typeof(WarningHelper));//帮助类,报警数据
167
+            services.AddTransient(typeof(WarningTjHelper));//帮助类,报警数据统计
168
+
169
+            services.AddTransient(typeof(DlHelper));//帮助类,电量数据
170
+
171
+            services.AddTransient(typeof(KgHelper));//帮助类,开关统计
172
+            services.AddTransient(typeof(KgTjHelper));//帮助类,开关统计
173
+
174
+
175
+            //后台背景线程
176
+            //services.AddSingleton<IHostedService, RealBackgroundService>();//模拟实时数据上传
177
+            //services.AddSingleton<IHostedService, WarningBackgroundService>();//模拟报警数据上传
178
+            //电量数据不能随机
179
+            services.AddSingleton<IHostedService, KgBackgroundService>();//模拟每次开或关操作记录上传
180
+
181
+            //统计实时数据、报警数据、开关数据,按分钟
182
+            services.AddSingleton<IHostedService, TongJiByMinuteBackgroundService>();
183
+```
184
+
185
+> appsettings.json中的配置
186
+
187
+```
188
+  "TDegnine": {
189
+    "DataSource": "http://192.168.8.110:6020/rest/sql",
190
+    "Username": "root",
191
+    "Password": "taosdata",
192
+    "Database": "liqun_nuode_1_1",
193
+    "PlanInterval": 5000
194
+  }
195
+```
196
+
197
+> 生成SDK类库
198
+
199
+类库的名称是:`TDengineTest.DD.dll`
200
+
201
+# 实际项目使用
202
+
203
+- 引入`TDengineTest.DD.dll`并生成
204
+- 在postman中测试TDengine接口是否可用
205
+
206
+```
207
+POST http://47.102.145.164:6020/rest/sql
208
+
209
+Headers
210
+    Authorization   Basic cm9vdDp0YW9zZGF0YQ==
211
+Body
212
+    show databases;
213
+```
214
+
215
+- appsettings.json配置
216
+- Startup.cs配置
217
+- 出现报错:System.Runtime程序集版本高
218
+
219
+修改TDengineTest.DD中如下,因为局域网版本是.net core 2.0版本
220
+```
221
+  <PropertyGroup>
222
+    <TargetFramework>netcoreapp2.0</TargetFramework>
223
+  </PropertyGroup>
224
+```
225
+
226
+- 根据appSettings.json中的配置,创建`dingding_zhanting_1_1`数据库。
227
+
228
+```
229
+create database dingding_zhanting_1_1;
230
+show databases;
231
+```
232
+
233
+- 创建超级表控制器`SuperTableController`
234
+
235
+```
236
+Microsoft.Extensions.Options版本高了,在类库中改成2.0的
237
+```
238
+
239
+- 创建子表控制器`ChildTableController`
240
+- 打开超级表列表页
241
+
242
+```
243
+报错,提示没有Flurl
244
+    <PackageReference Include="Flurl" Version="2.8.2" />
245
+    <PackageReference Include="Flurl.Http" Version="2.4.2" />
246
+
247
+Could not load file or assembly 'Flurl.Http, Version=2.4.2.0, Culture=neutral, PublicKeyToken=null
248
+    重新生成,拷贝所有相关程序集到服务器
249
+```
250
+- 创建子表控制器`ChildTableController`
251
+
252
+- 尝试计划任务
253
+
254
+```
255
+
256
+//容器配置
257
+services.AddScheduler(); //计划 
258
+services.AddTransient<RealDataToTDengine>();//IInvocable 
259
+
260
+//管道配置
261
+provider.UseScheduler(s =>
262
+{
263
+    //使用IInvocable 上传实时数据
264
+    s.Schedule<RealDataToTDengine>()
265
+        .EveryThirtySeconds();
266
+})
267
+    //.LogScheduledTaskProgress(Services.GetService<ILogger<Coravel.Scheduling.Schedule.Interfaces.IScheduler>>())
268
+    .OnError(exception => {
269
+        Console.WriteLine(exception.Message);
270
+});
271
+
272
+//计划任务
273
+public class RealDataToTDengine : IInvocable{}
274
+
275
+//报错
276
+the located assembly's manifest definition doesn't match the assembly reference
277
+--重新生成发布解决
278
+
279
+//计划任务无法打印实体记录
280
+--改成字符串
281
+```
282
+
283
+- 上传实时数据
284
+
285
+```
286
+//报错
287
+Microsoft.Extensions.Logging.Abstraction Version=2.2.0
288
+--从NuGet下载
289
+```
290
+
291
+- 检查上传的实时数据
292
+
293
+```
294
+./taos.exe -h 
295
+use database
296
+select * from real_187ed5314e0c;
297
+```
298
+
299
+- 报警数据上传
300
+
301
+```
302
+原理:
303
+
304
+-- 局域网breaker→kaiguan→WarningPolicy→breaker.Value.EnableNetCtrl。
305
+-- 在时序数据库中每种报警类型都有两条报警记录,一条开始,一条结束成对出现
306
+-- 当第一次出现报警,局域网创建一条,时序数据库也创建一条开始记录
307
+-- 当第二次出现报警,局域网不再创建,更新报警记录,时序数据库不动作
308
+-- 当某个开关没有报警,局域网闭环,时序数据库创建一条结束记录
309
+-- 放在本地的逻辑中实现
310
+```
311
+
312
+- 电量数据上传:放在`DataServer`中

正在加载...
取消
保存