influxDB

更新、更全的《Go從入門到放棄》的更新網站,更有python、go、人工智能教學等着你:http://www.javashuo.com/article/p-mxrjjcnn-hn.htmlpython

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

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

1、安裝

1.1 下載

https://portal.influxdata.com/downloads/數據庫

這裏須要注意由於這個網站引用了google的api因此國內點頁面的按鈕是沒反應的,怎麼辦呢?api

按照下圖所示,按F12打開瀏覽器的控制檯,而後點擊Elements,按下Ctrl/Command+F搜索releases/influxdb,按回車查找本身所需版本的下載地址。 influxdb_01.png瀏覽器

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

1.2 安裝

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

2、influxDB介紹

2.1 名詞介紹

influxDB名詞 傳統數據庫概念
database 數據庫
measurement 數據表
point 數據行

2.2 point

influxDB中的point至關於傳統數據庫裏的一行數據,由時間戳(time)、數據(field)、標籤(tag)組成。網站

Point屬性 傳統數據庫概念
time 每一個數據記錄時間,是數據庫中的主索引
field 各類記錄值(沒有索引的屬性),例如溫度、溼度
tags 各類有索引的屬性,例如地區、海拔

2.3 Series

Series至關因而 InfluxDB 中一些數據的集合,在同一個 database 中,retention policy、measurement、tag sets 徹底相同的數據同屬於一個 series,同一個 series 的數據在物理上會按照時間順序排列存儲在一塊兒。

想要了解更多

3、Go操做influxDB

3.1 安裝

3.1.1 influxDB 1.x版本

go get github.com/influxdata/influxdb1-client/v2

3.1.2 influxDB 2.x版本

go get github.com/influxdata/influxdb-client-go

3.2 基本使用

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)
        }
    }
}
相關文章
相關標籤/搜索