Flask API 在长 Cypher 查询时中断

Flask API breaks at long Cypher query

我正在 Flask 中构建一个与 neo4j 数据库对话的 API。一个特别大的查询(15 分钟以上)打破了 API。中断意味着 Docker 容器在其中 运行s 停止而不记录请求。问题是我在本地 运行 API 时无法重现错误。

我认为我需要的是一种使用 py2neo 运行 查询的方法,然后 return 任意响应 而无需 等待查询完成.

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)

我真的不是运维人员,所以欢迎对这个难题有更广泛的见解。

您在该数据库中有多少数据? 运行ning start r=rel(*) ...

你可能会更好

为什么你首先 return 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

相同