Я создаю похожую на аукцион систему в Rails 3 (используя PostgreSQL в качестве базы данных).
Представьте, что у вас есть продукт. У продукта много предложений.
Я обеспокоен тем, что происходит, когда 2 разных пользователя нажимают кнопку «Ставка» одновременно (при условии, что у меня есть как минимум 2 сервера приложений, и они одновременно попадают на серверы). У меня есть два возможных поведения для этого:
- один из них «выигрывает», а другой получает сообщение об ошибке
- одна из них «выигрывает», а другая ставка создается следующей (каждая ставка добавляет 0,01 € к цене). Таким образом, все параллельные заявки повторяются до создания
Итак, мой вопрос: как решить эту проблему на Rails 3? Я думаю, что использование обычных транзакций не достаточно, или это?