Yole 分析師:蘋果的 A14、A15 仿生晶片成為改變遊戲規則的 SoC 解決方案
阿新 • • 發佈:2021-12-09
influxDB
本文介紹了influxDB
時序資料庫及Go語言操作influxDB
。
InfluxDB是一個開源分散式時序、事件和指標資料庫。使用Go語言編寫,無需外部依賴。其設計目標是實現分散式和水平伸縮擴充套件。
安裝
2.2安裝
將上一步的壓縮包,解壓到本地。
啟動
瀏覽器開啟訪問8086埠,建立使用者資訊
1.7 安裝
解壓檔案
修改配置檔案
[meta] # Where the metadata/raft database is stored # dir = "/var/lib/influxdb/meta" dir = "D:/software/influxdb-1.7.7-1/meta" [data] # The directory where the TSM storage engine stores TSM files. dir = "D:/software/influxdb-1.7.7-1/data" # The directory where the TSM storage engine stores WAL files. wal-dir = "D:/software/influxdb-1.7.7-1/wal
啟動
influxDB介紹
名詞介紹
influxDB名詞 | 傳統資料庫概念 |
---|---|
database | 資料庫 |
measurement | 資料表 |
point | 資料行 |
point
influxDB中的point相當於傳統資料庫裡的一行資料,由時間戳(time)、資料(field)、標籤(tag)組成。
Point屬性 | 傳統資料庫概念 |
---|---|
time | 每個資料記錄時間,是資料庫中的主索引 |
field | 各種記錄值(沒有索引的屬性),例如溫度、溼度 |
tags | 各種有索引的屬性,例如地區、海拔 |
Series
Series
相當於是 InfluxDB 中一些資料的集合,在同一個 database 中,retention policy、measurement、tag sets 完全相同的資料同屬於一個 series,同一個 series 的資料在物理上會按照時間順序排列儲存在一起。
Go操作influxDB
安裝
influxDB 1.x版本
go get github.com/influxdata/influxdb1-client/v2
package main import ( "fmt" "log" "time" client "github.com/influxdata/influxdb1-client/v2" ) // influxdb demo func connInflux1() 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 queryDB1(cli client.Client, cmd string) (res []client.Result, err error) { q := client.Query{ Command: cmd, Database: "randy", } 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 writesPoints1(cli client.Client) { bp, err := client.NewBatchPoints(client.BatchPointsConfig{ Database: "randy", 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 := connInflux1() fmt.Println(conn) // insert writesPoints1(conn) // 獲取10條資料並展示 qs := fmt.Sprintf("SELECT * FROM %s LIMIT %d", "cpu_usage", 10) res, err := queryDB1(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) } } }
influxDB 2.x版本
go get github.com/influxdata/influxdb-client-go
基本使用-influxDB 2.x版本
package main
import (
"context"
"fmt"
"github.com/influxdata/influxdb-client-go/v2"
"log"
"time"
)
/*
@author RandySun
@create 2021-09-17-8:58
*/
var bucket = "RandySun"
var org = "RandySun"
func connInflux() influxdb2.Client {
// 連線資料庫客戶端
token := "iLgyKP7N4-oTGKSj-vGVD8w9p-tHJQ-24BNouCfb4HEtHlSU-GeOCZ0cCWE3RauoSZDmVHJuB7Rg71Xd2b22sQ=="
url := "http://127.0.0.1:8086"
client := influxdb2.NewClient(url, token)
return client
}
// insert
func writesPoints(client influxdb2.Client, org, bucket string) {
tags := map[string]string{"cpu": "ih-cpu"}
fields := map[string]interface{}{
"idle": 201.1,
"system": 43.3,
"user": 86.6,
}
// 建立資料點
pt := influxdb2.NewPoint("cpu_usage", tags, fields, time.Now())
// 獲取寫入資料客戶端
writeAPI := client.WriteAPIBlocking(org, bucket)
// 寫入資料
writeAPI.WritePoint(context.Background(), pt)
log.Println("insert success")
}
//// query
func queryDB(client influxdb2.Client, org string) (err error) {
queryAPI := client.QueryAPI(org)
result, err := queryAPI.Query(context.Background(), `from(bucket:"RandySun")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu_usage")`)
if err == nil {
for result.Next() {
if result.TableChanged() {
fmt.Printf("table: %s\n", result.TableMetadata().String())
}
fmt.Printf("value: %v\n", result.Record().Value())
}
if result.Err() != nil {
fmt.Printf("query parsing error: %s\n", result.Err().Error())
}
} else {
panic(err)
}
return nil
}
func main() {
client := connInflux()
fmt.Println(client)
writesPoints(client, org, bucket)
queryDB(client, "RandySun")
}
在當下的階段,必將由程式設計師來主導,甚至比以往更甚。