java - Titan getVertices() 函数永无止境

标签 java titan

我有以下代码,使用 Titan 创建图形数据库:

public class TitanMassiveInsertion {

private TitanGraph titanGraph = null;
private BatchGraph<TitanGraph> batchGraph = null;

public static void main(String args[]) {
    TitanMassiveInsertion test = new TitanMassiveInsertion();
    test.startup("data/titanDB");
    test.createGraph("data/flickrEdges.txt");
    test.shutdown();
}
public void startup(String titanDBDir) {
    System.out.println("The Titan database is now starting . . . .");
    BaseConfiguration config = new BaseConfiguration();
    Configuration storage = config.subset(GraphDatabaseConfiguration.STORAGE_NAMESPACE);
    storage.setProperty(GraphDatabaseConfiguration.STORAGE_BACKEND_KEY, "local");
    storage.setProperty(GraphDatabaseConfiguration.STORAGE_DIRECTORY_KEY, titanDBDir);
    storage.setProperty(GraphDatabaseConfiguration.STORAGE_BATCH_KEY, true);
    Configuration index = storage.subset(GraphDatabaseConfiguration.INDEX_NAMESPACE).subset("nodes");
    index.setProperty(INDEX_BACKEND_KEY, "elasticsearch");
    index.setProperty("local-mode", true);
    index.setProperty("client-only", false);
    index.setProperty(STORAGE_DIRECTORY_KEY, titanDBDir + File.separator + "es");

    titanGraph = TitanFactory.open(config);
    titanGraph.makeKey("nodeId").dataType(String.class).indexed(Vertex.class).make();
    titanGraph.makeLabel("similar").oneToOne().make();
    titanGraph.commit();
    batchGraph = new BatchGraph<TitanGraph>(titanGraph, VertexIDType.STRING, 1000);
    batchGraph.setVertexIdKey("nodeId");
    batchGraph.setLoadingFromScratch(true);

}

public void shutdown() {
    System.out.println("The Titan database is now shuting down . . . .");
    if(titanGraph != null) {
        batchGraph.shutdown();
        titanGraph.shutdown();
        batchGraph = null;
        titanGraph = null;
    }
}

public void createGraph(String datasetDir) {
    System.out.println("Creating the Titan database . . . .");      
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(datasetDir)));
        String line;
        int lineCounter = 1;
        int nodeCounter = 0;
        Vertex srcVertex, dstVertex;
        while((line = reader.readLine()) != null) {
            if(lineCounter > 4) {
                String[] parts = line.split("\t");

                srcVertex = batchGraph.getVertex(parts[0]);
                if(srcVertex == null) {
                    srcVertex = batchGraph.addVertex(parts[0]);
                    srcVertex.setProperty("nodeId", parts[0]);
                    nodeCounter++;
                }
                dstVertex = batchGraph.getVertex(parts[1]);
                if(dstVertex == null) {
                    dstVertex = batchGraph.addVertex(parts[1]);
                    dstVertex.setProperty("nodeId", parts[1]);
                    nodeCounter++;
                }
                Edge edge = batchGraph.addEdge(null, srcVertex, dstVertex, "similar");

                //System.out.println(edge);
                System.out.println(nodeCounter);
            }
            lineCounter++;
        }
        reader.close();
    }
    catch(IOException ioe) {
        ioe.printStackTrace();
    }
}
}

创建图形数据库后,我想测试我的代码以查看一切正常,因此我尝试使用以下测试代码打印顶点:

TitanGraph graph = TitanFactory.open("data/titanDB");
    for(Vertex v : graph.getVertices()) {
        System.out.println(v.getProperty("nodeId"));
    }
    graph.shutdown();

但它什么也没打印,而且似乎在无限循环中堆叠。我也尝试过 Vertex v : graph.query().vertices(),正如教程所示,但问题存在。另一方面,当我 System.out.println(graph.getVertices("nodeId", "2604051056")); 时,我得到了正确的输出。 getVertices() 函数有问题吗?

最佳答案

您正在使用“本地”存储后端,默认情况下意味着 BerkeleyJE。 BerkeleyJE 默认启用事务,这意味着它必须跟踪它接触的每个数据元素以提供正确的隔离。然而,当您基本上通过顶点扫描接触所有数据时,这会很昂贵。

因此,请尝试禁用事务

storage.transactions = false

关于java - Titan getVertices() 函数永无止境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20398878/

相关文章:

java - Apache Tomcat 访问错误 : 404 -- Not Found

json - Titan DB 图到 JSON

java - 无法从 JSON 格式的 gremlin 客户端检索查询结果

Javax.swing 计时器重复正常,但 ActionListener 不执行任何操作

java - 如何根据标签文本对标签数组列表进行排序? JavaFX

java - PNG 图像在 Itext7 中被损坏

java - 使用 Spring 或单独的库/模式实现数据库访问?

cassandra - JanusGraph + Cassandra(一般问题)

titan - 如何排除 gremlin titan 中的某些顶点

java - Peapod : Impl is not abstract and does not override abstract method start() in peapod. FramedVertexTraversal