Есть ли способ ускорить обновления на графике Neo4j? - PullRequest
0 голосов
/ 23 января 2019

У меня есть график в Neo4j (3.5), содержащий приблизительно 12 м узлов и 16 м ребер.График работает на виртуальной машине RHEL с 8 ядрами vCPU и 8 ГБ памяти.

При выполнении обновлений на графике, таком как приведенный ниже, я вижу, что обновление занимает около 15 секунд.

Я рассмотрел рекомендации по индексированию Neo4j и не могу найти ничего, что указывало бы на то, что оно вообще ускорит обновление.Схема для графика показывает, что я создал индекс для соответствующего атрибута;:Liability(Liability ID) ONLINE

MATCH (n {`Liability ID`: {liability_id}}) 
SET n.`Creditor Reference`= {reference},
n.`Liability Type`= {liability_type}, 
n.`Liability Sub-Type`= {liability_subtype}
RETURN n.`Liability ID`

Любая помощь приветствуется.

Редактировать: Я также пытался заменить индекс на ограничение следующей схемой: :Liability(Liability ID) ONLINE (for uniqueness constraint), это не ускорило обновление и вместо этого сделало его на 1 секунду медленнее.

1 Ответ

0 голосов
/ 23 января 2019

Поскольку индекс связан с меткой И именем свойства , для использования индекса необходимо указать метку и имя свойства в вашем MATCH шаблоне. Если вы не укажете метку в шаблоне, Cypher будет вынужден сканировать все узлы, что не позволяет ему использовать ваш индекс.

Например, это должно привести к тому, что планировщик Cypher сгенерирует план, который использует ваш индекс (единственное реальное изменение - в предложении MATCH):

MATCH (n:Liability {`Liability ID`: {liability_id}}) 
SET
  n.`Creditor Reference` = {reference},
  n.`Liability Type` = {liability_type}, 
  n.`Liability Sub-Type` = {liability_subtype}
RETURN n.`Liability ID`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...