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

jet*_*har 29 postgresql graph-databases

如何在Postgresql中存储和查询稀疏定向或无向图.像pggraph这样的东西,但仍处于计划阶段.

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

Den*_*rdy 19

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

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

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

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

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


Ian*_*Gow 17

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

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

  • 我建议切换到使用iGraph,看看这个基准:http://graph-tool.skewed.de/performance我自己也在facebook子图数据上进行了扩展测试. (2认同)

Ero*_*oyd 5

在这一点上,我建议尝试使用AgensGraph,这是一种很有前途的 PostgreSQL 多模型发行版,它提供一流的图形数据库以及来自 SQL 和 Cypher 的查询。请注意,它是一个完整的服务器,而不是像 PostGIS 这样的扩展,尽管可以向其中添加 PostgreSQL 扩展。

更新:

AgensGraph 现在是一个名为AGE的扩展,并已移交给 Apache 基金会。

  • AgensGraph 的后继者是 [AGE 扩展](https://www.postgresql.org/about/news/announcing-age-a-multi-model-graph-database-extension-for-postgresql-2050/)。 (3认同)
  • 看起来他们一直在进行一些网站升级;网站现已恢复。 (2认同)