Apache IoTDB(物联网数据库)是一个物联网原生数据库,在数据管理和分析方面表现良好,可部署在边缘设备和云上。 由于其轻量级架构、高性能和丰富的功能集,以及与Apache Hadoop、Spark和Flink的深度集成, Apache IoTDB可以满足物联网工业领域的海量数据存储、高速数据摄取和复杂数据分析的要求。
本仓库是Apache IoTDB的Go语言客户端.
Apache IoTDB website: https://iotdb.apache.org Apache IoTDB Github: https://github.com/apache/iotdb
golang >= 1.13
使用go mod
export GO111MODULE=on export GOPROXY=https://goproxy.io mkdir session_example && cd session_example curl -o session_example.go -L https://github.com/apache/iotdb-client-go/raw/main/example/session_example.go go mod init session_example go run session_example.go
不使用go mod,采用GOPATH
# get thrift 0.15.0 go get github.com/apache/thrift cd $GOPATH/src/github.com/apache/thrift git checkout 0.15.0 mkdir -p $GOPATH/src/iotdb-client-go-example/session_example cd $GOPATH/src/iotdb-client-go-example/session_example curl -o session_example.go -L https://github.com/apache/iotdb-client-go/raw/main/example/session_example.go go run session_example.go
通过SessionPool管理session,用户不需要考虑如何重用session,当到达pool的最大值时,获取session的请求会阻塞 注意:session使用完成后需要调用PutBack方法
单实例
config := &client.PoolConfig{ Host: host, Port: port, UserName: user, Password: password, } sessionPool = client.NewSessionPool(config, 3, 60000, 60000, false)
分布式或双活
config := &client.PoolConfig{ UserName: user, Password: password, NodeUrls: strings.Split("127.0.0.1:6667,127.0.0.1:6668", ","), } sessionPool = client.NewSessionPool(config, 3, 60000, 60000, false)
例1:设置存储组
session, err := sessionPool.GetSession() defer sessionPool.PutBack(session) if err == nil { session.SetStorageGroup(sg) }
例2:查询
var timeout int64 = 1000 session, err := sessionPool.GetSession() defer sessionPool.PutBack(session) if err != nil { log.Print(err) return } sessionDataSet, err := session.ExecuteQueryStatement(sql, &timeout) if err == nil { defer sessionDataSet.Close() printDataSet1(sessionDataSet) } else { log.Println(err) }
分支rel/0.13
以及更早前的版本中,apache/thrift的版本为v0.14.1
。 在更新的版本中,apache/thrift已经升级为v0.15.0
。 这两个版本在一些接口上并不兼容,使用不对应的版本,会导致编译报错。
两个版本中有改动的接口如下:
NewTSocketConf
。该接口在v0.14.1
版本中返回2个值,在v0.15.0
版本中返回1个值。NewTFramedTransport
已弃用,改用为NewTFramedTransportConf
。更多相关的内容可以参考这个PR:update thrift to 0.15.0 to fit IoTDB 0.13.0
函数client/session.go/Open()
有一个参数connectionTimeoutInMs
,表示了以毫秒为单位的连接超时时间。 但旧版本中,该函数在实现时并未正确进行单位转换,而是将其看作了纳秒。现在该问题已修复。 当该参数为0时,表示不设置超时时间;当设置为正数时表示以毫秒为单位的超时时间。