【问题标题】:Inserting Data into Neo4j through neo4j rest binding Batch REST API becomes slow as more data is inserted通过 neo4j REST 绑定将数据插入 Neo4j 批处理 REST API 会随着插入更多数据而变慢
【发布时间】:2014-05-01 12:57:44
【问题描述】:

我目前正在尝试将大量数据插入 neo4j。通过使用 neo4j java-rest-binding 库,我通过 500 个密码查询进行批量插入,目前我的图中最多存储 200k 个节点和 1.4m 个关系。

使用我当前的数据,我在插入期间已经遇到请求超时,我想知道是否有任何配置可以使批量请求的插入更快。

或者对我当前使用的查询进行一些改进 这里还有一个正在使用的示例查询,

MERGE (firstNode {id:'ABC'})
ON CREATE SET firstNode.type="RINGCODE", firstNode.created = 100, firstNode:rbt
ON MATCH SET firstNode.type="RINGCODE", firstNode:rbt 
MERGE (secondNode{id:'RBT-TC664'}) 
WITH firstNode, secondNode OPTIONAL MATCH firstNode - [existing:`sku`] - () 
DELETE existing 
CREATE UNIQUE p = (firstNode)-[r:`sku`]-(secondNode) RETURN p;

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:
    1. 使用标签
    2. 为标签 + 属性 (id) 创建索引或唯一约束
    3. 用标签来表示类型

    否则 Neo4j 必须扫描所有节点以找出要合并的节点是否已经在数据库中。

    如果你不需要唯一性,你也可以使用 create ,它不检查,只是创建并且不会减慢。

    rbt 代表什么?

    create constraint on (n:Rbt) assert n.id is unique;
    
    MERGE (firstNode:Rbt:RingCode {id:'ABC'})
    ON CREATE SET firstNode.created = 100 
    MERGE (secondNode:Rbt {id:'RBT-TC664'})
    WITH firstNode, secondNode
    OPTIONAL MATCH firstNode -[existing:`sku`]- () 
    DELETE existing 
    MERGE p = (firstNode)-[r:`sku`]-(secondNode) 
    RETURN p;
    

    【讨论】:

    • 谢谢迈克尔,会试试这个,顺便说一下,我每次查询时都需要使用创建约束,还是只运行一次? Rbt 也代表回铃音。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2013-11-19
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    相关资源
    最近更新 更多