首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化neo4j密码导入查询

优化neo4j密码导入查询
EN

Stack Overflow用户
提问于 2018-04-26 13:06:26
回答 1查看 85关注 0票数 0

我在C#中使用Neo4j.Driver.V1创建了一个应用程序,该应用程序从CSV读取并写入neo4j图形数据库。

我的csv有1000张唱片。每个记录被分割成5个节点,它们之间有关系。

整个过程需要1分11秒(包括构建查询所需的逻辑时间为1秒)。

考虑到他们将上传数以百万计的记录,这太过分了。

以下是我的疑问:

代码语言:javascript
复制
MERGE 
    (accountd71d278a8eeb468f9e4517ac1e007fe5:Account 
        { 
            number: '952'
        } )         
ON CREATE 
    SET accountd71d278a8eeb468f9e4517ac1e007fe5 += 
    { 
        number: '952', 
        balanceType: 2, 
        accountType: 2, 
        openDate: apoc.date.parse('7/9/2015', 'ms', 'm/d/YYYY')
    }

MERGE (account13aa03cd1b6d449e88a3e5e5a22353da:Account 
    { 
        number: '198'
    } ) 
ON CREATE 
    SET account13aa03cd1b6d449e88a3e5e5a22353da += 
    { 
        number: '198'
    } 

MERGE (transactionba1459c4f7854157be237e7365497fcf:Transaction 
    { 
        number: '1'
    } ) 

ON CREATE 
    SET transactionba1459c4f7854157be237e7365497fcf += 
    { 
        number: '1', 
        amount: 3717.81, 
        type: 2, 
        date: apoc.date.parse('2016-05-27', 'ms', 'YYYY-mm-dd')
    }  

MERGE (bank3679799504f54bed9f079848be9c6eff:Bank 
    { 
        code: 'MMBC'
    } ) 
ON CREATE 
    SET bank3679799504f54bed9f079848be9c6eff += 
    { 
        code: 'MMBC', 
        country: 'Mongolia'
    }  

MERGE (bank522b6b6ed04d40bd9d87d4ecc36fbde2:Bank 
    { 
        code: 'VALL'
    } ) 
ON CREATE 
    SET bank522b6b6ed04d40bd9d87d4ecc36fbde2 += 
    { 
        code: 'VALL', 
        country: 'Mongolia'
    }  

MERGE (accountd71d278a8eeb468f9e4517ac1e007fe5)-[:credits]->(transactionba1459c4f7854157be237e7365497fcf) 
MERGE (accountd71d278a8eeb468f9e4517ac1e007fe5)-[:residesWith]->(bank3679799504f54bed9f079848be9c6eff) 
MERGE (transactionba1459c4f7854157be237e7365497fcf)-[:debits]->(account13aa03cd1b6d449e88a3e5e5a22353da) 
MERGE (account13aa03cd1b6d449e88a3e5e5a22353da)-[:residesWith]->(bank522b6b6ed04d40bd9d87d4ecc36fbde2)

有什么办法可以减少我的查询时间吗?

在提出任何想法之前,以下是我已经尝试过的:

  1. 用GUID删除长名称
  2. 删除apoc数据解析的使用
  3. 考虑使用来自csv内置功能的导入,但db位于另一台服务器上。
  4. 组合多个记录查询(并导致2次性能最好)
  5. 创建的约束

提前感谢!

K

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-10 21:02:52

这是优化流程的要点列表:

  • 使用查询参数:您的所有查询数据都应该是一个参数。如果这样做,Neo4j将不会每次查询计划器都重新计算。
  • 批处理您的查询:我认为您对CSV的每一行执行一个事务。尝试限制您的查询( 1000行的一个事务应该可以,但是如果CSV将增长,您将真正需要更多的事务)
  • 每个节点创建一个查询/关系创建,而不是执行一个大查询,对于关系使用MATCH MATCH MERGE模式(您有约束,所以它将是快速的)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50043783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档