Соответствующее преимущество в Neo4j Cypher действительно медленное - PullRequest
0 голосов
/ 07 января 2020

У меня есть база данных с узлами 500К и отношениями 700К. Я создал 500 дополнительных отношений с новым типом DummyEdge с edge_id атрибутами от «1» до «500». Теперь я хочу запросить и изменить эти отношения. Выполнение запроса MATCH ()-[e:DummyEdge {edge_id:"123"}]->() SET e.property="value" действительно медленное, оно занимает около 300 мс, поэтому, если я выполню 500 таких запросов, это займет около 2-3 минут. Я также позвонил CREATE INDEX ON :DummyEdge(edge_id), но это не ускорило выполнение запроса.

Есть ли способ ускорить такую ​​массовую модификацию отношений?

1 Ответ

1 голос
/ 07 января 2020

CREATE INDEX создает индекс для узлов , поэтому такой индекс не повлияет на производительность вашего запроса.

Поскольку ваш шаблон MATCH , ()-[e:DummyEdge {edge_id:"123"}]->(), при отсутствии информации о конечных узлах, neo4j должен просмотреть все отношения в БД, чтобы найти те, которые вы хотите. Вот почему ваш запрос такой медленный.

Было бы намного эффективнее, если бы (как сказал @ MichaelHunger) ваш запрос содержал полезную информацию (например, метку или индексированную пару метка / свойство) для любого из узлы в вашем MATCH шаблоне. Это поможет neo4j сузить число взаимосвязей, которые необходимо отсканировать. В качестве примера, давайте заявим, что начальный узел должен иметь метку Foo:

MATCH (:Foo)-[e:DummyEdge {edge_id:"123"}]->()
SET e.property="value"

С помощью вышеупомянутого запроса neo4j должен будет только посмотреть на исходящие отношения узлов Foo, что намного быстрее, поскольку neo4j может быстро находить узлы с заданной меткой (или индексом).

Теперь neo4j также поддерживает индексы полнотекстовой схемы , которые поддерживают индексы отношений. Однако эти виды индексов требуют гораздо больше усилий с вашей стороны и могут оказаться излишними для вашего варианта использования.

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