Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >Neo4j -设定在一个永远不会结束

Neo4j -设定在一个永远不会结束
EN

Stack Overflow用户
提问于 2016-02-17 06:38:20
回答 1查看 177关注 0票数 1

我有一个代表学校项目的城市地图的数据库。每个节点代表街道上的一个点,每个关系代表一段道路,两个节点之间的距离是一个属性。我通过解析带有java接口的XML文件将其导入Neo4j。

但是,由于XML文件的编码方式,我有很多节点没有用,因为它们只是表示街道中的中间位置,而不是交叉点或新街道。

所以,我试图取两个交叉口之间的每一段道路的极值,在这两个节点之间建立一个关系,然后把每条街道的关系的距离相加。

对于这些命令中的每一个,我都使用neo4j的浏览器客户端,但是我的计算机上有一个数据库。首先,我用以下命令标记我想要销毁的所有关系和节点:

代码语言:javascript
代码运行次数:0
复制
match ()-[r]-(n)-[t]-()
with r,n,t,size(n--()) as degree
where degree=2 and r.name=t.name
set r.toDestroy=1,t.toDestroy=1,n.toDestroy=1

然后,我得到每一对重要节点

代码语言:javascript
代码运行次数:0
复制
match (a)-[r* {toDestroy;1}]-(b)
where a.toDestroy is NULL and b.toDestroy is NULL and all (x in r where x.name=(r[0]).name)
return a,r,b

这个命令返回我所要求的内容,所以现在我在(a)和(b)之间创建了一个新的关系,并设置了它的距离。

代码语言:javascript
代码运行次数:0
复制
match (a)-[r* {toDestroy;1}]-(b)
where a.toDestroy is NULL and b.toDestroy is NULL and all (x in r where x.name=(r[0]).name)
merge (a)-[t:TRONCON_DE_VOIE]->(b)
set t.distance=0,t.name=(r[0]).name
foreach(x in r|set t.distance=t.distance+r.distance)

这就是我的问题所在:这个请求永远不会返回,客户只需告诉我它正在运行。我不明白为什么,因为即使我隔离了两个节点和它们的链接,它也不起作用。如果我把(set x.distance=1)之类的东西放在前额,它也不起作用。

我在网上看了看,似乎没有人和我有同样的问题。此外,如果我创建另一个DB并使用随机节点填充它并尝试一个类似的命令,它就会结束。所以它可能来自DB本身,但我只是不明白为什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-17 12:21:27

这可能是因为最后一个子句将调用SET N次,其中N实质上是具有toDestroy: 1的关系总数。

下面是一个更有效的查询,它根本不使用SET子句:

代码语言:javascript
代码运行次数:0
复制
MATCH (a)-[r* {toDestroy:1}]-(b)
WHERE a.toDestroy is NULL AND b.toDestroy is NULL AND ALL(x in r where x.name=(r[0]).name)
WITH a, b, (r[0]).name AS name, REDUCE(s = 0, x IN r | s + x.distance) AS total
merge (a)-[t:TRONCON_DE_VOIE {distance: total, name: name}]->(b);

基本上,您应该始终尝试在内存中进行计算,而不将临时值存储在DB中。

编辑

顺便说一句,可变长度路径搜索可以很容易地“永远运行”和/或耗尽内存,因为它们具有指数复杂性。如果路径上每个节点的平均关系数为R,而搜索深度为d,则不同路径的数目大致为R^d。因此,通常,您希望通过指定一个可接受的“小”上限来限制可变长度路径搜索的深度,如下所示:

代码语言:javascript
代码运行次数:0
复制
MATCH (a)-[r*..10 {toDestroy:1}]-(b)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35459690

