Java 的 Datastax DSE 5.0 Graph 中真的不需要 executeGraph() 吗?
executeGraph() is not really needed in Datastax DSE 5.0 Graph with Java?
似乎在这两种方法中都存储了顶点,以后可以正确检索。
常用配置:
DseCluster dseCluster = DseCluster.builder()
.addContactPoint("192.168.1.43")
.build();
DseSession dseSession = dseCluster.connect();
GraphTraversalSource g = DseGraph.traversal(
dseSession, new GraphOptions().setGraphName("graph")
);
方法一:
Vertex v = g.addV("User").property("uuid","testuuid231").next();
方法二:
GraphStatement graphStatement = DseGraph.statementFromTraversal(
g.addV("User").property("uuid","testuuid231")
);
GraphResultSet grs = dseSession.executeGraph(graphStatement.setGraphName("graph"));
Vertex v = grs.one().asVertex() // as(Vertex.class) is not allowed after 1.1
您似乎在使用 java-dse-graph
,对吗?这是一个相对较新的 API(仍处于测试阶段),它允许您在幕后使用 DataStax Enterprise Java 驱动程序使用 Apache Tinkerpop 制作 Gremlin Traversals。
方法 1 的好处是你可以确定你正在为一个有效的遍历形成有效的遍历,尽管你也可以通过 statementFromTraversal
获得这个(你也可以传递 String
或 GraphStatement
到 executeGraph
,此时你不能确定你正在执行有效的遍历)。此外,您可以编写与供应商无关的代码,因为您使用的是 Tinkerpop API 而不是 datastax 驱动程序。好吧,您仍在使用它,但一旦您从 DseSession
.
获得 GraphTraversalSource
就不会直接使用它
方法 2 有一些方法 1 所没有的好处(目前):
- 如果您熟悉 datastax 驱动程序,则可以使用许多您熟悉的相同 API(
ResultSet
、Statement
等)。
- TinkerPop (TINKERPOP-1490) 的异步 API 是最近添加的,我不确定它是否适用于
java-dse-graph
(尚未尝试)。使用 statementFromTraversal
,你可以将生成的 GraphStatement
传递给 DseSession.executeAsync
来做异步。
- DSE Graph 的架构 API 不是 Gremlin 的一部分。因此,您不能单独使用 TinkerPop 更改架构。 JAVA-1061 将引入一个模式 API 以使用
java-dse-graph
执行此操作。在那之前你必须使用 executeGraph(String|GraphStatement)
.
- 您可以使用方法 2 执行完整的 groovy/gremlin 代码。这允许您在一次调用中执行事务管理和执行多个遍历之类的操作,这是您目前无法使用方法 1 执行的操作。
我预计 java-dse-graph
(方法 1)将来会成为与 DSE Graph 交互的更惯用的方式。 statementFromTraversal
提供了一种两全其美的好方法(Apache TinkerPop 的优势 + DataStax java 驱动程序的接口)。
似乎在这两种方法中都存储了顶点,以后可以正确检索。
常用配置:
DseCluster dseCluster = DseCluster.builder()
.addContactPoint("192.168.1.43")
.build();
DseSession dseSession = dseCluster.connect();
GraphTraversalSource g = DseGraph.traversal(
dseSession, new GraphOptions().setGraphName("graph")
);
方法一:
Vertex v = g.addV("User").property("uuid","testuuid231").next();
方法二:
GraphStatement graphStatement = DseGraph.statementFromTraversal(
g.addV("User").property("uuid","testuuid231")
);
GraphResultSet grs = dseSession.executeGraph(graphStatement.setGraphName("graph"));
Vertex v = grs.one().asVertex() // as(Vertex.class) is not allowed after 1.1
您似乎在使用 java-dse-graph
,对吗?这是一个相对较新的 API(仍处于测试阶段),它允许您在幕后使用 DataStax Enterprise Java 驱动程序使用 Apache Tinkerpop 制作 Gremlin Traversals。
方法 1 的好处是你可以确定你正在为一个有效的遍历形成有效的遍历,尽管你也可以通过 statementFromTraversal
获得这个(你也可以传递 String
或 GraphStatement
到 executeGraph
,此时你不能确定你正在执行有效的遍历)。此外,您可以编写与供应商无关的代码,因为您使用的是 Tinkerpop API 而不是 datastax 驱动程序。好吧,您仍在使用它,但一旦您从 DseSession
.
GraphTraversalSource
就不会直接使用它
方法 2 有一些方法 1 所没有的好处(目前):
- 如果您熟悉 datastax 驱动程序,则可以使用许多您熟悉的相同 API(
ResultSet
、Statement
等)。 - TinkerPop (TINKERPOP-1490) 的异步 API 是最近添加的,我不确定它是否适用于
java-dse-graph
(尚未尝试)。使用statementFromTraversal
,你可以将生成的GraphStatement
传递给DseSession.executeAsync
来做异步。 - DSE Graph 的架构 API 不是 Gremlin 的一部分。因此,您不能单独使用 TinkerPop 更改架构。 JAVA-1061 将引入一个模式 API 以使用
java-dse-graph
执行此操作。在那之前你必须使用executeGraph(String|GraphStatement)
. - 您可以使用方法 2 执行完整的 groovy/gremlin 代码。这允许您在一次调用中执行事务管理和执行多个遍历之类的操作,这是您目前无法使用方法 1 执行的操作。
我预计 java-dse-graph
(方法 1)将来会成为与 DSE Graph 交互的更惯用的方式。 statementFromTraversal
提供了一种两全其美的好方法(Apache TinkerPop 的优势 + DataStax java 驱动程序的接口)。