如何在Postgresql中存储和查询稀疏有向或无向图。类似pggraph的东西,但那还处于计划阶段。
我知道专用的图形数据库如Neo4J最适合此类数据,但是否有办法在Postgresql中实现相同的功能,使用扩展或数据类型,避免添加另一个数据库引擎。
如何在Postgresql中存储和查询稀疏有向或无向图。类似pggraph的东西,但那还处于计划阶段。
我知道专用的图形数据库如Neo4J最适合此类数据,但是否有办法在Postgresql中实现相同的功能,使用扩展或数据类型,避免添加另一个数据库引擎。
实际上,在 SQL 数据库中有效查询图形数据的一些技术,适用于高度专业化的场景。
例如,如果您的兴趣在于查找最短路径,可以选择维护GRIPP 索引。 (它基本上类似于预排序树索引,应用于图形。) 据我所知,目前没有这些技术被标准化。
话虽如此,并且看到您提到社交网络的评论,但很有可能每个方法都过于复杂。
如果您主要感兴趣的是获取与用户的好友相关的数据,或者是相当于查询节点邻域的东西,那么您将需要在连接中遍历的节点数量非常少,不需要专门的工具、数据结构等:只需使用递归 CTEs。
http://www.postgresql.org/docs/current/static/queries-with.html
WITH 提供了一种编写辅助语句以在较大查询中使用的方法。这些语句通常称为公共表达式或 CTE,可以被视为仅为一个查询而存在的临时表。
使用后者时,为了实现最佳性能,请尽可能将许多 where
条件移到查询的 with (...)
部分中,以便尽早消除节点。
Postgis Topology将几何形状存储为边、节点和面以及它们之间的关系。这意味着从街道网络的几何形状中,您可以选择边和它们的起始和结束节点,并从此轻松地在您选择的处理引擎中构建图形(例如Python的networkx或graph-tool)。
正如我所说,Postgresql / Postgis Topology适用于从图分析的角度研究类似街道网络的几何形状。