Необъяснимое исключение 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. Таким образом, если ваш запрос пытается создать несколько ребер с предоставленными пользователем идентификаторами, которые должны быть уникальными, вся транзакция либо сработает (и зафиксируется), либо завершится ошибкой (и откатится). Эта ошибка, как вы заметили, связана с тем, что по крайней мере один из предоставленных вами идентификаторов уже используется.

У вас есть несколько вариантов.

  1. Измените запрос на шаблон «создать, если не существует».
  2. Запустите запрос, чтобы узнать, какие идентификаторы уже существуют, прежде чем пытаться добавить их все.

В следующем выпуске Apache TinkerPop мы планируем добавить mergeшаг, который облегчит этот тип задачи. До этого времени один из двух вариантов выше - это путь в целом.

Другие вопросы по тегам