我正在开展一个项目,该项目涉及使用来自 PubMed 的数据来查找 MeSH 术语和它们提到的文章之间的联系。我为它构建的 Neo4j 数据库包含约 1100 万个节点和约 1 亿个关系,我正在经历非常缓慢很多情况下的查询时间(30 分钟或更长),包括简单的查询"Match (a:MeSHTerm)<-[:Mentions]-(b:Article) WHERE a.name="Calcimycin" RETURN b"
(即仅查找与名称为 Calcimycin 的节点有提及关系的所有节点)。这一切都是在运行 Ubuntu 12.04 的大学刀片上完成的,RAM 数量非常有限(根据 free 命令,3G 的 RAM,其中 2 个被 neo4j 以外的应用程序使用)。现在,包装器配置将最小 java 堆大小设置为 16mb,最大设置为 64mb(尽管 neo4j 运行时使用的内存与不运行时的内存差异为 1G;任何关于 GB 其余部分在哪里的解释用过的?)。
- 我不确定在不插入交换文件的情况下我可以扩展多少堆大小,因为 free 告诉我在 neo4j 运行时我正在使用所有可用的 RAM 并且
- 如果我们需要扩展为具有更多 RAM 的更强大的系统以获得合理的查询时间。任何建议都将不胜感激,我很乐意尽我所能澄清,尽管我对使用 Ubuntu 还是很陌生。
更新:在标签 MeSHTerm 上添加索引后,基于 100 次随机查询测试,查询时间已提高到平均约 11 秒。还有什么我可以做的吗?我很想把它降低到亚秒级,因为这最终将成为一个基于网络的工具。