本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置 Gremlin 控制台以连接到 Neptune 数据库实例
Gremlin 控制台允许您在 REPL(read-eval-print 循环)环境中试验 TinkerPop 图表和查询。
安装 Gremlin 控制台并以通常的方式连接到它
您可以使用 Gremlin 控制台连接到远程图形数据库。以下部分将引导您安装和配置 Gremlin 控制台以远程连接到 Neptune 数据库实例。您必须在 Amazon EC2 实例和 Neptune 数据库实例相同的 Virtual Private Cloud (VPC) 中按照这些说明操作。
要获得通过 SSL/TLS 连接到 Neptune 的帮助(这是必需的),请参阅SSL/TLS 配置。
如果您在 Neptune 数据库集群上启用了 IAM 身份验证,请按照中的使用带有签名版本 4 签名的 Gremlin 控制台连接到 Neptune说明安装 Gremlin 控制台,而不是按照此处的说明进行操作。
安装 Gremlin 控制台并连接到 Neptune
-
Gremlin 控制台二进制文件需要 Java 8 或 Java 11。这些指令假设使用的是 Java 11。您可以按如下方式在您的 EC2 实例上安装 Java 11:
-
如果你使用的是 Amazon Linux 2 (AL2)
: sudo amazon-linux-extras install java-openjdk11
-
对于其他发行版,请使用以下任意一种:
sudo yum install java-11-openjdk-devel
或:
sudo apt-get install openjdk-11-jdk
-
-
输入以下内容将 Java 11 设置为 EC2 实例的默认运行时间。
sudo /usr/sbin/alternatives --config java
出现提示时,输入 Java 11 的数字。
-
从 Apache 网站下载相应版本的 Gremlin 控制台。你可以查看你当前正在运行的 Neptune 引擎版本的引擎发行页面,以确定它支持哪个 Gremlin 版本。例如,对于版本 3.5.5,你可以从 Apache Tinkerpop3
网站上将 Gremlin 控制台 下载到你的 EC2 实例上,如下所示: wget https://archive.apache.org/dist/tinkerpop/3.5.5/apache-tinkerpop-gremlin-console-3.5.5-bin.zip
-
解压缩 Gremlin 控制台 zip 文件。
unzip apache-tinkerpop-gremlin-console-3.5.5-bin.zip
-
将目录更改为解压缩的目录。
cd apache-tinkerpop-gremlin-console-3.5.5
-
在提取的目录的
conf
子目录中,创建名为neptune-remote.yaml
的包含以下文本的文件。your-neptune-endpoint
替换为 Neptune 数据库实例的主机名或 IP 地址。方括号 ([ ]
) 是必需的。注意 有关查找 Neptune 数据库实例的主机名的信息,请参阅一连接到Amazon Neptune 终端节点节。
hosts: [
your-neptune-endpoint
] port: 8182 connectionPool: { enableSsl: true } serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }} -
在终端中,导航到 Gremlin 控制台目录 (
apache-tinkerpop-gremlin-console-3.5.5
),然后输入以下命令来运行 Gremlin 控制台。bin/gremlin.sh
您应看到以下输出:
\,,,/ (o o) -----oOOo-(3)-oOOo----- plugin activated: tinkerpop.server plugin activated: tinkerpop.utilities plugin activated: tinkerpop.tinkergraph gremlin>
您现在位于
gremlin>
提示符处。将在此提示符处输入剩余步骤。 -
在
gremlin>
提示符处,输入以下内容以连接到 Neptune 数据库实例。:remote connect tinkerpop.server conf/neptune-remote.yaml
-
在
gremlin>
提示符处,输入以下命令以切换到远程模式。这会将所有 Gremlin 查询发送到远程连接。:remote console
-
输入以下命令以将查询发送到 Gremlin 图形。
g.V().limit(1)
-
完成后,输入以下命令以退出 Gremlin 控制台。
:exit
使用分号 (;
) 或换行符 (\n
) 分隔每个语句。
在最后遍历之前的每个遍历必须以要执行的 next()
结尾。仅返回最后遍历中的数据。
有关 Gremlin Neptune 实现的更多信息,请参阅 “”Amazon Neptune 符合 Gremlin 标准。
连接 Gremlin 控制台的另一种方式
普通连接方法的缺点
连接到 Gremlin 控制台的最常见方法是上面解释的方式,在gremlin>
提示符处使用这样的命令:
gremlin> :remote connect tinkerpop.server conf/
(file name)
.yaml gremlin> :remote console
这很好用,可以让你向Neptune 发送查询。但是,它使Groovy脚本引擎脱离了循环,因此Neptune 将所有查询视为纯Gremlin。这意味着以下查询表单失败:
gremlin> 1 + 1 gremlin> x = g.V().count()
以这种方式连接时,最接近使用变量的方法是使用控制台维护的result
变量并使用发送查询:>
,如下所示:
gremlin> :remote console ==>All scripts will now be evaluated locally - type ':remote console' to return to remote mode for Gremlin Server - [krl-1-cluster.cluster-ro-cm9t6tfwbtsr.us-east-1.neptune.amazonaws.com/172.31.19.217:8182] gremlin> :> g.V().count() ==>4249 gremlin> println(result) [result{object=4249 class=java.lang.Long}] gremlin> println(result['object']) [4249]
另一种连接方式
你也可以用不同的方式连接到 Gremlin 主机,你可能会觉得更好,比如这样:
gremlin> g = traversal().withRemote('conf/neptune.properties')
这里neptune.properties
采用这种形式:
gremlin.remote.remoteConnectionClass=org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection gremlin.remote.driver.clusterFile=conf/my-cluster.yaml gremlin.remote.driver.sourceName=g
my-cluster.yaml
文件应该如下所示:
hosts: [
my-cluster-abcdefghijk.us-east-1.neptune.amazonaws.com
] port: 8182 serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: false } } connectionPool: { enableSsl: true }
像这样配置 Gremlin 控制台连接可以让你成功地进行以下类型的查询:
gremlin> 1+1 ==>2 gremlin> x=g.V().count().next() ==>4249 gremlin> println("The answer was ${x}") The answer was 4249
你可以避免显示结果,如下所示:
gremlin> x=g.V().count().next();[] gremlin> println(x) 4249
所有常用的查询方式(不包括终端步骤)继续有效。例如:
gremlin> g.V().count() ==>4249
您甚至可以使用该g.io().read()