Neo4J ServiceUnavailable всегда в одном и том же месте. Не знаю почему - PullRequest
0 голосов
/ 29 мая 2020

У меня есть система, которая при развертывании запускает множество скриптов для заполнения базы данных Neo4J. Никакого импорта CSV, только обычные запросы, создающие множество узлов и отношений.

Довольно регулярно, но не всегда, я получаю ошибку в одном конкретном скрипте, и я не знаю почему. В этом файле нет ничего необычного.

Ошибка:

| { Neo4jError: Connection was closed by server
|
|     at captureStacktrace (/code/node_modules/neo4j-driver/lib/v1/result.js:200:15)
|     at new Result (/code/node_modules/neo4j-driver/lib/v1/result.js:73:19)
|     at Session._run (/code/node_modules/neo4j-driver/lib/v1/session.js:173:14)
|     at Session.run (/code/node_modules/neo4j-driver/lib/v1/session.js:154:19)
|     at Object.complete (/code/datamigrations/003/0007_yet_another_script.js:34:17)
|     at ReadableStreamStreamer.ChunkStreamer.parseChunk (/code/node_modules/papaparse/papaparse.js:548:18)
|     at ReadableStreamStreamer.<anonymous> (/code/node_modules/papaparse/papaparse.js:857:11)
|     at ReadableStreamStreamer._streamData (/code/node_modules/papaparse/papaparse.js:1817:25)
|     at ReadableStreamStreamer.<anonymous> (/code/node_modules/papaparse/papaparse.js:876:9)
|     at IconvLiteEncoderStream.<anonymous> (/code/node_modules/papaparse/papaparse.js:1817:25) code: 'ServiceUnavailable', name: 'Neo4jError' }

Сам скрипт не делает ничего необычного. Ошибка возникает при первом запуске сценария session.r:

    session.run(
      `UNWIND {batch} as row
       MATCH (e:Episode {issueKey: row.issueKey})
       WITH e,row
       UNWIND row.otherIds as otherId
       MATCH (a:OtherElement {id: otherId})
       CREATE (e)-[:ENABLES]->(a)
      `,
      { batch: elements },

По общему признанию, я создаю здесь большой пакет. Более 30к узлов. Могло ли это вызвать ошибку? Было бы лучше разбить это на партии по 10к или что-то в этом роде?

1 Ответ

1 голос
/ 29 мая 2020

Да, использование небольших пакетов, вероятно, поможет.

Кроме того, ваш запрос можно упростить:

   UNWIND $batch as row
   MATCH (e:Episode {issueKey: row.issueKey}), (a:OtherElement)
   WHERE a.id IN row.otherIds
   CREATE (e)-[:ENABLES]->(a)

Кроме того, наличие индексов на :Episode(issueKey) и :OtherElement(id) должны улучшить производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...