Установка Neo4J требует времени

У меня есть запрос, который занимает много времени для вставки в neo4j, примерно запрос выглядит следующим образом:

create index on :symaccess_symdev(dir_port);
create index on :symaccess_symdev(host_lun);
create index on :symaccess_symdev(ini_tiator_group_name);
create index on :symaccess_symdev(sym_dev);

CALL apoc.load.json('file:////root/output/1530115956414/dev.json') YIELD 
value AS row UNWIND row.symdev AS symdevs 
MERGE (accesssymdev:symaccess_symdev {
  sym_dev: symdevs.sym_dev,
  host_lun: symdevs.host_lun,
  ini_tiator_group_name: symdevs.ini_tiator_group_name,
  dir_port: symdevs.dir_port
}) 
ON CREATE SET 
  accesssymdev.attr_percentage = symdevs.attr_percentage,
  accesssymdev.cap_mb = toFloat(symdevs.cap_mb),
  accesssymdev.physicaldevicename = symdevs.physicaldevicename;

person Elyas Mohamed    schedule 04.07.2018    source источник
comment
Можете ли вы дать explain этого запроса?   -  person logisima    schedule 05.07.2018


Ответы (1)


Предполагая, что значение свойства sym_dev уникально для каждого узла symaccess_symdev, этот запрос может быть быстрее:

CALL apoc.load.json('file:////root/output/1530115956414/dev.json') YIELD 
value AS row UNWIND row.symdev AS symdevs 
MERGE (a:symaccess_symdev {sym_dev: symdevs.sym_dev})
ON CREATE SET
  a.host_lun = symdevs.host_lun,
  a.ini_tiator_group_name = symdevs.ini_tiator_group_name,
  a.dir_port = symdevs.dir_port,
  a.attr_percentage = symdevs.attr_percentage,
  a.cap_mb = toFloat(symdevs.cap_mb),
  a.physicaldevicename = symdevs.physicaldevicename;

MERGE будет использовать не более одного индекса, поэтому ваш текущий запрос заставит планировщик Cypher выбрать один индекс (из 4 применимых). После использования этого индекса для создания набора узлов-кандидатов все равно потребуется проверить остальные 3 свойства для каждого узла-кандидата. Если бы он выбрал не очень селективный индекс (поскольку обычно бывает много узлов с одинаковым значением свойства), то для каждого MERGE нужно было бы проделать много работы.

Предполагая, что значение свойства sym_dev уникально, приведенный выше запрос упрощает MERGE, так что он быстро обнаружит, существует ли нужный узел symaccess_symdev, и без необходимости проверять какие-либо другие свойства.

person cybersam    schedule 05.07.2018