有没有办法像 OrientDB 一样只
drop()
JanusGraph 中的所有顶点?
让我说我不知道自己在做什么,而且我是 JanusGraph 和 Tinkerpop-Gremlin 的新手。 我绝不认为自己是专家,甚至不擅长图形数据库,也不认为自己与 Stack Overflow 有长期一致的历史。 请原谅我对一些细节的无知,并在评论中让我知道我可以改进的地方。
在 JanusGraph 中,我可以用
iterate()
删除所有顶点,随着这个终止符递增,它以某种方式处理它自己的 Transaction tx
。
JanusGraph janusGraph = JanusGraphFactory.build().set("storage.backend", "cql").set("storage.hostname", "localhost:9042").open();
GraphTraversalSource g = janusGraph.traversal();
logger.info("g.V().count().next():\t" + g.V().count().next());
g.V().drop().iterate();
logger.info("g.V().count().next():\t" + g.V().count().next());
但在 OrientDB 中,我可以直接删除所有顶点,而无需(看似)重复我的方式。
OrientGraph orientGraph = OrientGraph.open(configuration);
GraphTraversalSource g = orientGraph.traversal();
g.V().drop();
orientGraph.commit();
我尝试用 JanusGraph 来做这个,但是
g.V().count().next()
读取的值和以前一样。
JanusGraph janusGraph = JanusGraphFactory.build().set("storage.backend", "cql").set("storage.hostname", "localhost:9042").open();
GraphTraversalSource g = janusGraph.traversal();
//Transaction tx = janusGraph.tx();
JanusGraphManagement janusGraphManagement = janusGraph.openManagement();
logger.info("g.V().count().next():\t" + g.V().count().next());
g.V().drop();
logger.info("g.V().count().next():\t" + g.V().count().next());
//tx.commit();
janusGraphManagement.commit();
为什么我不能用 JanusGraph 做我在 OrientDB 上做的同样的事情?
两者都在其所有层下使用 Tinkerpop3-Gremlin-Transactions。
当我循环开发时,删除所有 JanusGraph 顶点的更快方法是什么?
这是一个测试类,以表明我在提问之前一直在研究这个问题。
public class Test3 {
private static final Logger logger = LogManager.getLogger(Main.class);
public static void main(String[] args) {
JanusGraph janusGraph = JanusGraphFactory.build().set("storage.backend", "cql").set("storage.hostname", "localhost:9042").open();
GraphTraversalSource g = janusGraph.traversal();
logger.info("g.V().count().next():\t" + g.V().count().next());
g.V().drop().iterate();
logger.info("g.V().count().next():\t" + g.V().count().next());
JanusGraphManagement janusGraphManagement = janusGraph.openManagement();
PropertyKey propertyKey = janusGraphManagement.getOrCreatePropertyKey("_id");
if (!janusGraphManagement.containsGraphIndex("_id"))
janusGraphManagement.buildIndex("_id", Vertex.class).addKey(propertyKey).buildCompositeIndex();
janusGraphManagement.commit();
JanusGraphVertex janusGraphVertex = janusGraph.addVertex();
janusGraphVertex.property("test", "test1");
janusGraph.tx().commit();
janusGraphVertex = janusGraph.addVertex();
janusGraphVertex.property("test", "test2");
janusGraph.tx().commit();
GraphTraversal<Vertex, Vertex> graphTraversal = g.V();
while (graphTraversal.hasNext()) {
Vertex vertex = graphTraversal.next();
logger.info(vertex.property("test"));
}
janusGraph.close();
}
}
如果你有一个小图
g.V().drop()
应该没问题。但是你的commit
看起来不对。您需要 g.tx().commit()
而不是来自管理 API 的提交。
如果您使用 Cassandra 作为后端,特别是如果您有一个大图,并且不再需要该图,只需删除整个键空间并重新开始。这应该比删除所有顶点快得多。