找不到原创的文档了,转载的人没给原文链接,呵呵了,附上转载的转载链接
https://blog.csdn.net/jailman/article/details/78951187
安装Go之后设置GOPATH与GOBIN
export GOPATH=$(go env GOPATH)
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
修改了InfluxDB的写代码,将浮点数文件转换为二维数组再入库。
首先需要将InfluxDB的源码放入 go/src/github.com/influxdata 目录。
package main
import (
"log"
"time"
"fmt"
"math/rand"
"github.com/influxdata/influxdb/client/v2"
"bufio"
"io"
"os"
"strings"
"strconv"
)
const (
MyDB = "testInfluxdb"
username = "root"
password = ""
)
func transFile2Array(path string) (res [10000][43]float64) {
var array [10000][43] float64
var i int = 0
file, err := os.Open(path)
if err != nil {
fmt.Printf("Error: %s\n", err)
return
}
defer file.Close()
br := bufio.NewReader(file)
for {
a, _, c := br.ReadLine()
if c == io.EOF {
break
}
//store 2D array
split := strings.Fields(string(a))
for j := 0; j < len(split); j++ {
array[i][j], _ = strconv.ParseFloat(string(split[j]), 64)
}
i++
}
return array
}
func queryDB(clnt client.Client, cmd string) (res []client.Result, err error) {
q := client.Query{
Command: cmd,
Database: MyDB,
}
if response, err := clnt.Query(q); err == nil {
if response.Error() != nil {
return res, response.Error()
}
res = response.Results
} else {
return res, err
}
return res, nil
}
func writePoints(clnt client.Client, num int) {
sampleSize := 1 * 10000
rand.Seed(42)
t := num
temp := num
bp, _ := client.NewBatchPoints(client.BatchPointsConfig{
Database: MyDB,
Precision: "us",
})
colArray := getRowInfoFromFile("/opt/run/2/wlan_kpi_2_43fields.csv")
fmt.Printf("batch: %d\n", (temp -1)*10000)
for i := 0; i < sampleSize; i++ {
t += 1
tags := map[string]string{
// "system_name": fmt.Sprintf("sys_%d",i%10),
// "site_name":fmt.Sprintf("s_%d", (t+i) % 10),
// "equipment_name":fmt.Sprintf("e_%d",t % 10),
}
fields := map[string]interface{}{
// "value0" : fmt.Sprintf("%f",colArray[(temp-1)*10000+i][0]),
// "value1" : fmt.Sprintf("%f",colArray[(temp-1)*10000+i][1]),
}
for j:=0;j<len(colArray[1]);j++{
fields[fmt.Sprintf("value_%d",j)]=fmt.Sprintf("%f",colArray[(temp-1)*10000+i][j])
}
pt, err := client.NewPoint("monitorStatus", tags, fields,time.Now())
if err != nil {
log.Fatalln("Error: ", err)
}
bp.AddPoint(pt)
}
err := clnt.Write(bp)
if err != nil {
log.Fatal(err)
}
//fmt.Printf("%d task done\n",num)
}
func main() {
// Make client
c, err := client.NewHTTPClient(client.HTTPConfig{
Addr: "http://localhost:8086",
Username: username,
Password: password,
})
if err != nil {
log.Fatalln("Error: ", err)
}
_, err = queryDB(c, fmt.Sprintf("CREATE DATABASE %s", MyDB))
if err != nil {
log.Fatal(err)
}
i := 1
for i <= 10000 {
defer writePoints(c, i)
//fmt.Printf("i=%d\n",i)
i += 1
}
//fmt.Printf("task done : i=%d \n",i)
}