Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
Neo4j 在非常大的图上收集和排序节点的查询优化_Neo4j_Cypher - Fatal编程技术网

Neo4j 在非常大的图上收集和排序节点的查询优化

Neo4j 在非常大的图上收集和排序节点的查询优化,neo4j,cypher,Neo4j,Cypher,我有一个相当大的图(18亿个节点和大致相同数量的关系),其中我正在执行以下查询: MATCH (n:Article) WHERE n.id IN $pmids MATCH (n)-[:HAS_MENTION]->(m:Mention) WITH n, collect(m) as mentions RETURN n.id as pmid, mentions ORDER BY pmid 其中$pmid是字符串列表,例如[“1234”,“4567”],其中该列表的长度从100-500不等 我目

我有一个相当大的图(18亿个节点和大致相同数量的关系),其中我正在执行以下查询:

MATCH (n:Article)
WHERE n.id IN $pmids
MATCH (n)-[:HAS_MENTION]->(m:Mention)
WITH n, collect(m) as mentions
RETURN n.id as pmid, mentions
ORDER BY pmid
其中$pmid是字符串列表,例如
[“1234”,“4567”]
,其中该列表的长度从100-500不等

我目前在neo4j docker社区实例中保存数据,并进行以下配置修改:neo4j_dbms_memory_pagecache_size=32G,neo4j_dbms_memory_heap_max_size=32G。已为Article.id创建索引

这个查询的运行速度非常慢(大约5秒),我希望进行优化以提高运行速度。作为工作的一部分,我可以访问neo4j enterprise,因此一种方法是将此数据作为neo4j enterprise帐户的一部分接收,在该帐户中我可以调整高级配置设置

总的来说,对于如何提高性能,无论是优化密码查询本身、增加工作人员还是neo4j.conf中的其他设置,有人有什么建议吗

提前谢谢

对于任何感兴趣的人-我也在中提出了这个问题,并且已经有一些有趣的优化建议(特别是围绕“类型提示”触发反向索引,以及使用模式理解而不是
collect()
最初的想法)

  • 您正在使用字符串字段存储PMID,但PMID是数字的,它可能会减少数据库大小,如果存储为int(索引为int,搜索为int),性能可能会更好
  • 如果PMID列表通常很大,并且服务器有六个以上的内核,那么apoc并行密码功能可能值得研究
  • 你真的需要提到节点的每一个属性吗?如果不需要,试着收集你所需要的
  • 以GBs为单位的数据库大小是多少?(内存设置方面需要一些上下文),neo4j admin memrec建议了什么
  • 如果数据库一直都是这样使用的,那么sql数据库可能会更好,在构建sql数据库时,将提到的内容收集到一个字段中(一次完成)
注意:转到PubMed!

谢谢您的回复!4)数据库目录大约为330GB-我实际上刚刚阅读了关于apoc.mapParallel的文章,我很想试试看哪种类型的加速,我可能会得到非常好的评价。我最初选择知识图表示,因为我认为可能会有一些涉及最短路径和其他图形分析/算法的潜在有趣问题。此外,这也是一种“踢轮胎”的一般方式,以查看neo4j在较大图形中的表现:)