并发REST查询的CSV上载最大限度地耗尽了CPU资源

sulc1iza  于 2022-10-01  发布在  其他
关注(0)|答案(1)|浏览(170)

我将Neo4J 3.0.6 CE安装在运行Windows Server 2012 r-2的24 GB的虚拟机中的2.4 GHz至强4核(8线程)CPU上。

它运行得很好,通过REST调用客户申请贷款和登录应用程序的详细信息进行频繁(约每秒1-5次)更新。目前总存储规模为18.48 GiB,拥有46,741,582个关系,68,627,444个属性和5,360,756个节点。

最近,我想删除CSV中包含的一系列关系,该CSV大约有1200万行,调用如下:

USING PERIODIC COMMIT 1000 
LOAD CSV WITH HEADERS FROM 'FILE:///ClientCallLogs.csv' AS line 
WITH line
MATCH (c:Client {AtlasId: line.AtlasId})
      -[ud:`used deviceid`]->
      (devID:DeviceId {DID:line.DeviceId})
DELETE ud

在此调用之前,我定义了客户端和设备ID上的指数,如下所示:

CREATE INDEX ON :Client(AtlasId)

CREATE INDEX ON :DeviceId(DID)

正在改变

USING PERIODIC COMMIT 1000 to USING PERIODIC COMMIT 100

没有明显的效果。

然而,这个调用开始得很好,但很快CPU就会耗尽,在那之后不久,Neo4J进程变得没有响应,并开始在进一步的REST调用中抛出异常。唯一的补救办法是关闭并重新启动服务器,之后一切都会恢复正常。

我应该换些什么?

laawzig2

laawzig21#

您可以尝试使用定期提交。例如每千行:

USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM 'FILE:///ClientCallLogs.csv' AS line 
WITH line
MATCH (c:Client {AtlasId: line.AtlasId})
      -[ud:`used deviceid`]->
      (devID:DeviceId {DID:line.DeviceId})
DELETE ud

请务必使用索引:

create index on :Client(AtlasId);
create index on :DeviceId(DeviceId);

相关问题