IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 物联网设备数据流转之搭建环境:开源高性能分布式支持SQL的时序数据库TDengine -> 正文阅读

[大数据]物联网设备数据流转之搭建环境:开源高性能分布式支持SQL的时序数据库TDengine

背景

我们的项目涉及物联网相关业务,由于一开始的年少无知,传感器数据采用了 MySQL 进行存储,经过近两年的数据累积,目前几个核心表,单表数据已过亿,虽然通过索引优化、 SQL 优化以及读写分离等措施,勉强满足基本的查询,能在秒级给出数据;但是一方面当前 MySQL 数据表索引的大小甚至超过了数据大小,这样下去肯定不行;另一方面来自于前端感知设备的数据量还在持续增加,当面对用户多维度的统计需求,在实现上、效率上总是那么不尽如人意。。

大概是2021年的6月份,一次偶然的机会,我在一个技术交流群中了解到涛思数据。后来花了三五天,把 TDengine 官网的文档过了一遍,并通过实际代码体验了一番,大大小小总结了15篇文章,当前的专栏偏项目实战,不涉及 TDengine 各项功能的具体说明,如果你对 TDengine 的基本使用感兴趣,可以先看下那15篇文章快速上手。

下载安装启动

  • 下载安装
# 下载
[root@iot1 local]# wget https://www.taosdata.com/assets-download/TDengine-server-2.4.0.16-Linux-x64.rpm

# 安装
[root@iot1 local]# rpm -ivh TDengine-server-2.4.0.16-Linux-x64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:tdengine-2.4.0.16-3              ################################# [100%]
Start to install TDengine...

System hostname is: iot1

Enter FQDN:port (like h1.taosdata.com:6030) of an existing TDengine cluster node to join
OR leave it blank to build one:

Enter your email address for priority support or enter empty to skip: 
Created symlink from /etc/systemd/system/multi-user.target.wants/taosd.service to /etc/systemd/system/taosd.service.

To configure TDengine : edit /etc/taos/taos.cfg
To start TDengine     : sudo systemctl start taosd
To access TDengine    : taos -h iot1 to login into TDengine server

