influxDB

influxDB

本文介绍了influxDB时序数据库及Go语言操作influxDB

InfluxDB是一个开源分布式时序、事件和指标数据库。使用Go语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。

教程

安装

下载地址

文档

github

2.2下载

image-20210924075044227

2.2安装

image-20210917083903150

将上一步的压缩包,解压到本地。

image-20210917084039492

启动

image-20210922230042917

浏览器打开访问8086端口,创建用户信息

image-20210922230137822

1.7 安装

1.7基本命令官方文档

1.17下载

解压文件

image-20210923225242297

修改配置文件

[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

启动

image-20210923231253452

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版本

image-20210924081235313

github

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

image-20210924081506953

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

image-20210923075931979

posted @ 2021-12-11 16:57  RandySun  阅读(105)  评论(0编辑  收藏  举报