openGemini Go语言SDK:创新与高效的完美融合

原创
04/19 17:01
阅读数 110

在当今的技术领域,Go 语言以其高效的性能和简洁的语法而备受青睐,使得越来越多的互联网大厂开始使用GoLang来构建自己的业务系统。现在,让我们来深入了解一下由一支精英开发团队打造的openGemini Go语言客户端。

开发团队介绍

openGemini Go语言SDK的开发团队是华为云工业物联平台团队--由一群富有激情和经验的开发者组成。他们具备广泛的技术知识和丰富的行业经验,致力于通过创新的解决方案满足社区用户的需求。

版本功能介绍

当前版本(v0.2.0)的Go SDK具有以下令人振奋的功能:

  • 负载均衡

    支持客户端同时连接多个ts-sql,每次请求会发送给不同的ts-sql处理,以确保服务侧负载总体保持均衡态势。当前版本采用的负载均衡算法为“轮询”,采用其他算法,可通过修改 getServerUrl() 函数

  • 连接管理

    客户端后台程序会定时检测网络和ts-sql运行状态,提前规避故障网络或者故障节点

  • 数据压缩

    支持数据Gzip压缩后发给数据库服务端,节省网络传输带宽,但一定程度会增加服务侧的开销

  • 批量处理

    支持数据批量写入和单点写入自动转为批处理,提升数据写入效率

  • 鉴权&传输加密

    支持用户密码鉴权和HTTPS传输加密

  • 丰富的DDL操作

    支持create database, drop database, show databases, show tag keys, show tag values, create retention policy, show measurements等独立接口,便于应用自动化集成。

运行DEMO

执行如下命令,运行example

> mkdir demo
> cp opengemini-cient-go/examples/example/example.go demo/
> cd demo
> echo "module main" > go.mod
> go mod tidy
> go run example.go  //前提需要本地已运行openGemini单机或者集群

应用开发

引用客户端库

import . "github.com/openGemini/opengemini-client-go/opengemini"

创建客户端,连接openGemini

config := &Config{
	Addresses: []*Address{
		{
			Host: "127.0.0.1",
			Port: 8086,
		},
	},
}
client, err := NewClient(config)
if err != nil {
	fmt.Println(err)
}

创建Database

exampleDatabase := "ExampleDatabase"
err = client.CreateDatabase(exampleDatabase)
if err != nil {
	fmt.Println(err)
	return
}

批量写入数据

exampleMeasurement := "ExampleMeasurement"
bp := &BatchPoints{}
var tagList []string
tagList = append(tagList, "sunny", "rainy", "windy")
for i := 0; i < 10; i++ {
	p := &Point{}
	p.SetMeasurement(exampleMeasurement)
	p.AddTag("Weather", tagList[rand.Int31n(3)])
	p.AddField("Humidity", rand.Int31n(100))
	p.AddField("Temperature", rand.Int31n(40))
	p.SetTime(time.Now())
	bp.AddPoint(p)
	time.Sleep(time.Nanosecond)
}
err = client.WriteBatchPoints(exampleDatabase, bp)
if err != nil {
	fmt.Println(err)
}

查询数据

q := Query{
	Database: exampleDatabase,
	Command:  "select * from " + exampleMeasurement,
}
res, err := client.Query(q)
if err != nil {
	fmt.Println(err)
}
for _, r := range res.Results {
	for _, s := range r.Series {
		for _, v := range s.Values {
			for _, i := range v {
				fmt.Print(i)
				fmt.Print(" | ")
			}
			fmt.Println()
		}
	}
}

参考文档

接口参考文档

https://pkg.go.dev/github.com/openGemini/opengemini-client-go@v0.1.0/opengemini

仓库地址

https://github.com/openGemini/opengemini-client-go

需求反馈

https://github.com/openGemini/openGemini/issues/427

致谢

感谢贺张俭@shoothzj,谌旭琳@PennyYoon,感谢华为云工业物联平台团队在社区的辛勤付出!


openGemini官网:http://www.openGemini.org

Star for me😊:https://github.com/openGemini

openGemini公众号:

欢迎关注~ 诚邀你加入 openGemini 社区,共建、共治、共享未来!

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部