图不支持事务
Graph does not support transactions
我已经在 gremlin 上尝试了两个交易案例-java。
第一个案例:
@Bean
public Cluster gremlinCluster()
{
return Cluster.build()
.addContactPoint(GREMLIN_ENDPOINT)
.port(GREMLIN_PORT)
.enableSsl(GREMLIN_SSL_ENABLED)
.create();
}
...
@Bean
public GraphTraversalSource gremlinGraph(Cluster gremlinCluster)
{
return traversal().withRemote(DriverRemoteConnection.using(gremlinCluster, "g"));
}
...
GraphTraversalSource graph;
...
final Transaction tx = graph.tx();
...
它给出错误:java.lang.UnsupportedOperationException: Graph does not support transactions
第二个案例:
String sessionId = UUID.randomUUID().toString();
Client client = cluster.connect(sessionId);
client.submit("g.addV('App').property('appId', 1)");
client.submit("graph error query");
client.close();
...
graph.V().has("App", "appId", 1).next(); => It gives value
在第二种情况下,预期情况是:
- 回滚将起作用。
- return
graph.V().has("App", "appId", 1).next();
. 无结果
但是,回滚不起作用。
有什么建议吗?如何在gremlin-java?
上实现交易
关于你的第一个案例,请问你用的是什么图数据库?例如,如果 graph
是一个 TinkerGraph,那么您可以预料到该错误,因为它根本不支持它们:
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> graph.features().graph().supportsTransactions()
==>false
gremlin> g = traversal().withRemote(DriverRemoteConnection.using("localhost",8182,"g"))
==>graphtraversalsource[emptygraph[empty], standard]
gremlin> g.graph
==>emptygraph[empty]
gremlin> g.graph.features().graph().supportsTransactions()
==>false
对于第二种情况,您在会话中发送脚本。如果您使用的图表不支持事务(即在第一种情况下给您错误的同一图表),那么我怀疑您的更改是在执行第一个请求时有效提交的,因为没有事务到打开或关闭。当然,值得注意的是,对于支持事务的图形,您可以使用 section.
中描述的会话管理事务来实现按请求自动提交功能。
您可能会发现此 entire section 参考文档有助于理解不同使用环境中的各种交易模式。
我已经在 gremlin 上尝试了两个交易案例-java。
第一个案例:
@Bean
public Cluster gremlinCluster()
{
return Cluster.build()
.addContactPoint(GREMLIN_ENDPOINT)
.port(GREMLIN_PORT)
.enableSsl(GREMLIN_SSL_ENABLED)
.create();
}
...
@Bean
public GraphTraversalSource gremlinGraph(Cluster gremlinCluster)
{
return traversal().withRemote(DriverRemoteConnection.using(gremlinCluster, "g"));
}
...
GraphTraversalSource graph;
...
final Transaction tx = graph.tx();
...
它给出错误:java.lang.UnsupportedOperationException: Graph does not support transactions
第二个案例:
String sessionId = UUID.randomUUID().toString();
Client client = cluster.connect(sessionId);
client.submit("g.addV('App').property('appId', 1)");
client.submit("graph error query");
client.close();
...
graph.V().has("App", "appId", 1).next(); => It gives value
在第二种情况下,预期情况是:
- 回滚将起作用。
- return
graph.V().has("App", "appId", 1).next();
. 无结果
但是,回滚不起作用。
有什么建议吗?如何在gremlin-java?
上实现交易关于你的第一个案例,请问你用的是什么图数据库?例如,如果 graph
是一个 TinkerGraph,那么您可以预料到该错误,因为它根本不支持它们:
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> graph.features().graph().supportsTransactions()
==>false
gremlin> g = traversal().withRemote(DriverRemoteConnection.using("localhost",8182,"g"))
==>graphtraversalsource[emptygraph[empty], standard]
gremlin> g.graph
==>emptygraph[empty]
gremlin> g.graph.features().graph().supportsTransactions()
==>false
对于第二种情况,您在会话中发送脚本。如果您使用的图表不支持事务(即在第一种情况下给您错误的同一图表),那么我怀疑您的更改是在执行第一个请求时有效提交的,因为没有事务到打开或关闭。当然,值得注意的是,对于支持事务的图形,您可以使用 section.
中描述的会话管理事务来实现按请求自动提交功能。您可能会发现此 entire section 参考文档有助于理解不同使用环境中的各种交易模式。