我有大约 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(使用前将#替换为@)