TDengine is installed successfully!
[root@iot1 local]# systemctl status taosd
● taosd.service - TDengine server service
   Loaded: loaded (/etc/systemd/system/taosd.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
  • 启动
[root@iot1 local]# systemctl start taosd
[root@iot1 local]# systemctl status taosd
● taosd.service - TDengine server service
   Loaded: loaded (/etc/systemd/system/taosd.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2022-04-10 22:58:19 EDT; 7s ago
  Process: 80163 ExecStartPre=/usr/local/taos/bin/startPre.sh (code=exited, status=0/SUCCESS)
 Main PID: 80169 (taosd)
   CGroup: /system.slice/taosd.service
           └─80169 /usr/bin/taosd

410 22:58:19 iot1 systemd[1]: Starting TDengine server service...
410 22:58:19 iot1 systemd[1]: Started TDengine server service.
410 22:58:19 iot1 TDengine:[80169]: Starting TDengine service...
410 22:58:19 iot1 TDengine:[80169]: Started TDengine service successfully.

Note: TDengine 使用 FQDN 来访问,所以要配置下 hostname ,命令: vi /etc/hosts , 我这里的配置是:

192.168.44.138 iot1

入门体验

Linux 版的 TDengine 在安装完后就自带了客户端,在本机命令行键入: taos ,进入交互式界面。

[root@iot1 local]# taos

Welcome to the TDengine shell from Linux, Client Version:2.4.0.16
Copyright (c) 2020 by TAOS Data, Inc. All rights reserved.

taos> show databases;
              name              |      created_time       |   ntables   |   vgroups   | replica | quorum |  days  |           keep           |  cache(MB)  |   blocks    |   minrows   |   maxrows   | wallevel |    fsync    | comp | cachelast | precision | update |   status   |
===========================================================================================================
 log                            | 2022-04-10 22:58:20.969 |          11 |           1 |       1 |      1 |     10 | 30                       |           1 |           3 |         100 |        4096 |        1 |        3000 |    2 |         0 | us        |      0 | ready      |
Query OK, 1 row(s) in set (0.001580s)

taos> create database db;
Query OK, 0 of 0 row(s) in database (0.001529s)

taos> use db;
Database changed.

taos> create table t (ts timestamp, speed int);
Query OK, 0 of 0 row(s) in database (0.005688s)

taos> show tables;
           table_name           |      created_time       | columns |          stable_name           |          uid          |     tid     |    vgId     |
==========================================================================================================================================================
 t                              | 2022-04-10 23:01:55.656 |       2 |                                |       844424946917281 |           1 |           3 |
Query OK, 1 row(s) in set (0.001593s)

taos> describe t;
             Field              |         Type         |   Length    |   Note   |
=================================================================================
 ts                             | TIMESTAMP            |           8 |          |
 speed                          | INT                  |           4 |          |
Query OK, 2 row(s) in set (0.000545s)

taos> insert into t values ('2019-07-15 00:00:00', 10);
Query OK, 1 of 1 row(s) in database (0.000677s)

taos> insert into t values (now, 100);
Query OK, 1 of 1 row(s) in database (0.000615s)

taos> select count(*) from t;
       count(*)        |
========================
                     2 |
Query OK, 1 row(s) in set (0.001231s)

taos> select * from t;
           ts            |    speed    |
========================================
 2019-07-15 00:00:00.000 |          10 |
 2022-04-10 23:02:24.150 |         100 |
Query OK, 2 row(s) in set (0.001117s)

taos> select * from db.t;
           ts            |    speed    |
========================================
 2019-07-15 00:00:00.000 |          10 |
 2022-04-10 23:02:24.150 |         100 |
Query OK, 2 row(s) in set (0.001084s)

taos> select * from t limit 1;
           ts            |    speed    |
========================================
 2019-07-15 00:00:00.000 |          10 |
Query OK, 1 row(s) in set (0.001145s)

taos> select * from t order by ts desc;
           ts            |    speed    |
========================================
 2022-04-10 23:02:24.150 |         100 |
 2019-07-15 00:00:00.000 |          10 |
Query OK, 2 row(s) in set (0.001989s)

taos> drop table t;
Query OK, 0 of 0 row(s) in database (0.002666s)

taos> show tables;
Query OK, 0 row(s) in set (0.001786s)

taos> drop database db;
Query OK, 0 of 0 row(s) in database (0.003368s)

taos> show databases;
              name              |      created_time       |   ntables   |   vgroups   | replica | quorum |  days  |           keep           |  cache(MB)  |   blocks    |   minrows   |   maxrows   | wallevel |    fsync    | comp | cachelast | precision | update |   status   |
===========================================================================================================
 log                            | 2022-04-10 22:58:20.969 |          12 |           1 |       1 |      1 |     10 | 30                       |           1 |           3 |         100 |        4096 |        1 |        3000 |    2 |         0 | us        |      0 | ready      |
Query OK, 1 row(s) in set (0.001084s)

taos> exit
[root@iot1 local]# 

Note:

  1. 若通过其他主机的客户端访问TDengine,则需要指定主机名:taos -h ip/hostname
  2. 我们注意到在通过taos连接时,并没有指定用户名与密码,其实,TDengine在用户未指定认证信息时,默认为root, taosdata

参考官方文档,常用的几个命令行参数:

-c, --config-dir: 指定配置文件目录,默认为/etc/taos
-h, --host: 指定服务的FQDN,默认为本地服务
-s, --commands: 在不进入终端的情况下运行TDengine命令
-u, --user: 连接TDengine服务器的用户名,缺省为root
-p, --password: 连接TDengine服务器的密码,缺省为taosdata
-?, --help: 打印出所有命令行参数

经过此番体验,乍看起来, TDengine 与我们用过的关系型数据库 MySQL 没啥区别呀,且慢,这只是用类 SQL 语句操作了下 TDengine ,后续实战中我们继续看下与传统 SQL 不太一样的地方,同时体验下 TDengine 的写入、查询效率。

查看日志

如果在实际开发、运维过程中怀疑服务有问题,那么通过查看 TDengine 日志的方式进行排查。

[root@iot1 taos]# tailf ./log/taosdlog.0 
04/11 01:27:14.775739 00001167 SDB vgId:1, mnode:1, role:master
04/11 01:27:14.775748 00001167 MND vgId:1, update mnodes epSet, numOfMnodes:1
04/11 01:27:14.775755 00001167 MND vgId:1, mnodes epSet is set, num:1 inUse:0
04/11 01:27:14.775761 00001167 MND vgId:1, mnode:1, fqdn:iot1 shell:6030 peer:6035
04/11 01:27:14.776953 00001167 SDB vgId:1, update mnodes role, replica:1
04/11 01:27:14.776978 00001167 SDB vgId:1, mnode:1, role:master
04/11 01:27:14.776986 00001167 MND vgId:1, update mnodes epSet, numOfMnodes:1
04/11 01:27:14.776993 00001167 MND vgId:1, mnodes epSet is set, num:1 inUse:0
04/11 01:27:14.776999 00001167 MND vgId:1, mnode:1, fqdn:iot1 shell:6030 peer:6035

客户端连接

有这么几种方式对 TDengine 进行远程访问:RESTFul各种端,命令行客户端、GUI客户端、IDEA数据库连接、JNI程序端。

命令行客户端

https://www.taosdata.com/assets-download/TDengine-client-2.4.0.16-Windows-x64.exe

  1. 指定主机名访问:taos -h ip/hostname
  2. 认证信息可不加:默认为root, taosdata

GUI 客户端

https://github.com/skye0207/TDengineGUI

在用了新版的 TDengine 后遇到一个问题:发现远程客户端通过 6041 端口无法建立连接(防火墙已开放6041端口),咦,奇了个怪~

莫慌,我在 TDengine 的开源仓库的 Issues 中发现了类似问题,_

# 参考:https://github.com/taosdata/TDengine/issues/10387F
[root@iot1 taos]# systemctl start taosadapter

原来,新版的 TDengine 还有个 taosadapter ,启动 taosadapter 后才可以连接到 6041 端口,小坑!

2021-07-29-5.jpg

IDEA数据库连接

需要加载 TDengine 的驱动,记得连接地址的主机名根据实际修改。

2021-07-29-9.jpg
2021-07-29-10.jpg

  • 中文乱码,通过charset参数解决:jdbc: TAOS://iot1:6030/demo?charset=CP936

JNI程序端

后续在代码中我们将使用这种方式建立连接。因为 JDBC-JNI 使用的是 com.taosdata.jdbc.TSDBDriver ,连接 6030 端口,所以需要同时开放TCP、UDP。

iptables -I INPUT -p TCP --dport 6030 -j ACCEPT
iptables -I INPUT -p UDP --dport 6030 -j ACCEPT

JDBC-JNI和JDBC-RESTful的对比

对比项JDBC-JNIJDBC-RESTful
支持的操作系统Linux、Windows全平台
是否需要安装 client需要不需要
server 升级后是否需要升级 client需要不需要
写入性能JDBC-RESTful 是 JDBC-JNI 的 50%~90%
查询性能JDBC-RESTful 与 JDBC-JNI 没有差别

Reference


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:42:19  更:2022-05-18 17:43:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:40:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码