时序数据库TDengine,实战解决用电量监控管理系统

相比于influxdb,TDengine的全中文文档,类sql语句,对于一个英语渣来说就显得特别友好了。再加上教程丰富,案例又和我的需求比较类似,就选择TDengine实战了一把。

安装
第一步,当然是安装了,先把系统跑起来。
最方便的还是使用docker,一条命令跑起来。
当然,首先你得有个docker环境。我这里使用的是ubuntu系统。

docker run -d -p 6030:6030 -p 6041:6041 -p 6043-6049:6043-6049 -p 6043-6049:6043-6049/udp tdengine/tdengine


如无意外的话,运行docker ps -a可以看到数据库跑起来了,如上图。

下一步,进入数据库,查看一下

进入docker内部命令是:
docker exec -it <container name> bash
我这里的容器名字是reverent_tharp,所以运行命令如下:

docker exec -it reverent_tharp bash

进入容器后,执行taos,即可进入数据库客户端
show databases;
use power;
show tables;
select * from d1001;


golang执行读写操作
数据库可以了,那就把读写操作搞起来吧。
将数据库连接定义为一个包
让别的地方可以直接使用

package utils

import (
	"database/sql"
	"fmt"
	_ "github.com/taosdata/driver-go/v3/taosRestful"
)

var TDB *sql.DB

func init() {
	var taosDSN = "root:taosdata@http(192.168.118.164:6041)/"
	taos, err := sql.Open("taosRestful", taosDSN)
	if err != nil {
		fmt.Println("failed to connect TDengine, err:", err)
		return
	}
	fmt.Println("TDengine connected")
	TDB = taos
}


在做数据库查询,新增之前,把数据库结构建立好

CREATE DATABASE power;

CREATE STABLE power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT);


插入数据

func InsterIntoTables(c *gin.Context) {
	sql := `INSERT INTO power.d1001 USING power.meters TAGS('California.SanFrancisco', 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000)
    power.d1002 USING power.meters TAGS('California.SanFrancisco', 3) VALUES ('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000)
    power.d1003 USING power.meters TAGS('California.LosAngeles', 2) VALUES ('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000) ('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000)
    power.d1004 USING power.meters TAGS('California.LosAngeles', 3) VALUES ('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000) ('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)`
	res, err := utils.TDB.Exec(sql)
	if err != nil {
		fmt.Println("插入数据失败")
		c.Abort()
	}
	utils.Ok(c, res)
}


查询数据

func GetTableData(c *gin.Context) {
	fmt.Println("jinrule")
	sql := `SELECT * FROM power.d1001`
	res, _ := utils.TDB.Query(sql)
	var myslic = []map[string]interface{}{}
	for res.Next() {
		var r struct {
			ts      time.Time
			current float32
			voltage int
			phase   float32
		}
		res.Scan(&r.ts, &r.current, &r.voltage, &r.phase)
		var item = map[string]interface{}{
			"ts":      r.ts,
			"current": r.current,
			"voltage": r.voltage,
			"phase":   r.phase,
		}
		myslic = append(myslic, item)
	}
	utils.Ok(c, myslic)
}


可视化查看数据
这里我们使用TDengineGui工具

git clone git@github.com:dinglezhang/TDengineGUI.git
进入目录
cnpm i
npm run start
即可打开软件界面
将上面的连接信息输入,即可连上数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值