【问题标题】:Performance issues with Neo4j embedded嵌入式 Neo4j 的性能问题
【发布时间】:2018-10-11 19:46:11
【问题描述】:

我有一些包含 100 万个节点和 300 万条边的旧图数据,我想将它们转换为 Neo4j。

我使用的是 Neo4j 嵌入式,我的程序大致是这样的:

for (all node in old graph data):
    node1 = neo4jdb.findNode(node1_id)
    node2 = neo4jdb.findNote(node2_id)
    if (node1 or node2 doesnt exist):
        create new nodes
    if (! relationExistBetween(node1, node2)):
        create new relation between node1 and node2

但是,创建过程超级慢。使用完全相同的逻辑,使用 TinkerGraph 程序运行得更快。

我想知道是否有任何技巧可以加快速度? 谢谢!

【问题讨论】:

    标签: neo4j tinkerpop tinkergraph


    【解决方案1】:

    想通了。分析代码,发现瓶颈在于 findNode 操作。这让我想到它可能与索引有关。

    您必须手动在属性上创建索引以加快速度,使用 Neo4j Embedded,类似于:

    var transaction = graphDB.beginTx()
    try {
      graphDB.schema()
        .indexFor(nodeLabel).on("node_id")
        .create()
      transaction.success()
    } finally {
      transaction.close()
    }
    

    【讨论】:

    • 我正要建议,如果性能是一个问题,你应该考虑使用 RedisGraph,但我想你已经想通了......
    • 谢谢。巧合的是,我昨天正在研究 RedisGraph。它看起来不错,实际上可能更符合我们的目的(我们需要一个内存中的图形来实现非常快的 bfs),但是该项目有点新,并且希望等到它更加成熟一些 - 它无论如何都使用 opencypher 所以迁移应该是无痛。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    相关资源
    最近更新 更多