在Cypher查询中Flask API中断

我在Flask中构build一个与neo4j db交谈的API。 一个特别大的查询(15分钟+)打破了API。 破坏意味着它运行的Docker容器在不logging请求的情况下停止。 麻烦的是,我不能在本地运行API时重现错误。

我想我需要的是一种使用py2neo运行查询的方法,然后返回一个任意的响应而不用等待查询结束。

def post(self): g.cypher.run("MATCH a-[r]-b SET r.cost = " "CASE WHEN r.cost <1 THEN 0.01*exp(4.60517*(r.costx+0.01)) ELSE r.cost END " "SET r.costx = " "CASE WHEN r.costx < 1 THEN r.costx + 0.01 ELSE r.costx END " "RETURN r") return make_response(jsonify({'success': 'all relationship costs increased'}), 200) 

我真的不是一个运动员,所以对这个难题的更广泛的见解是最受欢迎的。

你在那个数据库里有多less数据? 你可能会更好地运行开始r = rel(*)…

为什么你首先回到r?

我会批量查询并添加这个条件:

 START r=rel(*) WITH r WHERE r.cost < 1 OR r.costx < 1 WITH r SKIP {batchSize} LIMIT 100000 SET r.cost = CASE WHEN r.cost < 1 THEN 0.01*exp(4.60517*(r.costx+0.01)) ELSE r.cost END WITH r WHERE r.costx < 1 SET r.costx = r.costx + 0.01 

或者更好地运行在两个通行证:

 START r=rel(*) WITH r WHERE r.cost < 1 WITH r SKIP {batchSize} LIMIT 100000 SET r.cost = 0.01*exp(4.60517*(r.costx+0.01)) 

和cost.x相同