У меня есть шаблон проектирования, с которым я боролся о том, как лучше всего предотвратить повторное размещение данных.
Вот шаги:
- Клиент отправляет данные с уникальным guid (сгенерированный клиентом guid - гарантированно уникальный)
- Программное обеспечение на стороне сервера гарантирует, что guid клиента еще не существует в БД
- начинается транзакция
- обработка данных (может занять от 1 до 20 секунд в зависимости от полезной нагрузки)
- совершает транзакцию
Вот сценарии:
Клиент отправляет данные с guid «1», а затем повторно отправляет данные с guid «1» до того, как на шаг (5) выполняется исходная отправка данных, затем транзакция обрабатывается дважды.
Каков наилучший шаблон проектирования для предотвращения этого без использования семафоров или блокировок? Пользователь должен иметь возможность повторить отправку, если по какой-либо причине первая отправка не удалась (проблема с оборудованием на стороне сервера и т. Д.).
Спасибо!