У меня есть приложение, критичное к производительности, которое должно сопоставлять несколько узлов другому узлу на основе сопоставления с регулярным выражением.Мой текущий запрос выглядит следующим образом:
MATCH (person: Person {name: 'Mark'})
WITH person
UNWIND person.match_list AS match
MATCH (pet: Animal)
WHERE pet.name_regex =~ match
MERGE (person)-[:OWNS_PET]->(pet)
RETURN pet
Однако этот запрос выполняется ОЧЕНЬ медленно (около 500 мс на моей рабочей станции).График содержит около 500 тыс. Узлов, и около 10 тыс. Будет соответствовать регулярному выражению.
Мне интересно, есть ли более эффективный способ переписать этот запрос, чтобы он работал так же, но обеспечил бы повышение производительности.
РЕДАКТИРОВАТЬ:
Когда я запускаю этот запрос для нескольких многопоточных лиц, я получаю TransientError
исключение
neo4j.exceptions.TransientError: ForsetiClient[3] can't acquire ExclusiveLock{owner=ForsetiClient[14]} on NODE(1889), because holders of that lock are waiting for ForsetiClient[3].
РЕДАКТИРОВАТЬ 2:
Person:name
является уникальным и индексируется
Animal:name_regex
не индексируется