第一次看influxdb的代码实例时不明白influxdb Measurements是什么意思。经过研究总结一下。

1)measurement,相当于关系数据库中的table,包含tag,field,time,例如:select * from cpu_usage

2)field是必须的,并且不能根据field来排序
3)tag是可选的,tag可以用来做索引,tag是以字符串的形式存放的
4)InfluxDb可以随意添加measurements, tags, fields, time
5)points相当于表中的一条数据
6)InfluxDb的概念,Point由时间戳(time)、数据(field)、标签(tags)组成
time 每个数据记录时间,是数据库中的主索引(会自动生成)
fields 各种记录值(没有索引的属性)也就是记录的值:温度, 湿度,每条记录可以不同
tags 各种有索引的属性:地区,海拔
7)go操作Measurements代码

package main

import (
    "log"
    "time"
    "github.com/influxdata/influxdb/client/v2"
)

const (
    MyDB = "nfdump"         //数据库名
    username = "zhja"       //用户名
    password = "zhjazhja"   //密码
)

func main(){
    //链接数据库
    c, err := client.NewHTTPClient(client.HTTPConfig{
        Addr: "http://192.168.210.130:8086",
        Username: username,
        Password: password,
    })

    if err != nil {
        log.Fatalln("Error: ", err)
    }

    // Create a new point batch
    bp, err := client.NewBatchPoints(client.BatchPointsConfig{
        Database:  MyDB,
        Precision: "s",
    })

    if err != nil {
        log.Fatalln("Error: ", err)
    }

    // Create a point and add to batch
    tags := map[string]string{"cpu1": "cpu-total1"}
    fields := map[string]interface{}{
        "idle1":   10.1,
        "system1": 53.3,
        "user1":   46.6,
    }
    pt, err := client.NewPoint("cpu_usage", tags, fields, time.Now())

    if err != nil {
        log.Fatalln("Error: ", err)
    }

    bp.AddPoint(pt)

    // Write the batch
    c.Write(bp)
}

发表评论