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)
}
- Linux、Macos或其他类unix系统
- Windows+bash(WSL、cygwin、Git Bash)
- golang >= 1.13
- make >= 3.0
- curl >= 7.1.1
- thrift 0.15.0
分支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时,表示不设置超时时间;当设置为正数时表示以毫秒为单位的超时时间。