本文介绍如何基于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
重要确保运行环境在实例白名单配置的可访问范围内。
在实例管理>账号管理页面,可以查询实例账号信息,如果忘记密码,请点击重置密码按钮。
示例程序
上述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 ${password}
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更新的操作,保证所有操作都成功或失败,不会出现部分更新的情况。
文档内容是否对您有帮助?