Драйвер Java Neo4J - Недостаточно памяти с правильным запросом - PullRequest
0 голосов
/ 27 апреля 2018

Я в настоящее время сталкиваюсь с проблемой Neo4J, и я действительно не знаю, где искать ответ, так как я вызываю драйвер java на низком уровне, и все, кажется, проверяет.

Ситуация:

  • работает Neo4J в докере (3.3), дал ему 14 ГБ памяти
  • с использованием Java 8
  • отлично работает с OGM, обрабатывает большие объемы данных и множество запросов
  • общение через java, neo4j-ogm-core 3.1.0, neo4j-java-driver 1.5.2

Теперь я реструктурирую свой проект, чтобы использовать низкоуровневый драйвер Java вместо драйвера OGM по соображениям производительности. Запросы, такие как следующий, выполняются нормально:

MATCH (s:Sentence)<-[:SENTENCE_OF]-(:Paragraph)<-[:CONTAINS]-(d:Document) WHERE id(d) = {docid} RETURN s.sentence as t
parameters = {docid=2681031}

Однако один из запросов зависает:

MATCH  (w0:Word) , (w0:Word)<-[:CONTAINS_WORD]-(:Sentence)-[:SENTENCE_OF]-(:Paragraph)<-[:CONTAINS]-(d:Document)  WHERE w0.originalTextLower = {wT0} AND  id(d) = {docid}  RETURN w0
parameters = {wT0=abo, docid=2681032}

Если я выполняю тот же запрос через веб-интерфейс, запрос выполняется нормально и не возвращает результатов. Если я запускаю его через драйвер java, он увеличивает загрузку процессора до 100% и врезается в землю:

#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 875036672 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /hs_err_pid378.log
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x000000063b400000, 875036672, 0) failed; error='Cannot allocate memory' (errno=12)

Я вызываю это утверждение через объект org.neo4j.driver.v1.Session, как показано ниже:

session.run(statementTemplate, parameters);

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

1 Ответ

0 голосов
/ 02 мая 2018

Разобрался с проблемой: драйвер neo4j-java-не обрабатывает вложенные запросы. У меня был один цикл, который перебрал результаты 1 запроса. В этом цикле он использовал тот же объект Session для выполнения другого запроса. OGM не жалуется в этой ситуации, но neo4j-java-driver делает.

...