Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Neo4j写性能惊人_Java_Neo4j - Fatal编程技术网

Java Neo4j写性能惊人

Java Neo4j写性能惊人,java,neo4j,Java,Neo4j,我正在使用新的bolt客户端对neo4j 3.0.7进行性能测试,我看到了一些奇怪的结果。 我正在尝试一个非常简单的场景:增加1000个节点(使用merge命令) 我尝试了几种方法: 1个命令的1000个同步事务 1000命令的1个事务处理 1个命令的1000个异步事务(使用10个线程) 这是我正在执行的查询(我对person.id有唯一性约束): “合并(n:person{id:'123})集合n.name='Diana Kesha',n.address='aaa'..返回n.id” 以下是我

我正在使用新的bolt客户端对neo4j 3.0.7进行性能测试,我看到了一些奇怪的结果。 我正在尝试一个非常简单的场景:增加1000个节点(使用merge命令)

我尝试了几种方法:

  • 1个命令的1000个同步事务
  • 1000命令的1个事务处理
  • 1个命令的1000个异步事务(使用10个线程)
  • 这是我正在执行的查询(我对person.id有唯一性约束): “合并(n:person{id:'123})集合n.name='Diana Kesha',n.address='aaa'..返回n.id”

    以下是我的查询的执行计划:

    结果如下:

  • 每1000个同步事务约3秒(请注意,不是1000k)
  • 每1000个命令的1个事务处理约2秒
  • 每1000个异步事务约2.5秒
  • 64核128G内存机器的结果绝对不可接受

    现在,再深入一点, 我注意到Neo4j使用了25%的RAM(我认为这很好),但在使用前2个选项时,只有1内核,在使用10个线程时,只有10个内核

    我还注意到,更改Neo4j的工作线程对实际使用的内核数量没有影响


    我错过了什么

    您有两个相互冲突的数字,您的意思是1000还是1000k=1M

    1M更新的2秒速度太慢

    我建议每个tx执行1k到10k更新,然后并行化tx

  • 您没有使用参数
  • 不要退回任何东西
  • 使用大写标签(调整约束)
  • 比如:

    最好将(2)批处理到列表参数中

    UNWIND {data} as row 
    MERGE (n:Person {id:row.id}) 
    ON CREATE SET n.name=row.name n.address=row.address
    
    因此,测试1000个请求(并行),每个请求有1000个更新,每次发送一个包含1000个地图的列表

    UNWIND {data} as row 
    MERGE (n:Person {id:row.id}) 
    ON CREATE SET n.name=row.name n.address=row.address
    

    您有两个相互冲突的数字,您的意思是1000还是1000k=1M

    1M更新的2秒速度太慢

    我建议每个tx执行1k到10k更新,然后并行化tx

  • 您没有使用参数
  • 不要退回任何东西
  • 使用大写标签(调整约束)
  • 比如:

    最好将(2)批处理到列表参数中

    UNWIND {data} as row 
    MERGE (n:Person {id:row.id}) 
    ON CREATE SET n.name=row.name n.address=row.address
    
    因此,测试1000个请求(并行),每个请求有1000个更新,每次发送一个包含1000个地图的列表

    UNWIND {data} as row 
    MERGE (n:Person {id:row.id}) 
    ON CREATE SET n.name=row.name n.address=row.address
    

    您正在执行哪些查询?你是如何执行它们的?你有什么索引?还有,你有没有用你的查询运行PROFILE?对于具有大量db点击的查询,您可能希望将其粘贴到描述中,展开概要文件图的所有节点。但是,它仍然不能解释只有一个核心参与进程的事实。请保留图像内联,在上下文中阅读比转到另一个选项卡更容易。您是否在描述中对每个查询使用精确的查询,每次合并同一个节点,或者所有合并的数据都不同且唯一?您正在执行哪些查询?你是如何执行它们的?你有什么索引?还有,你有没有用你的查询运行PROFILE?对于具有大量db点击的查询,您可能希望将其粘贴到描述中,展开概要文件图的所有节点。但是,它仍然不能解释只有一个核心参与进程的事实。请保留图像内联,在上下文中阅读比转到另一个选项卡更容易。您是否在描述中对每个查询使用精确的查询,每次合并同一个节点,还是所有合并的数据都不同且唯一?谢谢。我将尝试您的解决方案并报告。好的。所以我尝试了放松,1000个节点的放松速度快了300毫秒。但我的问题是,我不能使用它,因为我不能让我的整个区块失败。有没有一种方法可以在不使用事务的情况下以合理的性能将数据插入Neo4j?谢谢。我将尝试您的解决方案并报告。好的。所以我尝试了放松,1000个节点的放松速度快了300毫秒。但我的问题是,我不能使用它,因为我不能让我的整个区块失败。有没有一种方法可以在不使用事务的情况下以合理的性能向Neo4j插入数据?