最近学习了TDengine数据库,因为我们公司有硬件设备,设备按照每分钟,每十分钟,每小时上传数据,存入数据库。而这些数据会经过sql查询,统计返回展示到前端。但时间积累后现在数据达到了百万级数据,导致查询很慢,综合考虑下,决定使用这个时序数据库来存入数据。
关于TDengine详情,可去官网https://docs.taosdata.com/查看。具体理解超级表和子表。
接下来展示我的简单使用:
建入连接
有两种方式建入连接,一种是安装客户端驱动,一种是安装连接器,我这边使用的是安装连接器。
安装连接器,又有两种方式,一种是原声连接,一种是REST连接。两种连接端口不同(自行配置)。
我使用的REST连接:
首先导入依赖:
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>3.0.0</version>
</dependency>
接下来是建入连接代码:
application.yml:
tdengine:
forward: false #是否启用该数据库开关
ip: 127.0.0.49 #tdengine服务ip
port: 8041
database: hle_data
user: root
password: Hle8888
TdengineConfig.java
@Configuration
public class TdengineConfig {
public static String ip;
public static String port;
public static String database;
public static String user;
public static String password;
public static Boolean forward;
@Value("${tdengine.ip}")
public void setIp(String ip) {
TdengineConfig.ip = ip;
}
@Value("${tdengine.port}")
public void setPort(String port) {
TdengineConfig.port = port;
}
@Value("${tdengine.database}")
public void setDatabase(String database) {
TdengineConfig.database = database;
}
@Value("${tdengine.user}")
public void setUser(String user) {
TdengineConfig.user = user;
}
@Value("${tdengine.password}")
public void setPassword(String password) {
TdengineConfig.password = password;
}
@Value("${tdengine.forward}")
public void setForward(Boolean forward) {
TdengineConfig.forward = forward;
}
}
TdengineConnectConfig.java
@Component
public class TdengineConnectConfig {
//8030原生连接端口 8041
public static Connection conn = null;
public static String URL = TdengineConfig.ip + ":" + TdengineConfig.port + "/" + TdengineConfig.database;
@PostConstruct
public static Connection getConnection(){
if(!TdengineConfig.forward) return null;
try{
System.out.println("---------------start Connected");
String jdbcUrl = "jdbc:TAOS-RS://"+ URL +"?user="+ TdengineConfig.user +"&password=" + TdengineConfig.password;
Properties connProps = new Properties();
//connProps.setProperty(TSDBDriver.PROPERTY_KEY_BATCH_LOAD, "true"); //开启批量拉取功能
conn = DriverManager.getConnection(jdbcUrl, connProps);
System.out.println("---------------Connected success");
}catch (Exception e){
System.out.println("---------------Connected fail");
e.printStackTrace();
}
return conn;
}
//执行sql
public static void executeSql(String sql){
try{
if(conn == null) conn = getConnection();
if(conn != null){
Statement statement = conn.createStatement();
statement.execute(sql);
}
}catch (Exception e){
System.out.println("sql执行失败");
e.printStackTrace();
}
}
}
操作数据,执行sql
TdengineConnectConfig.executeSql(sql.toString());
具体语法可以去看官网。给你们展示一下写入数据的sql:
--------执行sql:INSERT INTO
D_LE202012210190_2011_a24088 USING data_2011 TAGS ('LE202012210190','a24088','非甲烷总烃','mg/m³') VALUES (1675844844000,0.011,null,null,null,null)
D_LE202012210190_2011_a34001 USING data_2011 TAGS ('LE202012210190','a34001','总悬浮颗粒物TSP','mg/m³') VALUES (1675844844000,0.132,null,null,null,null)
D_LE202012210190_2011_a01012 USING data_2011 TAGS ('LE202012210190','a01012','烟气温度','°C') VALUES (1675844844000,14.9,null,null,null,null)
D_LE202012210190_2011_GGY03 USING data_2011 TAGS ('LE202012210190','GGY03','油烟浓度','mg/m³') VALUES (1675844844000,0.028,null,null,null,null);
注:表名中如果含有大写会自动转为小写,不能带有“-”符号,可以使用“_”。
再展示一下数据库界面:
哈哈哈哈这就是我的简单使用,更多的自行去官网看看哦~