目錄html
更新、更全的《Go從入門到放棄》的更新網站,更有python、go、人工智能教學等着你:http://www.javashuo.com/article/p-mxrjjcnn-hn.htmlpython
本文介紹了influxDB
時序數據庫及Go語言操做influxDB
。git
InfluxDB是一個開源分佈式時序、事件和指標數據庫。使用Go語言編寫,無需外部依賴。其設計目標是實現分佈式和水平伸縮擴展。github
https://portal.influxdata.com/downloads/數據庫
這裏須要注意由於這個網站引用了google的api因此國內點頁面的按鈕是沒反應的,怎麼辦呢?api
按照下圖所示,按F12
打開瀏覽器的控制檯,而後點擊Elements
,按下Ctrl/Command+F
搜索releases/influxdb
,按回車查找本身所需版本的下載地址。 瀏覽器
Mac和Linux用戶能夠點擊https://v2.docs.influxdata.com/v2.0/get-started/下載。bash
將上一步的壓縮包,解壓到本地。分佈式
influxDB名詞 | 傳統數據庫概念 |
---|---|
database | 數據庫 |
measurement | 數據表 |
point | 數據行 |
influxDB中的point至關於傳統數據庫裏的一行數據,由時間戳(time)、數據(field)、標籤(tag)組成。網站
Point屬性 | 傳統數據庫概念 |
---|---|
time | 每一個數據記錄時間,是數據庫中的主索引 |
field | 各類記錄值(沒有索引的屬性),例如溫度、溼度 |
tags | 各類有索引的屬性,例如地區、海拔 |
Series
至關因而 InfluxDB 中一些數據的集合,在同一個 database 中,retention policy、measurement、tag sets 徹底相同的數據同屬於一個 series,同一個 series 的數據在物理上會按照時間順序排列存儲在一塊兒。
go get github.com/influxdata/influxdb1-client/v2
go get github.com/influxdata/influxdb-client-go
package main import ( "fmt" "log" "time" client "github.com/influxdata/influxdb1-client/v2" ) // influxdb demo func connInflux() client.Client { cli, err := client.NewHTTPClient(client.HTTPConfig{ Addr: "http://127.0.0.1:8086", Username: "admin", Password: "", }) if err != nil { log.Fatal(err) } return cli } // query func queryDB(cli client.Client, cmd string) (res []client.Result, err error) { q := client.Query{ Command: cmd, Database: "test", } if response, err := cli.Query(q); err == nil { if response.Error() != nil { return res, response.Error() } res = response.Results } else { return res, err } return res, nil } // insert func writesPoints(cli client.Client) { bp, err := client.NewBatchPoints(client.BatchPointsConfig{ Database: "test", Precision: "s", //精度,默認ns }) if err != nil { log.Fatal(err) } tags := map[string]string{"cpu": "ih-cpu"} fields := map[string]interface{}{ "idle": 201.1, "system": 43.3, "user": 86.6, } pt, err := client.NewPoint("cpu_usage", tags, fields, time.Now()) if err != nil { log.Fatal(err) } bp.AddPoint(pt) err = cli.Write(bp) if err != nil { log.Fatal(err) } log.Println("insert success") } func main() { conn := connInflux() fmt.Println(conn) // insert writesPoints(conn) // 獲取10條數據並展現 qs := fmt.Sprintf("SELECT * FROM %s LIMIT %d", "cpu_usage", 10) res, err := queryDB(conn, qs) if err != nil { log.Fatal(err) } for _, row := range res[0].Series[0].Values { for j, value := range row { log.Printf("j:%d value:%v\n", j, value) } } }