在postgresql中建模图数据的最佳方法

时间:2013-12-25 20:59:44

标签: postgresql graph-databases

如何在Postgresql中存储和查询稀疏定向或无向图。有类似pggraph的东西,但仍处于计划阶段。

我意识到像Neo4J这样的专用图形数据库最适合这种情况。但是有没有办法在Postgresql中实现相同的方法,使用扩展或数据类型,这将避免添加另一个数据库engine.dtata

5 个答案:

答案 0 :(得分:18)

我认为,问题太过模糊和广泛,无法给出准确的答案......

实质上,有一些技术可以有效地查询SQL数据库中的图形数据,这些技术适用于高度专业化的场景。例如,如果您的兴趣在于寻找最短路径,您可以选择维护GRIPP索引。 (它基本上有点像预先排序的树索引,应用于图形。)据我所知,这些技术都没有标准化。

说到这一点,看到你提到社交网络的评论,可能性很大,他们每个人都会有点过分。如果你的兴趣主要在于获取与用户朋友相关的数据,或者等同于查询节点邻域的意义上的等价物,那么你需要在连接中遍历的节点数量是如此之小以至于不需要专业工具,数据结构等:简单地使用递归CTE。

http://www.postgresql.org/docs/current/static/queries-with.html

为了在使用后者时获得最佳性能,请在查询的where部分中移动尽可能多的with (...)条件,以便尽早消除节点。

答案 1 :(得分:17)

将PostgreSQL用于底层存储,并通过PL / Python将networkX或iGraph用于处理引擎。

在他们的书#34; Graph Databases"中,Ian Robinson,Jim Webber和Emil Eifrem对底层存储和处理引擎进行了区分。如果你看一下我在最近的一个问题中所遵循的答案(参见here),你会看到我使用PostgreSQL作为底层存储,而networkX作为处理引擎。相对于我原来的解决方案而言,性能提升是巨大的(类似于"图形数据库"书中描述的那些)并且实现它非常容易。

答案 2 :(得分:2)

由于问题是通用的,我会添加一个适用于大多数平面图形的解决方案,如街道网络,PostgreSQL通过Postgis topology提供了一个很好的解决方案。 Postgis拓扑将几何存储为边,节点和面以及它们的相对关系。这意味着,从街道网络的几何形状,您可以选择边缘及其起始和结束节点,并从中轻松地在您选择的处理引擎中构建图形(例如,网络x或Pyhton的图形工具)。

正如我所说,Postgresql / Postgis拓扑结构在我们想要从图形分析的角度研究街道网络等几何图形时起作用。

答案 3 :(得分:2)

在这一点上,我建议尝试使用AgensGraph, a promising multimodel distribution of PostgreSQL来提供一流的图形数据库以及来自SQL和Cypher的查询。请注意,这是一台完整的服务器,而不是PostGIS之类的扩展,尽管可以向其中添加PostgreSQL扩展。

答案 4 :(得分:-1)

使用bitnine.net的AgensGraph https://bitnine.net/

如果您想可视化图表,也可以从比特币中使用AgensBrowser

谢谢 乔