推特 阿里云技术文档正文

Go_SDK参考_图数据库GDB

admin 阿里云技术文档 2020-02-11 193 0
阿里云服务器优惠

Go

本文介绍如何基于Go语言编程环境连接和操作图数据库GDB,这也是以常驻服务形式操作图数据库GDB的常用形式。

注意

  • 以下示例的正确运行依赖您的运行环境网络与图数据库GDB实例联通
  • 运行环境需要安装有Go语言环境,推荐使用1.12版本,这也是本文示例使用的版本。

环境准备

  1. go get -u github.com/aliyun/alibabacloud-gdb-go-sdk/gdbclient
  • 获取图数据库GDB连接参数

在’实例管理’->’基本信息’页面,可以查看实例内网地址和内网端口,如果开通外网访问实例,也可以使用外网地址和外网端口

注意 确保运行环境在实例白名单配置的可访问范围内

  1. # 内网环境
  2. host = "${gdbID}.graphdb.rds.aliyuncs.com"
  3. port = 8182
  4. # 外网环境
  5. host = "${gdbID}pub.graphdb.rds.aliyuncs.com"
  6. port = 3734

在’实例管理’->’账号管理’页面,可以查询实例账号信息,如果忘记密码,请’重置密码’

  1. cusername="${username}"
  2. password="${password}"

示例程序

上述GDB SDK中包含有演示程序,以下代码来自其中的演示程序。

  • 新建一个demo目录,并添加测试文件
  1. mkdir gdb_go_demo
  2. cd gdb_go_demo
  3. touch main.go
  • 编写测试代码,运行以下代码时需要图数据库GDB的连接参数,直接以参数提供
  1. package main
  2. import (
  3. "flag"
  4. "log"
  5. goClient "github.com/aliyun/alibabacloud-gdb-go-sdk/gdbclient"
  6. )
  7. var (
  8. host, username, password string
  9. port int
  10. )
  11. func main() {
  12. flag.StringVar(&host, "host", "", "GDB Connection Host")
  13. flag.StringVar(&username, "username", "", "GDB username")
  14. flag.StringVar(&password, "password", "", "GDB password")
  15. flag.IntVar(&port, "port", 8182, "GDB Connection Port")
  16. flag.Parse()
  17. if host == "" || username == "" || password == "" {
  18. log.Fatal("No enough args provided. Please run:" +
  19. " go run main.go -host <gdb host> -username <username> -password <password> -port <gdb port>")
  20. return
  21. }
  22. settings := &goClient.Settings{
  23. Host: host,
  24. Port: port,
  25. Username: username,
  26. Password: password,
  27. }
  28. // connect GDB with auth
  29. client := goClient.NewClient(settings)
  30. // send script dsl with bindings to GDB
  31. bindings := make(map[string]interface{})
  32. bindings["GDB___id"] = "gdb_vertex_test_id"
  33. bindings["GDB___label"] = "gdb_vertex_test_label"
  34. bindings["GDB___PK"] = "name"
  35. bindings["GDB___PV"] = "Jack"
  36. dsl = "g.addV(GDB___label).property(id, GDB___id).property(GDB___PK, GDB___PV)"
  37. results, err = client.SubmitScriptBound(dsl, bindings)
  38. if err != nil {
  39. log.Fatalf("Error while querying: %s\n", err.Error())
  40. }
  41. // get response, add vertex should return a Vertex
  42. for _, result := range results {
  43. v := result.GetVertex()
  44. log.Printf("get vertex[id:%s, label:%s, propLen %d", v.Id(), v.Label(), len(v.Properties()))
  45. // read vertex property
  46. for _, p := range v.VProperties() {
  47. log.Printf(" {PK: %s, PV: %s}", p.PKey(), p.PValue().(string))
  48. }
  49. }
  50. // drop all vertex
  51. _, err = client.SubmitScript("g.V().drop()")
  52. if err != nil {
  53. log.Fatalf("Error while querying: %s\n", err.Error())
  54. }
  55. client.Close()
  56. }

上述代码实现创建连接GDB的client,并发送gremlin操作添加一个点,打印执行结果,最后发送清除所有数据的gremlin操作。

针对client更多的参数配置请参考SDK包中的演示代码,包括连接池,session的支持等。

运行测试程序

将上一节中的GDB连接参数替换下面命令行参数,运行测试代码,正常会有下面输出。

  1. go run main.go -host ${host} -port ${port} -username ${username} -password ${username}
  2. 2019/12/23 14:22:49 get vertex[id:gdb_vertex_test_id, label:gdb_vertex_test_label, propLen 1
  3. 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更新的操作,保证所有操作都成功或失败,不会出现部分更新的情况
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论

-----