相比于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
即可打开软件界面
将上面的连接信息输入,即可连上数据库