是否有更好的方法来删除 JanusGraph 中的顶点?

问题描述 投票:0回答:1

有没有办法像 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();
    }
}
gremlin janusgraph java-17 graph-traversal orientdb3.0
1个回答
0
投票

如果你有一个小图

g.V().drop()
应该没问题。但是你的
commit
看起来不对。您需要
g.tx().commit()
而不是来自管理 API 的提交。

如果您使用 Cassandra 作为后端,特别是如果您有一个大图,并且不再需要该图,只需删除整个键空间并重新开始。这应该比删除所有顶点快得多。

© www.soinside.com 2019 - 2024. All rights reserved.