复制
相关文章
AlpineJS作者:不上班,一年站着赚10w刀
这位老哥名叫「Caleb Porzio」,是一名全栈工程师。在离职前,他的年收入为9w刀。
公众号@魔术师卡颂
2021/08/26
1.5K0
AlpineJS作者:不上班,一年站着赚10w刀
Laravel扩展推荐:导航元素工具“Laravel Navigation”
本篇文章给大家分享一个Laravel扩展:Laravel Navigation包,介绍一下怎么利用Laravel Navigation 轻松构建站点导航元素,希望对大家有所帮助!
很酷的站长
2022/11/29
5030
Laravel扩展推荐:导航元素工具“Laravel Navigation”
Laravel Jetstream是什么以及如何入门?
Laravel Jetstream 与 Laravel 8 一起于2020年9月8日发布。
Lemon黄
2020/09/28
6.5K0
lineNumber: 6; columnNumber: 40; 文档根元素 “mapper” 必须匹配 DOCTYPE 根 “configuration”。
lineNumber: 6; columnNumber: 40; 文档根元素 “mapper” 必须匹配 DOCTYPE 根 “configuration”。
全栈程序员站长
2022/07/01
5880
JavaScript动态设置根元素的rem
说到rem自然就会想到em,我们知道em是相对于父元素的字体大小的单位,那么rem则是相对于根元素也就是元素的字体大小的单位。
刘亦枫
2020/03/19
4.2K0
Vue3 - $attrs 的几种用法(1个或多个根元素、Options API 和 Composition API)
使用 Vue 开发时,肯定会接触到 组件 的概念,无可避免的也会接触到 组件通讯 的概念。
德育处主任
2022/09/23
3.5K0
Vue3 - $attrs 的几种用法(1个或多个根元素、Options API 和 Composition API)
多个Laravel项目如何共用migrations详解
在实际开发中,我们可能经常会遇到一个项目会建立两个 Laravel 项目,一个是面向用户的 web/API,一个是管理员后台,这两个项目一般情况下是共用一个数据库的,那么我们的 migration 可以共用吗?该怎么操作?
子润先生
2021/07/13
6920
多个扇形元素绕圆旋转
这种效果有很多方案,最后选择了一个比较简单的方案,就是一个position: relative;的 div 。包裹5个position: absolute;的div。 通过旋转,调整5个div的 top 与 left,而产生弧度,并使中心点都指向圆心。 黄色扇形与文字 都是在5个div内部。
拿我格子衫来
2023/10/19
2560
多个扇形元素绕圆旋转
数据校检
数据校验的基本原理 <1> 数据校验的必要性 受元器件的质量、电路故障或噪音干扰等因素的影响,数据在被处理、传输、存储的过程中可能出现错误 若能设计硬件层面的错误检测机制,可以减少基于软件检错的代价(系统观) <2> 校验的基本原理 增加冗余码(校验位) - 有效信息(k位) 校验信息(r位) <3> 码距的概念 同一编码中,任意两个合法编码之间不同二进制位数的最小值 0011 与 0001 的码距为1,一位错误时无法识别 0000、0011、0101、0110、1001、1010、1100、1111等
ruochen
2021/05/16
7390
数据校检
如何修改Laravel中url()函数生成URL的根地址
本文主要给大家介绍了修改Laravel中url()函数生成URL的根地址的相关内容,相信大家都晓得 Larevel 的一票帮助函数中有个 url(),可以通过给予的目录生成完整的 URL,是非常方便的一个函数:
用户8449980
2021/07/13
3.4K0
一个 Vue 模板可以有多个根节点(Fragments)?
通常,我们通过在最外层包裹一层 div 来解决这个问题,但这个div元素一般没有啥使用,就是让模板符合单根需求。
前端小智@大迁世界
2020/05/12
3.4K0
c++ vector删除多个元素方法
转自:https://blog.csdn.net/daofengdeba/article/details/7865229
用户7886150
2021/01/19
2.7K0
Laravel 使用多个数据库连接
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105853.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/09
1.4K0
Laravel 中使用 PM2 管理多个队列
接着上一篇的思路,要在 Laravel 中使用 PM2 管理多个队列,该如何操作呢
Bolton
2023/05/31
6650
我是如何通过开源项目做到年入 80 万的?
不知道你是否还记得,去年我们曾经在公众号上发布过一篇文章《我是如何通过开源项目月入 10 万的?》,里面主要讲述了知名前端开源项目 fullPage.js 作者是如何通过 GitHub 做到年入百万的事迹。
GitHubDaily
2020/06/29
9980
我是如何通过开源项目做到年入 80 万的?
竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。
之前写了一篇Laravel提高DB查询效率的文章,转发到群里后竟然有人质疑我说“Laravel是他好几年前用的框架,没想到现在还有人在用。”
王中阳Go
2022/10/26
2.5K0
vue的单根元素问题及解决方法
在进行vue项目开发时,难免遇到各种各样的问题,虽然这些问题和报错会打击我们的自信心,但是只要换个方位思考,问题将成为驱使我们前进的动力。下面小编将以组件模板的单一根元素问题为例,讲解如何使用问题驱动法,解决并拓展想关的问题。
算法与编程之美
2021/11/15
4380
点击加载更多

相似问题

Livewire -检测到多个根元素

11

Livewire:检测到多个根元素。这是不支持的。

15

Laravel Livewire超时

115

多个设备(实例)之间的Laravel livewire同步

114

检测到空的XML根元素

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文