2016-05-11 2 views
0

Я думал, что буду умным, и использую ExecutorCompletionService для параллелизации задач, которые вставляют кучу записей в базу данных Postgres. Мощно он отлично работает, и я вижу увеличение производительности. Однако время от времени он терпит неудачу с исключением первичного ключа. Скорее всего, из-за одновременных потоков, пытающихся создать записи одновременно. Есть ли грациозный способ справиться с этой ситуацией?Использование Java ExecutorCompletionService и Postgres вставки через MyBatis

ответ

0

Для создания первичных ключей необходимо использовать некоторый скоординированный и потокобезопасный способ. Лучшим вариантом, если ваш первичный ключ является числовым, является последовательность пользовательской базы данных - это безопасно и эффективно.

0

Оказывается, моя первоначальная проблема связана с тем, что последовательность отличается от количества записей в таблице. Фактически Postgres может создавать новые уникальные идентификаторы одновременно, насколько я могу судить. Никакой дополнительной кодировки не требуется.

Смежные вопросы