5

在进行了一些小的修改后,我尝试了这里给出的示例——主要是我添加了一个没有匹配的 where 子句——用于实验目的。

在我的系统(1.9.M04 - java 6u43 - ubuntu 12.04 - AMD phenom II -X6 1090T )上的简单查询

数据库中只有 1 个节点(也是嵌入的)需要 262 毫秒。显然出了点问题。可能是什么问题呢 ?

谢谢

public void test()
    {
        GraphDatabaseService db = g = new GraphDatabaseFactory().newEmbeddedDatabase("./neo4j1test" );

        long id;
        Transaction tx = db.beginTx();
        try
        {
            Node refNode = db.createNode();
            id = refNode.getId();
            refNode.setProperty( "name", "reference node" );
            tx.success();
        }
        finally
        {
            tx.finish();
        }


        ExecutionEngine engine = new ExecutionEngine( db );
        ExecutionResult result = engine.execute( "start n=node("+id+") where ( n.name = \"reference node\") return n.name" );
        long time = System.currentTimeMillis();
        result = engine.execute( "start n=node("+id+") where ( n.name = \"reference node\") return n.name" );
        time = (System.currentTimeMillis() - time);
        System.out.println("Time taken : " + time + " ms.");
    }
4

2 回答 2

0

您可能想要索引您的 name 属性(请参阅indexing)。之后,您可以像这样查询:

START n=node:your_index_name("name:the_indexed_name") RETURN n;

通过索引查找节点比通过 WHERE 子句过滤要快得多。

于 2013-03-15T08:22:48.703 回答
0

我对 Cypher 查询技术有类似的问题。处理 Cypher 声明式查询的开销导致性能不佳。我同意你的观点,开销是不允许的。

我们应该使用 Core Java API 来获得 neo4j 的全部功能。

请参阅这篇文章:使用 Core Java API 获得完整的 neo4j 功能

还有这个:图形查询语言的性能:Neo4j 中 Cypher、Gremlin 和 Native Access 的比较

于 2013-08-25T20:16:10.923 回答