zoukankan      html  css  js  c++  java
  • 040 influxDB


    更新、更全的《Go从入门到放弃》的更新网站,更有python、go、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11517502.html

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

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

    一、安装

    1.1 下载

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

    这里需要注意因为这个网站引用了google的api所以国内点页面的按钮是没反应的,怎么办呢?

    按照下图所示,按F12打开浏览器的控制台,然后点击Elements,按下Ctrl/Command+F搜索releases/influxdb,按回车查找自己所需版本的下载地址。 influxdb_01.png

    Mac和Linux用户可以点击https://v2.docs.influxdata.com/v2.0/get-started/下载。

    1.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 的数据在物理上会按照时间顺序排列存储在一起。

    想要了解更多

    三、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
    ", j, value)
    		}
    	}
    }
    
  • 相关阅读:
    CDialogConfigStringRecord+CDialogConfigManage 如何保存listbox中未显示的信息
    vs2010 打开 vs2005 工程报错
    优秀程序员的两大要素:懒 + 笨
    架构设计中的方法学(四)
    程序员应该具备的素质汇总(逐步总结)(转)
    架构设计中的方法学(三)
    成都中青旅欢迎你
    游洪崖洞有感
    架构设计中的方法学(七)
    架构设计中的方法学(二)
  • 原文地址:https://www.cnblogs.com/abdm-989/p/12003492.html
Copyright © 2011-2022 走看看