gpt4 book ai didi

java - Gremlin 只读事务支持

转载 作者:行者123 更新时间:2023-11-30 05:57:45 25 4
gpt4 key购买 nike

我正在尝试为 Gremlin 客户端配置一个事务,该事务不允许任何变异查询(只读)。

我知道这在 JanusGraph 或 Titan 的 API 中是可能的(使用 buildTransaction() 作为 readOnly()),但是对于 TinkerPop 或 Neptune,我还没有找到类似的东西。

我正在使用基于java脚本的客户端( session ):

Cluster cluster = Cluster.open();
Client client = cluster.connect('SessionID');
String mutatingQuery = "g.addV('Test')";
client.submit("g.tx().open()");
client.submit(mutatingQuery); // This should fail.
client.submit("g.tx().commit()");

我知道您可以从服务器端限制这些类型的查询。但这也可以从客户端实现吗?我也不确定这是否是解决此问题的正确方法。

编辑:我通过提交“脚本”通过 WebSocket 与 Gremlin 服务器远程通信。
在 Java 中,我将集群配置为:

Cluster cluster = 
Cluster.build().addContactPoint(url).port(port).create();

然后使用客户端提交查询:

Client c= cluster.connect().init();
c.submit(query);

我知道 Graph 支持的 ReadOnlyStrategy。但我还没有找到通过上述方法启用它的方法,只能从服务器配置脚本中启用它。是否有另一种方法来限制提交的“查询”?

我的服务器配置了这个默认的 groovy 脚本:

globals << [g : graph.traversal()] // Could have used readOnly strategy here.

我的客户正在发送这样的查询:

c.submit("g.addV('test')"); // this should fail

有什么想法吗?

最佳答案

有几种使用 Neptune 的方法可以为给定的用例强制执行只读样式语义。一种是使用 TinkerPop ReadOnly 策略。另一种是只允许用户/应用程序访问集群的读取端点,而不是写入端点。

您能详细介绍一下您的具体用例吗?

更新:以下是使用 Java 从客户端应用程序创建 ReadOnlyStrategy 的示例:

// Experiment with the ReadOnlyStrategy
g2 = g.withStrategies(ReadOnlyStrategy.instance());
try
{
g2.addV("shouldfail").iterate();
}
catch(Exception e)
{
System.out.println("Unable to add vertex as expected");
}

干杯,开尔文

关于java - Gremlin 只读事务支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52880707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com