具有并发REST查询的CSV上载最大化了CPU资源

时间:2017-01-12 12:24:25

标签: csv neo4j windows-server-2012-r2 window-server

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

通过申请贷款和登录应用程序的客户端详细信息的REST调用,它经常运行(大约每秒1-5次)更新。目前商店总面积为18.48 GiB,有46,741,582个关系,68,627,444个属性和5,360,756个节点。

最近我想通过此调用删除CSV中包含大约12米行的一系列关系:

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

在此调用之前,我在Client和DeviceId上定义了indeces,如下所示:

CREATE INDEX ON :Client(AtlasId)

CREATE INDEX ON :DeviceId(DID)

更改

USING PERIODIC COMMIT 1000 to USING PERIODIC COMMIT 100

没有明显效果。

然而,此调用启动良好,但很快CPU就会消失,不久之后Neo4J进程就会无响应,并开始在进一步的REST调用中抛出异常。唯一的补救办法是杀死并重新启动服务器,之后一切都很好。

我应该改变什么?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用periodic commits。例如,每千行:

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