具有有限RAM的大型DB(> 100M基元)的快速性能

时间:2014-03-13 17:45:31

标签: performance neo4j cypher heap-size

我正在开展一个项目,涉及使用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的位置的任何解释用过的?)。

  1. 我不确定在没有的情况下我可以扩展堆大小 对接到交换文件,因为免费告诉我我正在使用所有的 neo4j运行时的可用RAM和
  2. 如果我们需要扩展到具有更多RAM的更强大的系统 获得合理的查询时间。任何建议都会很多 我很高兴能够尽我所能澄清,尽管我是 仍然是Ubuntu的新手。
  3. 更新: 在标签MeSHTerm上添加索引后,根据查询的100个随机测试,查询时间已经提高到平均值~11s。还有什么我能做的吗?我希望将它降低到亚秒级,因为这最终将成为一个基于网络的工具。

1 个答案:

答案 0 :(得分:0)

因为你没有提到你有一个索引

:`MeSH Term`(name)

我建议您创建一个:

CREATE INDEX ON :`MeSH Term`(name);

另外,我建议您避免在标签中使用空格。