我有一個巨大的有向圖:它由160萬個節點和3000萬條邊組成。我希望用戶能夠找到圖形兩個節點之間的所有最短連接(包括傳入和傳出邊緣)(通過Web界面)。目前我已經將圖存儲在PostgreSQL數據庫中。但是這個解決方案不是非常高效和優雅,我基本上需要存儲圖形的所有邊緣兩次(請參閱我的問題PostgreSQL: How to optimize my database for storing and querying a huge graph)。哪種技術最適合存儲和查詢巨大的只讀圖?
有人建議我使用GraphDB,如neo4j或AllegroGraph。然而,AllegroGraph的免費版本僅限於5000萬個節點,並且還具有非常高級的API(RDF),這對我的問題來說似乎過於強大和複雜。另一方面,Neo4j只有非常低級的API(並且python界面還不成熟)。它們都似乎更適合於問題,其中節點和邊緣經常被添加或移除到圖形中。對於圖表中的簡單搜索,這些GraphDB似乎太複雜了。
我有一個想法是「濫用」像Lucene這樣的搜索引擎,因爲我基本上只在圖表中搜索連接。
另一個想法是,有一個服務器進程,將整個圖形(500MB到1GB)存儲在內存中。然後客戶端可以查詢服務器進程,並且可以非常快速地橫切圖形,因爲圖形存儲在內存中。用一些現有的框架編寫這樣一個服務器(最好是用Python編寫的)有沒有簡單的可能性?
您將使用哪種技術來存儲和查詢如此龐大的只讀圖?
「對於圖表上的簡單搜索,這些GraphDB看起來太複雜了。」不知道這是什麼意思。除了圖形以外的任何東西存儲圖形都會增加複雜性。 – sevenforce 2014-10-17 18:52:02