Neo4J Вставка занимает много времени - PullRequest
0 голосов
/ 04 июля 2018

У меня есть запрос, который занимает много времени, чтобы вставить в 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;

1 Ответ

0 голосов
/ 05 июля 2018

Если предположить, что значение свойства 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;

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

нужно было бы проделать большую работу.

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

...