服务器96核,384个线程,
内存1.5T
运行情况:程序运行时开启了300个线程,内存占用只有25%,线程较多时间处于空闲,总CPU占用较多时候在10%左右
运行命令:
match (v: `player`) where id(v) in range(1, 524288) match (v)-->(v2:team) with v,count(v2) as cnt where cnt==3 match (v)-[e:follow]->(v2) return e
为了解决的问题:查询图库中所有服务三个球队的球员,但球员编号分布的范围较广,大概是1到2的38次方,所以上面的代码会运行524288次
目标:提高资源利用,以及清楚为什么资源利用率这么差
steam
2
为啥需要运行那么多次,
MATCH (v1:player)-[e]->(v2:team) WITH v1 as v, count(e) as count WHERE count == 3 RETURN v
感觉这个语句就可以,找出出度为 3 的点,返回出来。
因为524288是2的19次方,而我要找的范围是1到2的38次方,所以还需要2的19次方次
steam
4
所以,我可以理解为,有些球员的编号 vid 是大于 524288,这样么?
steam
6
MATCH (v1:player)-[e]->(v2:team) WITH v1 as v, count(e) as count WHERE count == 3 AND id(v) in range(1, 524288) RETURN v
这个语句呢?你试试可以不,感觉运行那么多次是不明智的。
1 个赞
哈哈,但是我想获得图库中所有的点啊,我总不能直接给定一个超级大的范围吧 
steam
8
我可以理解为,你的 range 的值不定么?上面那个语句是会返回所有满足出度为 3 的点的。
我试了一下您的语句,感觉不太行,本来一个一次好像需要几秒钟,现在直接查询不出来了,现在还在运行 
MuYi
10
可以试试下面这个:
MATCH (v1:player)-[e:follow]->(v2:team) where id(v1) < 274877906944 with distinct v1, count(v2) as count where count == 3 return v1
274877906944是2的38次方
如果你用19次方就用524288
另外,这个cpu消耗是不会很多。
1 个赞
这种方式也不太行,消耗时间太长了,会有timeout的显示
system
关闭
12
此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。