influxDB

influxDB

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

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

安裝

下載

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

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

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

undefined

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

安裝

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

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 的數據在物理上會按照時間順序排列存儲在一塊兒。google

想要了解更多設計

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