У меня есть распределенная система, которая должна выполнять операцию атомной базы данных. По сути, приложение должно выполнить команду find or create
.Распределенная блокировка и обработка исключений нарушения ограничений для потока управления
Я могу думать о двух вариантах:
A) Используйте распределенную блокировку, чтобы убедиться, что операция является атомарной через процессы/системы. Проверьте, существует ли запись. Получите или создайте запись соответственно.
B) Всегда пытайтесь вставить запись. Разрешить базе данных поднять уникальную ошибку нарушения ограничений и уловить исключение в приложении. Если возникает исключение, то оно существует, поэтому вместо этого записывайте запись.
Опция A кажется более правильный очевидно, но более качественно?
Использование обработки исключений для потока управления вонючее, но действительно ли это ужасно? Я чувствую, что вариант B более читабельен и легче рассуждать. Кроме того, для базы данных не требуется блокировка.
Можете ли вы дать мне конкретную причину не использовать опцию B с конкретными доказательствами?
Спасибо!
Спасибо за эту ссылку! Я читал о postgres upsert, но я не думал «ничего не делать». Спасибо за понимание. –