Необъяснимое исключение ConstraintViolationException с AWS Neptune
Я получаю это ограничениеViolationException с AWS Neptune, когда пытаюсь создать кучу ребер. Проблема в том, что он не сообщает, какое ребро уже существует. Я добавляю примерно 50 ребер одновременно, используя скрипт через java gremlin-driver.
Кто-нибудь сталкивался с таким сценарием?
org.apache.tinkerpop.gremlin.driver.exception.ResponseException: {"requestId":"c1e55266-6fa9-44f6-91b3-74f08d227ffd","code":"ConstraintViolationException","detailedMessage":"Edge with id already exists: "}
1 ответ
База данных поддерживает запись транзакций ACID. Таким образом, если ваш запрос пытается создать несколько ребер с предоставленными пользователем идентификаторами, которые должны быть уникальными, вся транзакция либо сработает (и зафиксируется), либо завершится ошибкой (и откатится). Эта ошибка, как вы заметили, связана с тем, что по крайней мере один из предоставленных вами идентификаторов уже используется.
У вас есть несколько вариантов.
- Измените запрос на шаблон «создать, если не существует».
- Запустите запрос, чтобы узнать, какие идентификаторы уже существуют, прежде чем пытаться добавить их все.
В следующем выпуске Apache TinkerPop мы планируем добавить
merge
шаг, который облегчит этот тип задачи. До этого времени один из двух вариантов выше - это путь в целом.