如何提高 Neo4j 的性能?

How to increase performance in neo4j?

我用的是嵌入式neo4j 1.9.3,会有



我的机器有:


我的配置是:


我正在使用 Java API 进行写入和查询操作。查询速度还不错,但是写入速度很慢。会是什么原因呢?我应该添加哪些配置以提高写入速度?

这是我代码中的写法部分:

private static IndexManager  index = Graph.graphDB.index();
private static Index<Node> allNodes = index.forNodes("allnodes");  

public Node create(String value) {
    Node node = super.getOrCreate("name", value);
    return node;
}

public void createNode() {
    try {
        Transaction tx = Graph.graphDB.beginTx();

        Node subject = create(RDF.getInstance().getSubject().toString());
        Node object = create(RDF.getInstance().getObject().toString());
        Node predicate = create(RDF.getInstance().getPredicate().toString());

        Node factNode = Graph.graphDB.createNode();

        factNode.createRelationshipTo(subject, RelTypes.SUBJECT);
        factNode.createRelationshipTo(predicate, RelTypes.PREDICATE);
        factNode.createRelationshipTo(object, RelTypes.OBJECT);

        allNodes.add(subject, "name", subject.getProperty("name"));
        allNodes.add(predicate, "name", predicate.getProperty("name"));
        allNodes.add(object, "name", object.getProperty("name"));

        tx.success();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

您忘记了tx.finish(),所以您的交易永远不会closed/comitted。

可能是你的磁盘太慢了。使用固态硬盘。 确保禁用病毒扫描程序/磁盘加密。

拥有更多可用内存也很有意义,例如16G.

目前您可能交换到磁盘,因为您在 8G 机器上使用 4+6G = 10G。 将堆内存减少到 2G,页面缓存减少到 5G。所以你有 1G 用于 OS 和 JVM。

一般来说,将 RDF 模型存储在 属性 图中没有多大意义。 尝试创建一个合适的 属性 图形模型并将 导入其中

另外我建议升级到最新版本的Neo4j 2.3.1。

或者您的代码效率不高,尤其是。这些行:

    Node subject = create(RDF.getInstance().getSubject().toString());
    Node object = create(RDF.getInstance().getObject().toString());
    Node predicate = create(RDF.getInstance().getPredicate().toString());

    allNodes.add(subject, "name", subject.getProperty("name"));
    allNodes.add(predicate, "name", predicate.getProperty("name"));
    allNodes.add(object, "name", object.getProperty("name"));

将所有内容添加到索引中是否有意义?为什么?

您还应该有更高效的代码来访问属性,为什么要先将其从 RFD 中拉出,然后再将其从 属性 中拉出? 将值存储在变量中。