我有一个巨大的有向图:它由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