我正在开展一个项目,涉及使用PubMed的数据来查找他们提到的MeSH术语和文章之间的联系。我为它构建的Neo4j DB包含~11M节点和~100M关系,我是在很多情况下经历极慢的查询时间(30分钟或更长),包括像"Match (a:MeSHTerm)<-[:Mentions]-(b:Article) WHERE a.name="Calcimycin" RETURN b"
那样简单的查询(即只查找具有与名称Calcimycin名称的节点的提及关系的所有节点)。这一切都是在运行Ubuntu 12.04并且RAM数量非常有限的大学刀片上完成的(根据免费命令,RAM为3G,其中2个由neo4j以外的应用程序使用)。现在,包装器配置将最小Java堆大小设置为16mb,最大值设置为64mb(尽管neo4j运行时的使用内存差异不大于1G;有关其余GB的位置的任何解释用过的?)。
更新: 在标签MeSHTerm上添加索引后,根据查询的100个随机测试,查询时间已经提高到平均值~11s。还有什么我能做的吗?我希望将它降低到亚秒级,因为这最终将成为一个基于网络的工具。
答案 0 :(得分:0)
因为你没有提到你有一个索引
:`MeSH Term`(name)
我建议您创建一个:
CREATE INDEX ON :`MeSH Term`(name);
另外,我建议您避免在标签中使用空格。