带有并发REST查询的CSV上载会使CPU资源最大化



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

它运行良好,通过REST调用申请贷款和登录应用程序的客户端详细信息,可以频繁更新(约每秒1-5次)。目前,总存储大小为18.48 GiB,有46741582个关系、68627444个属性和5360756个节点。

最近,我想删除一个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上定义了indeces,如下所示:

CREATE INDEX ON :Client(AtlasId)

CREATE INDEX ON :DeviceId(DID)

更改

USING PERIODIC COMMIT 1000 to USING PERIODIC COMMIT 100

没有明显的效果。

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

我应该更改什么?

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

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); 

最新更新