现在我正在使用Neo4j并从错误的一方解决了任务。
首先,我得到allShortestPaths
,然后使用java在其中搜索正确的。
当然,这种方式即使存在也不能保证结果。
所以,我正在寻找可以原生搜索我需要的任何图形DBMS。
Datamodel很简单:
节点:除识别号码外没有其他属性
关系:1个属性双值
为清楚起见 - 它是彼此拥有的组织和股份列表(即财产=百分比> 0 <= 100)。
通过路径时的标准是:
这意味着算法不仅要计算路径本身的关系,还要计算“边”关系(最好不要总是这样,但只有当“下一个关系”为50时)。
最后,但并非最不重要:它应该具有原生最短路径的性能(即18毫升节点上的几毫秒+ 40毫升关系)或接近。不是几小时甚至几分钟。现在,shortestpath可以在几毫秒内找到30-40-50跳的路径,这太棒了。使用关系值,我可以在几秒钟内获得几个长度的最短路径。但这不是理想的解决方案。
我不是Neo4j专家(还是:),从我到目前为止发现的内容来看 - allsSortestPaths
的表现相当厚实。添加额外条件可能会将性能从毫秒降低到数小时。这是不可接受的:(路径长度10 ++也是必须的。
我想,我想要太多,但仍然欢迎任何提示,想法和解决方案!
答案 0 :(得分:0)
对于小型数据集,我只相信Cypher在某些WHERE条件下处理它(最简单的解决方案,效率最低)
下一个最佳解决方案(如果可以的话)是“预编译”解决方案。如果您能够以一种方式构建问题,即少数分类帐节点或关系可以存储您需要的信息,并且更新这些分类帐比完全重新编译解决方案更容易,这将是存储和检索信息的最佳方式(因为在阅读时,你只需要拉出一个节点或关系)。
但也许你不可能简化解决方案,而你只需 来进行复杂的遍历。 Cypher很擅长这个,但它对数据库中的内容是盲目的,不能利用你会知道的事实。在这种情况下(为了获得最佳性能),您需要使用Traversal API(Neo4J还有Java Core API,但Traversal API更容易,只能忽略不计)