influxDB


influxDB

本文介紹了influxDB時序數據庫及Go語言操作influxDB

InfluxDB是一個開源分布式時序、事件和指標數據庫。使用Go語言編寫,無需外部依賴。其設計目標是實現分布式和水平伸縮擴展。

安裝

下載

https://portal.influxdata.com/downloads/

這里需要注意因為這個網站引用了google的api所以國內點頁面的按鈕是沒反應的,怎么辦呢?

按照下圖所示,按F12打開瀏覽器的控制台,然后點擊Elements,按下Ctrl/Command+F搜索releases/influxdb,按回車查找自己所需版本的下載地址。

undefined

Mac和Linux用戶可以點擊https://v2.docs.influxdata.com/v2.0/get-started/下載。

安裝

將上一步的壓縮包,解壓到本地。

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

influxDB 2.x版本

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)
		}
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM