跳转到主要内容

Gremlin-Console

Gremlin-Console 是 TinkerPop 的交互式客户端,支持离线操作图,也可以连接 Server 提交查询。

  • 单机离线调用模式
  • Client/Server 请求模式

Gremlin-Console 适合学习和调试。生产应用建议使用对应语言的客户端。

1 单机离线调用模式

Server 发行包内的 Console 已包含 HugeGraph-Core JAR 和插件,可以直接执行 Groovy 脚本操作图,无需启动 Server。

先在 hugegraph.properties 中配置 Memory 后端。其他后端可能需要额外初始化。

1backend=memory
2serializer=text

然后运行示例脚本。

 1> ./bin/gremlin-console.sh -- -i scripts/example.groovy
 2
 3         \,,,/
 4         (o o)
 5-----oOOo-(3)-oOOo-----
 6plugin activated: HugeGraph
 7plugin activated: tinkerpop.server
 8plugin activated: tinkerpop.utilities
 9plugin activated: tinkerpop.tinkergraph
10main dict load finished, time elapsed 644 ms
11model load finished, time elapsed 35 ms.
12>>>> query all vertices: size=6
13>>>> query all edges: size=6
14gremlin> 

这里的 -- 会被 getopts 解析为最后一个 option,这样后面的 options 就可以传入 Gremlin-Console 进行处理了。-i 代表 Execute the specified script and leave the console open on completion,更多的选项可以参考 Gremlin-Console 的源代码。

其中 example.groovy 是 scripts 目录下的一个示例脚本,该脚本插入了一些数据,并在最后查询图中顶点和边的数量。

脚本执行后,可以继续输入 Gremlin 语句。

 1gremlin> g.V()
 2==>v[2:lop]
 3==>v[1:josh]
 4==>v[1:marko]
 5==>v[1:peter]
 6==>v[1:vadas]
 7==>v[2:ripple]
 8gremlin> g.E()
 9==>e[S1:josh>2>>S2:lop][1:josh-created->2:lop]
10==>e[S1:josh>2>>S2:ripple][1:josh-created->2:ripple]
11==>e[S1:marko>1>>S1:josh][1:marko-knows->1:josh]
12==>e[S1:marko>1>>S1:vadas][1:marko-knows->1:vadas]
13==>e[S1:marko>2>>S2:lop][1:marko-created->2:lop]
14==>e[S1:peter>2>>S2:lop][1:peter-created->2:lop]
15gremlin> 

更多的 Gremlin 语句请参考 Tinkerpop 官网。

2 Client/Server 请求模式

Gremlin-Console 通过 WebSocket 连接 HugeGraph-Server。使用与 Server 同版本发行包中的 Console 和 conf/remote.yaml, 保留文件中的序列化器配置,只修改地址,以及启用鉴权时需要的凭据。旧版配置可能引用已经不存在的序列化器类。

  1. 准备连接配置并启动 Server。

    检查 conf/gremlin-server.yaml 中的 host、port。默认的 WsAndHttpChannelizer 同时处理 WebSocket 和 HTTP 请求,无需修改。 conf/remote.yaml 中的 hosts 应填写 Console 能访问的 Server 地址,port 应与 Gremlin 端口一致(默认为 8182,不是 REST 端口 8080)。 按照快速上手启动 Server。

    当前 master 配置使用 GraphBinary V1 和 HugeGraph 类型注册器。

    1hosts: [localhost]
    2port: 8182
    3serializer:
    4  className: org.apache.tinkerpop.gremlin.util.ser.GraphBinaryMessageSerializerV1
    5  config:
    6    serializeResultToString: false
    7    builder: org.apache.hugegraph.io.HugeGraphTypeSerializerRegistryBuilder
    8    ioRegistries: [org.apache.hugegraph.io.HugeGraphIoRegistry]

    如果 Server 开启了鉴权,在同一个文件中填写实际凭据。

    1username: admin
    2password: "replace-with-your-password"

    随包的 remote-objects.yaml 和 gremlin-driver-settings.yaml 使用相同的序列化器配置;使用这些文件时也要保持一致。

  2. 从 Server 发行包目录启动 Console,并创建带 traversal 别名的客户端。

    1./bin/gremlin-console.sh

    Server 端将默认图空间下的图绑定为 DEFAULT-hugegraph,其 traversal source 绑定为 __g_DEFAULT-hugegraph。 由于连字符 - 在 Groovy 中不能直接用作变量名,通过 Java Driver 连接时,使用 .alias(['g': '__g_DEFAULT-hugegraph']) 将其映射为 g。

    1import org.apache.tinkerpop.gremlin.driver.Cluster
    2cluster = Cluster.open('conf/remote.yaml')
    3client = cluster.connect().alias(['g': '__g_DEFAULT-hugegraph'])
  3. 通过客户端提交查询。

    1client.submit('g.V().count()').all().get()[0].object
    2client.submit('g.V().toList().size()').all().get()[0].object

    若启动 Server 时预加载了示例图,两条查询均返回 6(其他图返回其实际顶点数)。 通过 Driver 的 client.submit() 提交脚本时,无需在语句前加 :> 前缀。

  4. 使用结束后关闭客户端和集群连接。

    1client.close()
    2cluster.close()

此外,也可以使用 Gremlin Console 内置的 :remote 命令连接:

1:remote connect tinkerpop.server conf/remote.yaml
2// 通过 Console 远程连接提交脚本时,前缀使用 :>
3:remote close

使用 :remote 连接时,以 :> 开头的语句会被发送至远端 Server 执行,普通语句则在 Console 本地执行。

更多用法见 TinkerPop Gremlin Console 参考。