0

Windows Server 2012 r-2 で実行されている 24 GB の VM の 2.4 GHz Xeon 4 コア (8 スレッド) CPU に Neo4J 3.0.6 CE をインストールしています。

ローンを申請し、アプリにログオンするクライアントの詳細の REST 呼び出しを介した頻繁な (1 秒あたり約 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 にインデックスを定義します。

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

定期的なコミットを試すことができます。たとえば、1,000 行ごとに次のようにします。

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 に答える