我正在尝试为 Gremlin 客户端配置一个不允许任何变异查询(只读)的事务。
我知道这在 JanusGraph 或 Titan 及其 API 中是可能的(使用 buildTransaction() 作为 readOnly()),但是对于 TinkerPop 或 Neptune,我没有发现任何类似的东西。
我正在使用基于 java 脚本的客户端(会话):
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
有任何想法吗?