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

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

    

 

标签: GO

相关文章
|
7月前
|
人工智能 安全 Shell
Go并发编程避坑指南:从数据竞争到同步原语的解决方案
在高并发场景下,如钱包转账,数据一致性至关重要。本文通过实例演示了 Go 中如何利用 `sync.Mutex` 和 `sync.RWMutex` 解决数据竞争问题,帮助开发者掌握并发编程中的关键技能。
Go并发编程避坑指南:从数据竞争到同步原语的解决方案
|
7月前
|
存储 监控 算法
企业电脑监控系统中基于 Go 语言的跳表结构设备数据索引算法研究
本文介绍基于Go语言的跳表算法在企业电脑监控系统中的应用,通过多层索引结构将数据查询、插入、删除操作优化至O(log n),显著提升海量设备数据管理效率,解决传统链表查询延迟问题,实现高效设备状态定位与异常筛选。
186 3
|
10月前
|
Go
Go语言同步原语与数据竞争:Mutex 与 RWMutex
在Go语言并发编程中,数据竞争是多个goroutine同时读写共享变量且未加控制导致的问题,可能引发程序崩溃或非确定性错误。为解决此问题,Go提供了`sync.Mutex`和`sync.RWMutex`两种同步机制。`Mutex`用于保护临界区,确保同一时间只有一个goroutine访问;`RWMutex`支持多读单写的细粒度控制,适合读多写少场景。使用时需避免死锁,并借助`-race`工具检测潜在的数据竞争,从而提升程序稳定性和性能。
285 51
|
测试技术 Go API
Go 切片导致 rand.Shuffle 产生重复数据的原因与解决方案
在 Go 语言开发中,使用切片时由于其底层数据共享特性,可能会引发意想不到的 Bug。本文分析了 `rand.Shuffle` 后切片数据重复的问题,指出原因在于切片是引用类型,直接赋值会导致底层数组共享,进而影响原始数据。解决方案是使用 `append` 进行数据拷贝,确保独立副本,避免 `rand.Shuffle` 影响原始数据。总结强调了切片作为引用类型的特性及正确处理方法,确保代码稳定性和正确性。
330 82
|
10月前
|
编译器 测试技术 Go
Go语言同步原语与数据竞争:数据竞争的检测工具
本文介绍了 Go 语言中数据竞争(Data Race)的概念及其检测方法。数据竞争发生在多个 Goroutine 无同步访问共享变量且至少一个为写操作时,可能导致程序行为不稳定或偶发崩溃。Go 提供了内置的竞态检测器(Race Detector),通过 `-race` 参数可轻松检测潜在问题。文章还展示了如何使用锁或原子操作修复数据竞争,并总结了在开发和 CI 流程中启用 `-race` 的最佳实践,以提升程序稳定性和可靠性。
|
10月前
|
Go
Go语言同步原语与数据竞争:WaitGroup
本文介绍了 Go 语言中 `sync.WaitGroup` 的使用方法和注意事项。作为同步原语,它通过计数器机制帮助等待多个 goroutine 完成任务。核心方法包括 `Add()`(设置等待数量)、`Done()`(减少计数)和 `Wait()`(阻塞直到计数归零)。文章详细讲解了其基本原理、典型用法(如等待 10 个 goroutine 执行完毕),并提供了代码示例。同时指出常见错误,例如 `Add()` 必须在 goroutine 启动前调用,以及 WaitGroup 不可重复使用。最后总结了适用场景和使用要点,强调避免竞态条件与变量捕获陷阱。
|
10月前
|
安全 Go 调度
Go同步原语与数据竞争:原子操作(atomic)
本文介绍了Go语言中`sync/atomic`包的使用,帮助避免多goroutine并发操作时的数据竞争问题。原子操作是一种不可中断的操作,确保变量读写的安全性。文章详细说明了常用函数如`Load`、`Store`、`Add`和`CompareAndSwap`的功能与应用场景,并通过并发计数器示例展示了其实现方式。此外,对比了原子操作与锁的优缺点,强调原子操作适用于简单变量的高效同步,而不适合复杂数据结构。最后提醒开发者注意使用场景限制,合理选择同步工具以优化性能。
|
数据采集 网络协议 测试技术
使用Go Validator在Go应用中有效验证数据
使用Go Validator在Go应用中有效验证数据
|
存储 算法 Java
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
|
数据采集 缓存 IDE
Go中遇到http code 206和302的获取数据的解决方案
文章提供了解决Go语言中处理HTTP状态码206(部分内容)和302(重定向)的方案,包括如何获取部分数据和真实请求地址的方法,以便程序员能快速完成工作,享受七夕时光。
1335 0
Go中遇到http code 206和302的获取数据的解决方案