Gremlin Console
本文介绍如何基于Gremlin控制台连接和操作图数据库GDB。
进行以下操作时,请确保图数据库GDB的实例与您的ECS虚拟机处于同一个Virtual Private Cloud(VPC)网络环境。
环境准备 (以CentOS示意)
1、 Gremlin控制台需要Java 8,使用前请安装Java 8
sudo yum install java-1.8.0-devel
2、 如果您的ECS机器上有多个Java版本,请将Java8设置为默认运行
sudo /usr/sbin/alternatives --config java
共有 4 个提供“java”的程序。
选项 命令
-----------------------------------------------
*+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/java)
2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64-debug/jre/bin/java)
3 java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.191-2.6.15.4.el7_5.x86_64/jre/bin/java)
4 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
3、 从Apache Tinkerpop官方网站下载最新版本Gremlin控制台
wget https://archive.apache.org/dist/tinkerpop/3.4.2/apache-tinkerpop-gremlin-console-3.4.2-bin.zip
4、 解压并进入apache-tinkerpop-gremlin-console-3.4.2目录
unzip apache-tinkerpop-gremlin-console-3.4.2-bin.zip
cd apache-tinkerpop-gremlin-console-3.4.2
5、 创建conf/gdb-remote.yaml文件,该文件为Gremlin控制台与GDB图数据库建立连接的配置文件
- 将
${your-gdb-endpoint}
改为您的图数据库GDB实例的域名 - 将
${username}
改为您的图数据库GDB实例的用户名 - 将
${password}
改为您的图数据库GDB实例的密码
hosts: [ ${your_gdb_endpoint} ]
port: 8182
username: ${username}
password: ${password}
serializer: {
className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0,
config: { serializeResultToString: true }
}
建立连接
1、 在Gremlin控制台主目录中输入以下命令启动控制台
[root@iz2ze30qqhwn3ba5mu2qgiz apache-tinkerpop-gremlin-console-3.4.0]# ./bin/gremlin.sh
\,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin>
2、 连接到GDB图数据库实例
gremlin> :remote connect tinkerpop.server conf/gdb-remote.yaml
==>Configured iz2ze30qqhwn3ba5mu2qgiz/172.17.6.2:8182
正常情况下,这里会显示当前Gremlin控制台所连接的GDB图数据库实例的Host和Port。
3、 切换到远程模式,此后您在Grmlin控制台输入的所有DSL均将发向远端的GDB图数据库实例
gremlin> :remote console
==>All scripts will now be sent to Gremlin Server - [iz2ze30qqhwn3ba5mu2qgiz/172.17.6.2:8182]
- type ':remote console' to return to local mode
dsl范例
- 控制台下与GDB数据库实例建立好连接之后,可以进行一些列dsl操作,下面提供一些样例dsl.
- 图结构链接 http://tinkerpop.apache.org/docs/current/reference/#traversal
删除指定label的点、边
g.E().hasLabel('gdb_sample_knows').drop()
g.E().hasLabel('gdb_sample_created').drop()
g.V().hasLabel('gdb_sample_person').drop()
g.V().hasLabel('gdb_sample_software').drop()
添加顶点,为其设置id、property
g.addV('gdb_sample_person').property(id, 'gdb_sample_marko').property('age', 28).property('name', 'marko')
g.addV('gdb_sample_person').property(id, 'gdb_sample_vadas').property('age', 27).property('name', 'vadas')
g.addV('gdb_sample_person').property(id, 'gdb_sample_josh').property('age', 32).property('name', 'josh')
g.addV('gdb_sample_person').property(id, 'gdb_sample_peter').property('age', 35).property('name', 'peter')
g.addV('gdb_sample_software').property(id, 'gdb_sample_lop').property('lang', 'java').property('name', 'lop')
g.addV('gdb_sample_software').property(id, 'gdb_sample_ripple').property('lang', 'java').property('name', 'ripple')
修改(或新增) age 属性
g.V('gdb_sample_marko').property('age', 29)
建立关系,设置属性 weight
g.addE('gdb_sample_knows').from(V('gdb_sample_marko')).to(V('gdb_sample_vadas')).property('weight', 0.5f)
g.addE('gdb_sample_knows').from(V('gdb_sample_marko')).to(V('gdb_sample_josh')).property('weight', 1.0f)
g.addE('gdb_sample_created').from(V('gdb_sample_marko')).to(V('gdb_sample_lop')).property('weight', 0.4f)
g.addE('gdb_sample_created').from(V('gdb_sample_josh')).to(V('gdb_sample_lop')).property('weight', 0.4f)
g.addE('gdb_sample_created').from(V('gdb_sample_josh')).to(V('gdb_sample_ripple')).property('weight', 1.0f)
g.addE('gdb_sample_created').from(V('gdb_sample_peter')).to(V('gdb_sample_lop')).property('weight', 0.2f)
查询所有点/指定label的点数量
g.V().count()
g.V().hasLabel('gdb_sample_person').count()
查询指定条件的顶点 (>29岁的人, 按name降序排列所有人)
g.V().hasLabel('gdb_sample_person').has('age', gt(29))
g.V().hasLabel('gdb_sample_person').order().by('name', decr)
关联查询(获取 marko 认识的人, marko认识的人created的software)
g.V('gdb_sample_marko').outE('gdb_sample_knows').inV().hasLabel('gdb_sample_person')
g.V('gdb_sample_marko').outE('gdb_sample_knows').inV().hasLabel('gdb_sample_person').outE('gdb_sample_created').inV().hasLabel('gdb_sample_software')
删除关系、顶点
g.V('gdb_sample_marko').outE('gdb_sample_knows').where(inV().has(id, 'gdb_sample_josh')).drop()
g.V('gdb_sample_marko').drop()
- 这里您可以进行其他更多测试,详细的Gremlin查询语句可以参考TinkerPop的Gremlin文档。
- 注意: 使用分号
;
或换行符\n
分隔每个语句。
退出Gremlin控制台
gremlin> :exit
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论