Go
本文介绍如何基于Go语言编程环境连接和操作图数据库GDB,这也是以常驻服务形式操作图数据库GDB的常用形式。
注意
- 以下示例的正确运行依赖您的运行环境网络与图数据库GDB实例联通
- 运行环境需要安装有Go语言环境,推荐使用1.12版本,这也是本文示例使用的版本。
环境准备
安装go语言环境,Linux环境可以直接安装二进制包
安装GDB SDK
go get -u github.com/aliyun/alibabacloud-gdb-go-sdk/gdbclient
- 获取图数据库GDB连接参数
在’实例管理’->’基本信息’页面,可以查看实例内网地址和内网端口,如果开通外网访问实例,也可以使用外网地址和外网端口
注意 确保运行环境在实例白名单配置的可访问范围内
# 内网环境
host = "${gdbID}.graphdb.rds.aliyuncs.com"
port = 8182
# 外网环境
host = "${gdbID}pub.graphdb.rds.aliyuncs.com"
port = 3734
在’实例管理’->’账号管理’页面,可以查询实例账号信息,如果忘记密码,请’重置密码’
cusername="${username}"
password="${password}"
示例程序
上述GDB SDK
中包含有演示程序,以下代码来自其中的演示程序。
- 新建一个demo目录,并添加测试文件
mkdir gdb_go_demo
cd gdb_go_demo
touch main.go
- 编写测试代码,运行以下代码时需要图数据库GDB的连接参数,直接以参数提供
package main
import (
"flag"
"log"
goClient "github.com/aliyun/alibabacloud-gdb-go-sdk/gdbclient"
)
var (
host, username, password string
port int
)
func main() {
flag.StringVar(&host, "host", "", "GDB Connection Host")
flag.StringVar(&username, "username", "", "GDB username")
flag.StringVar(&password, "password", "", "GDB password")
flag.IntVar(&port, "port", 8182, "GDB Connection Port")
flag.Parse()
if host == "" || username == "" || password == "" {
log.Fatal("No enough args provided. Please run:" +
" go run main.go -host <gdb host> -username <username> -password <password> -port <gdb port>")
return
}
settings := &goClient.Settings{
Host: host,
Port: port,
Username: username,
Password: password,
}
// connect GDB with auth
client := goClient.NewClient(settings)
// send script dsl with bindings to GDB
bindings := make(map[string]interface{})
bindings["GDB___id"] = "gdb_vertex_test_id"
bindings["GDB___label"] = "gdb_vertex_test_label"
bindings["GDB___PK"] = "name"
bindings["GDB___PV"] = "Jack"
dsl = "g.addV(GDB___label).property(id, GDB___id).property(GDB___PK, GDB___PV)"
results, err = client.SubmitScriptBound(dsl, bindings)
if err != nil {
log.Fatalf("Error while querying: %s\n", err.Error())
}
// get response, add vertex should return a Vertex
for _, result := range results {
v := result.GetVertex()
log.Printf("get vertex[id:%s, label:%s, propLen %d", v.Id(), v.Label(), len(v.Properties()))
// read vertex property
for _, p := range v.VProperties() {
log.Printf(" {PK: %s, PV: %s}", p.PKey(), p.PValue().(string))
}
}
// drop all vertex
_, err = client.SubmitScript("g.V().drop()")
if err != nil {
log.Fatalf("Error while querying: %s\n", err.Error())
}
client.Close()
}
上述代码实现创建连接GDB的client,并发送gremlin操作添加一个点,打印执行结果,最后发送清除所有数据的gremlin操作。
针对client更多的参数配置请参考SDK包中的演示代码,包括连接池,session的支持等。
运行测试程序
将上一节中的GDB连接参数替换下面命令行参数,运行测试代码,正常会有下面输出。
go run main.go -host ${host} -port ${port} -username ${username} -password ${username}
2019/12/23 14:22:49 get vertex[id:gdb_vertex_test_id, label:gdb_vertex_test_label, propLen 1
2019/12/23 14:22:49 {PK: name, PV: Jack}
关于GDB GO SDK
- GDB的GO语言SDK是阿里GDB团队开发维护的Gremlin客户端,欢迎使用和提交MR
- GO SDK目前不支持
bytecode
方式与GDB交互,用户可以使用script
方式访问GDB,并将可变参数模版化,这也是GDB推荐的使用方式 - GO SDK封装有session接口,支持在一次事务中包含多次对GDB更新的操作,保证所有操作都成功或失败,不会出现部分更新的情况
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论