我在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调用中抛出异常。唯一的补救办法是杀死并重新启动服务器,之后一切都很好。
我应该改变什么?
答案 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);