0

我在 Windows Server 2012 r-2 上运行的 24GB 虚拟机中的 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 个节点。

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

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 调用上抛出异常。唯一的补救措施是杀死并重新启动服务器,之后一切都恢复正常。

我应该改变什么?

4

1 回答 1

1

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

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); 
于 2017-01-12T13:04:45.903 回答