2014-03-13 36 views
0

我正在研究一個涉及使用PubMed數據來查找MeSH術語和文章之間的聯繫的項目。我爲此構建的Neo4j數據庫它包含〜11M節點和〜100M關係,並且在很多情況下我經歷了極其緩慢的查詢時間(30分鐘或更長),包括像"Match (a:MeSHTerm)<-[:Mentions]-(b:Article) WHERE a.name="Calcimycin" RETURN b"那樣簡單的查詢(即,只查找與節點之間存在關係的所有節點w /名稱卡西黴素)。這一切都是在運行Ubuntu 12.04的大學刀片上完成的,RAM的數量非常有限(根據free的命令,3G的RAM,其中2個正在被除neo4j以外的應用程序使用)。現在,wrapper配置將最小java堆大小設置爲16mb,最大值設置爲64mb(儘管當neo4j運行時和當不在時使用內存的差異是1G;關於其餘GB的位置的任何解釋用過的?)。有限RAM的大型數據庫(> 100M原始數據庫)的快速性能

  1. 我不知道多少,我可以擴大堆大小沒有 到撞交換文件,因爲自由告知我Neo4j的運行和
  2. 我使用所有的 可用RAM如果我們需要擴展到一個更強大的RAM系統,以便 獲得合理的查詢時間。任何建議將很多 讚賞,我很高興澄清我可以盡我所能,雖然我 仍然是與Ubuntu的一般工作。

更新: 上的標籤MeSHTerm添加索引之後,查詢時間上均提高到〜11S,基於查詢的隨機化100次測試。還有什麼我可以做的?我很樂意將它降到次秒,因爲這最終將成爲基於網絡的工具。

+0

歡迎來到SO,請使用格式,當你發佈qtn/ans – Sanoob

回答

0

既然你不提,你有

:`MeSH Term`(name) 

我要去的索引建議您創建一個:

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

另外,我建議您不要使用空格你的標籤。

+0

哈哈,是的,我用硬命名的空間名稱找出問題。一旦我創建了索引,我是否需要做任何事情來填充它?我應該使用該標籤對所有節點運行查詢嗎? – bgottfried91

+0

它將填充在背景中。 –