go使用 github.com/influxdata/influxdb/client/v2 寫資料到 influxdb

2023-06-24 06:00:47

轉載請註明出處:

接入範例

  使用 github.com/influxdata/influxdb/client/v2 依賴包向 InfluxDB 寫入資料的範例程式碼:

package main

import (
    "fmt"
    "log"
    "time"

    "github.com/influxdata/influxdb/client/v2"
)

const (
    MyDB     = "mydb"
    username = ""
    password = ""
)

func main() {
    c, err := client.NewHTTPClient(client.HTTPConfig{
        Addr:     "http://localhost:8086",
        Username: username,
        Password: password,
    })
    if err != nil {
        log.Fatal(err)
    }
    defer c.Close()

    bp, err := client.NewBatchPoints(client.BatchPointsConfig{
        Database:  MyDB,
        Precision: "s", // 時間戳精度,例如:"s"表示秒,"ms"表示毫秒
    })
    if err != nil {
        log.Fatal(err)
    }

    tags := map[string]string{"tag1": "value1", "tag2": "value2"}
    fields := map[string]interface{}{
        "value": 10.4,
    }

    pt, err := client.NewPoint(
        "measurement_name",
        tags,
        fields,
        time.Now(),
    )
    if err != nil {
        log.Fatal(err)
    }
    
    bp.AddPoint(pt)

    err = c.Write(bp)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Data written to InfluxDB successfully!")
}

  

注意事項:

  1.為了提高寫入效能,建議使用 client.NewBatchPoints 建立一個批次寫入物件(BatchPoints)。將各個資料點新增到 BatchPoints 物件中,並使用 c.Write 方法一次性將整個批次寫入傳送給 InfluxDB。

  2.時間戳和精度:在建立資料點時,可以指定時間戳。確保時間戳是有效的,並且按照正確的時間戳格式提供。還要注意選擇合適的時間戳精度,例如秒("s")或毫秒("ms"),以便與 InfluxDB 中定義的時間戳精度匹配。

  3.欄位型別:根據你在 InfluxDB 資料庫中定義的欄位型別,確保傳遞給資料點的欄位值型別是正確的。如果欄位型別不匹配,可能會導致解析錯誤。

  4.標籤和欄位:在建立資料點時,可以指定標籤(tags)和欄位(fields)。標籤用於標識和過濾資料,而欄位包含真實的資料值。確保傳遞給資料點的標籤和欄位的名稱和值是正確的。

  5.錯誤處理:在程式碼中進行適當的錯誤處理,例如檢查函數返回的錯誤並採取相應的措施,比如紀錄檔記錄或錯誤處理。

 

錯誤總結:

  在 開發過程中遇到 寫資料到influxdb 報錯:unable to parse points ,總結下自己的踩坑原因: 由於我在 封裝 fields 時,使用的資料型別是 int 與 *big.Int,在寫資料庫時解析不了,丟擲異常 unable to parse points。

  相關型別的儲存與轉換總結:

  1. 整數型別:InfluxDB 支援的整數型別是 int64。如果你的 Go 變數是 int 型別或其他整數型別(如 int8int16int32),則需要將其轉換為 int64 型別。

  2. 浮點數型別:InfluxDB 支援的浮點數型別是 float64。如果你的 Go 變數是 float32 或其他浮點數型別,則需要將其轉換為 float64 型別。

  3. 布林型別:InfluxDB 支援布林型別。如果你的 Go 變數是 bool 型別,則不需要進行任何轉換。

  4. 字串型別:InfluxDB 支援字串型別。如果你的 Go 變數是 string 型別,則不需要進行任何轉換。

  5. 大整數型別:如果你在處理大整數時使用了 big.Int 型別,你可能需要將其轉換為適當的型別,以便與 InfluxDB 的欄位型別匹配。例如,可以使用 int64 或字串來表示大整數。

  確保根據 InfluxDB 資料庫中定義的欄位型別和資料模型來選擇正確的型別,並根據需要進行必要的型別轉換。這樣可以避免在寫入資料時出現型別不匹配的錯誤。

  同時,還應注意使用正確的時間戳精度(例如秒、毫秒等)和正確的時間格式,以便在寫入資料時與 InfluxDB 資料庫進行正確的互動。