• go使用 github.com/influxdata/influxdb/client/v2 写数据到 influxdb


    转载请注明出处:

    接入示例

      使用 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 数据库进行正确的交互。

        

     

  • 相关阅读:
    1.6 CAN通信 F28335-Simulink仿真自动代码生成
    Redis 内存满了怎么办?这样置才正确!
    虚幻中的网络概述一
    Node.js阶段学习(一)
    rpi3 and rpi4 native build
    MySQL安全性:用户认证、防范SQL注入和SSL/TLS配置详解
    MySQ和MongoDB的选择
    Android AMS——创建Application(七)
    IMU预积分再理解
    你确定你会用Enum枚举了?
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/17500507.html