存储/访问有向图的最佳方式

2024-04-10

我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定水流路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 递归地检查所有节点及其上游组件,只要上游路径没有大量分叉,这就可以工作。然而,由于增加了上游的复杂性,一些查询比其他查询花费的时间呈指数级增长,即使它们在物理上沿着路径走得并不远(即“下游”的两个或三个段);在某些情况下,我会在终止查询之前让它持续十分钟以上。我使用一个简单的两列表,一列是设施本身,另一列是第一列中列出的设施的上游设施。

我尝试使用当前设施添加索引来帮助加快速度,但这没有什么区别。并且,对于图中可能的连接,任何节点都可以具有多个上游连接,并且可以从多个“下游”节点连接。

数据中当然有可能存在循环,但我还没有找到验证这一点的好方法(除了 CTE 查询报告最大递归计数命中时除外;这些很容易修复)。

所以,我的问题是,我存储这些信息是否错误?除了CTE之外还有更好的方法来查询上游点吗?


存储图形的最佳方法当然是使用本机图形数据库:-)

看一眼neo4j http://neo4j.org/。 它是用 Java 实现的,并且还具有 Python 和 Ruby 绑定。

我编写了两个 wiki 页面,其中包含使用 Neo4j 以图形表示的域模型的简单示例:assembly http://wiki.neo4j.org/content/Assembly and roles http://wiki.neo4j.org/content/Roles。更多示例可以在领域建模画廊 http://wiki.neo4j.org/content/Domain_Modeling_Gallery page.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储/访问有向图的最佳方式 的相关文章

  • SQL Server 2012 CTE 查找分层数据的根或顶层父级

    我在尝试递归地遍历层次结构以查找组织结构中可能具有的所有后代节点的顶部节点时遇到问题multiple顶级节点 我正在尝试使用 SQL Server 2012 CTE 来执行此操作 但它不会递归到达每个分支的最顶层节点 我已经尝试完全按照与此
  • postgres 'WITH' 子句与 jooq

    天哪 我找不到在 JOOQ 中使用 postgres WITH 子句的方法 请问JOOQ是否支持 谢谢 公用表表达式 WITHjOOQ 目前不支持 子句 jOOQ 路线图上有一个针对 CTE 的待处理功能请求 454 https githu
  • PostgreSQL:如何更新 CTE 中的行

    正在跑步PostgreSQL 9 2 下面给出的是我的示例又大又丑query with cte as select from aTable cte1 as select from bTable inner join cte using an
  • RDBMS 和 ORDBMS 之间的区别

    当我在 PostgreSQL 上阅读有关 PostgreSQL 的内容时 就发生了这种情况 wiki https en wikipedia org wiki PostgreSQL页面 它将自己称为 ORDBMS 我一直都知道 Microso
  • 如何在 postgresql 中基于 wCTE 的 upsert 中获取表的受影响行数?

    我需要你的帮助 我有一个包含 n 次插入和更新循环操作的查询 我决定使用 UPSERT 因为它不需要循环操作 ex WITH upsert AS UPDATE employee table SET rollno input rollno n
  • SQL 中的 LIMIT 语句有多通用?

    我正在推广 Django DB 复制应用程序 它使用以下语句 SELECT s FROM s LIMIT 1 获取 1 行并使用 Python DBAPI 来描述字段 它可以在 ORACLE 和 MySQL 中正常工作 但是 LIMIT 语
  • SQL对具有重叠时间跨度的数据进行分组

    我需要根据记录开始和结束时间通过重叠时间跨度将彼此相关的数据分组在一起 SQL fiddle在这里 http sqlfiddle com 18 87e4b 1 0 http sqlfiddle com 18 87e4b 1 0 我构建的当前
  • PostgreSQL中如何实现嵌套INSERT语句?

    我有两张桌子 group and groupmembers 在插入行时group表 我还想插入两个值 groupid 来自组表的 ID 和userid 创建该组的用户的 ID 到groupmembers桌子 这些是表格 CREATE TAB
  • Sql Server 2012 中的递归衰减平均值

    我需要计算一组值的衰减平均值 累积移动 系列中的最后一个值是 50 权重 所有先前系列的衰减平均值作为另一个 50 权重 递归地进行 我想出了一个可以产生正确结果的 CTE 查询 但它取决于连续的行号 我想知道在 SQL 2012 中是否有
  • RMySQL dbWriteTable 与 field.types

    我有一个数据框 称为df 看起来像这样 dte val 2012 01 01 23 2323 2012 01 02 34 343 列上的类型是日期和数字 我想使用已经打开的连接将其写入 MySQL 数据库 连接工作正常 因为我可以很好地查询
  • Oracle SQL 中的有向图使用递归查询仅访问每个节点一次

    描述 在我们的问题域中 我们正在研究一组连接在一起形成图的边 从给定的节点 或多个节点 开始 我们必须列出整个图中连接到给定节点 或多个节点 的所有链接 我们必须从左到右 从上到下显示这些链接 对于循环数量有限的图 我们有一个针对此问题的有
  • 在同一 SQL 查询中使用“WITH”和“UPDATE”语句

    我有一个表格 需要使用 Excel 电子表格中的一些数据进行更新 我正在考虑这样的查询 WITH temp AS SELECT abcd AS oldvalue defg AS newvalue FROM dual UNION SELECT
  • 使用 Ruby on Rails 进行 Postgres 公共表表达式查询

    我试图找到在 Rails 应用程序中使用通用表表达式进行 Postgres 查询的最佳方法 因为我知道 ActiveRecord 显然不支持 CTE 我有一张桌子叫user activity transitions其中包含一系列正在启动和停
  • 将 CTE 应用于递归查询

    我正在尝试应用 CTE 和递归查询 数据库为 MariaDB 10 2 或更高版本 业务规则如下 账户可以是控股账户 也可以是投资组合账户 控股由一定数量的货币组成 持股可以是活跃的也可以是非活跃的 一个投资组合包含零个或多个账户 并且这些
  • 如果父级未被任何其他子级引用,则删除父级

    我有一个示例情况 parent表有一列名为id 引用于child表作为外键 删除子行时 如果父行未被任何其他子行引用 如何同时删除父行 在 PostgreSQL 中9 1 或更高版本您可以使用单个语句来完成此操作数据修改CTE https
  • 使用 CTE 以及开始和结束日期时间避免日期时间间隔中的间隙

    由于某种原因 我发现使用此查询的时间间隔存在间隙 我只使用基本数据就可以正常工作 但是 当连接表并指定 WHERE 子句时 我发现时间间隔存在间隙 我还需要将 S SessionEndTime 合并到我的时间间隔中 以查找 Response
  • 递归 CTE 中的 TSQL GROUP BY

    是否有解决方法可以在循环 CTE 内使用 GROUP BY 或者有解决方法 我需要对 CTE 表的结果集进行分组 并在具有相同 CTE 的另一个循环中使用它 但出现以下错误 不允许使用 GROUP BY HAVING 或聚合函数 递归公用表
  • 在 RDBMS 中何时使用三元关系而不是聚合?

    我想知道什么时候可以表示实体集和三元关系之间的关系 我明白聚合的好处 但是如果实体集和关系集之间的关系中没有属性 为什么还要使用聚合呢 例如 一名研究生 具有学生编号和姓名 正在从事一个项目 具有 pid 开始日期和结束日期 并且学生从事的
  • 将计算列设置为非空时遇到问题

    我在将计算列设置为时遇到问题not null 我想要实现的是C001 C002 等 同时将其设置为not null 我在论坛上读到 这可以通过使用 NULL 值的默认值 0 来实现 E g ISNULL Price Taxes 0 我尝试应
  • 如何停止 CTE 中的递归?

    我有一个数据库表 如下所示 ID PredecessorID Data 43b1e103 d8c6 40f9 b031 e5d9ef18a739 null 55f6951b 5ed3 46c8 9ad5 64e496cb521a 43b1e

随机推荐