使用 Bolt 协议向 Neptune 进行 OpenPher 查询 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Bolt 协议向 Neptune 进行 OpenPher 查询

螺栓是一种面向语句的客户端/服务器协议,最初由 Neo4J 开发,并根据知识共享 3.0 进行许可署名-相同方式共享license. 它是客户驱动的,这意味着客户始终启动消息交换。

要使用 Neo4J 的 Bolt 驱动程序连接到 Neptune,只需使用bolt+sURI 方案。如果您有单个 Neptune 实例正在运行,请使用 read_write 终端节点。如果正在运行多个实例,则建议使用两个驱动程序,一个用于写入器,另一个用于所有只读副本。如果您只有默认的两个终端节点,一个 read_write 和 read_only 驱动程序就足够了,但是如果您还有自定义终端节点,请考虑为每个端点创建一个驱动程序实例。

Neptune 支持 Bolt 消息规范版本的最新 Neo4J 驱动程序:4.0.34.1.44.2.74.3.3.

有关使用 Bolt 驱动程序的各种语言中 OpenPher 查询的示例,请参阅 NEO4J司机和语言指南文档中)。

使用 Bolt 与 Java 连接到 Neptune

你可以从 Maven 下载你想使用的任何版本的驱动程序MVN 存储库,或者可以将这个依赖项添加到你的项目中:

<dependency> <groupId>org.neo4j.driver</groupId> <artifactId>neo4j-java-driver</artifactId> <version>4.3.3</version> </dependency>

然后,要使用这些 Bolt 驱动程序之一在 Java 中连接到 Neptune,请使用如下代码为集群中的主/写入器实例创建驱动程序实例:

import org.neo4j.driver.Driver; import org.neo4j.driver.GraphDatabase; Driver driver = GraphDatabase.driver("bolt+s://(your cluster endpoint URL):8182");

如果你有一个或多个读取器副本,你也可以使用这样的代码为它们创建驱动程序实例:

Driver read_only_driver = GraphDatabase.driver("bolt+s://(your cluster endpoint URL):8182"; Driver read_only_driver_with_timeout = GraphDatabase.driver("bolt+s://(your cluster endpoint URL):8182", Config.builder().withConnectionTimeout(30, TimeUnit.SECONDS).build());

如果您有自定义终端节点,那么为每个端点创建一个驱动程序实例也可能是值得的。

使用 Bolt 的 Python OpenPher 查询示例

以下是如何使用 Bolt 在 Python 中进行 OpenPher 查询:

python -m pip install neo4j
from neo4j import GraphDatabase
from neo4j import GraphDatabase uri = "bolt+s://(your cluster endpoint URL):8182" driver = GraphDatabase.driver(uri, auth=("", "")

或者,使用加密:

from neo4j import GraphDatabase uri = "bolt+s://(your cluster endpoint URL):8182" driver = GraphDatabase.driver(uri, auth=("", "", encrypted=True)

请注意,auth忽略参数。然后你可以像这样使用你的驱动程序实例:

def create_friend_of(tx, name, friend): tx.run(f"MATCH (a:Person) WHERE a.name = '" + friend + "'" "CREATE (a)-[:KNOWS]->(:Person {name: $friend})", name=name, friend=friend) with driver.session() as session: session.write_transaction(create_friend_of, "Alice", "Bob") with driver.session() as session: session.write_transaction(create_friend_of, "Alice", "Carl") driver.close()

使用 Bolt 的 .NET opensPher 查询示例

以下是如何使用 Bolt 在 .NET 中进行 OpenPher 查询:

Install-Package Neo4j.Driver-4.3.0
Using Neo4j.Driver-4.3.0; var driver = GraphDatabase.Driver("bolt+s://(your cluster endpoint URL):8182", AuthTokens.Basic("", "")); public class HelloWorldExample : IDisposable { private bool _disposed = false; ~HelloWorldExample() => Dispose(false); public void PrintGreeting(string message) { using (var session = driver.Session()) { var greeting = session.WriteTransaction(tx => { var result = tx.Run("CREATE (a:Greeting) " + "SET a.message = '" + message + "'" "RETURN a.message + ', from node ' + id(a)", new {message}); return result.Single()[0].As<string>(); }); Console.WriteLine(greeting); } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (_disposed) return; _disposed = true; } public static void Main() { using (var greeter = new HelloWorldExample( )) { greeter.PrintGreeting("hello, world"); } } }

Neptune 中的螺栓连接行为

以下是关于 Neptune Bolt 连接的一些事项:

  • 由于 Bolt 连接是在 TCP 层创建的,因此不能使用应用程序负载均衡器在他们面前,就像使用 HTTP 端点一样。

  • Neptune 用于 Bolt 连接的端口是8182.

  • 根据传递给它的 Bolt 序言,Neptune 服务器选择合适的最高版本(1、2、3 或 4.2)。

  • 客户端可以在任何时间点打开的与 Neptune 服务器的最大连接数为 1,000 个。

  • 如果客户端未在查询后关闭连接,则可以使用此连接执行下一个查询。

  • 但是,如果连接空闲 20 分钟,服务器将自动关闭连接。

  • 如果启用了 IAM 身份验证,则 Bolt 连接由于其他原因尚未关闭,则 Bolt 连接在建立 10 天后始终断开连接。

  • 如果客户端发送查询以通过连接执行而没有消耗先前查询的结果,则会丢弃新查询。要放弃之前的结果,客户端必须通过连接发送重置消息。

  • 在给定连接上,一次只能创建一个交易。

  • 如果在事务过程中发生异常,Neptune 服务器将回退该事务并关闭连接。在此示例中,驱动程序为下一个查询创建一个新连接。

  • 请注意,会话不是线程安全的。多个并行操作必须使用多个单独的会话。

重要

特殊反馈链接:  如果您在此 Neptune 实验室模式版本中使用 OpenPher 遇到任何问题或者有建议,请发送电子邮件给我们. 我们会随时为您提供帮助。