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

        

     

  • 相关阅读:
    JVM类加载机制、双亲委派和SPI机制
    java计算机毕业设计咖啡屋订单系统MyBatis+系统+LW文档+源码+调试部署
    2023年了,java后端还有未来吗?
    8月28日计算机视觉理论学习笔记——图像生成
    【MATLAB】绘制柱状图、设置照明方式
    力扣每日一题 网络信号最好的坐标
    Spring Cloud网关路由谓词
    1.7. 找出数组的第 K 大和原理及C++实现
    LeetCode-剑指29-顺时针打印矩阵
    python/C++二分查找库函数(lower_bound() 、upper_bound,bisect_left,bisect_right)
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/17500507.html