Невозможно сериализовать из-за параллельных операций: memgraph
Я выполняю сочетание запросов (чтение/запись/обновление/удаление) к одному экземпляру memgraph. Чтобы сделать то же самое, я использую Java-клиент от Neo4j, все API-интерфейсы, которые я сейчас использую, являются API-интерфейсами синхронизации из драйвера.
Природа запросов в моем случае такова, что я могу выполнять их одновременно без побочных эффектов. Для лучшей производительности я запускаю запросы параллельно. Ошибка, которую я получаю, относится к
CREATE
операция, в которой я создаю границу между двумя узлами. Это согласуется с тем, что я пытался запускать одну и ту же настройку несколько раз, и каждый раз все запросы проходят, за исключением сбоя, когда дело доходит до этой стадии создания края.
Запрос для справки:
OPTIONAL MATCH (node1) WHERE id(node1) = $nodeId1
OPTIONAL MATCH (node2) WHERE id(node2) = $nodeId2
CREATE (node1)-[:KNOWS]-> (node2)
Я не могу найти никакой документации по любой такой ошибке. Пожалуйста, укажите мне какой-нибудь документ, подобный этому, или любой обходной путь, с помощью которого я могу попросить memgraph приостановить запрос, если те же объекты обрабатываются каким-либо другим запросом.
Я думаю, что один из подходов - просто реализовать повтор для любых таких неудачных запросов, но я ищу более чистый подход.
PS Я запускал такую же настройку ранее на Neo4j и не сталкивался с какими-либо проблемами.
1 ответ
Да, в случае этой ошибки код должен повторить запрос. Я думаю, что аналогичная проблема может возникнуть в Neo4j, но поскольку Memgraph более оптимистичен в отношении блокировки, иногда ошибка может возникать чаще. В общем, правильный подход заключается в реализации обработки ошибок для этого случая.