Поскольку наше приложение Rails имеет дело с повышением активности пользователей и нагрузки, мы начинаем видеть некоторые проблемы с одновременными транзакциями.Мы использовали JavaScript для отключения / удаления кнопок после нажатия, и это работает по большей части, но не является идеальным решением.Короче говоря, пользователи выполняют действие несколько раз подряд.Поскольку действие приводит к вставке строки в БД, мы не можем просто заблокировать одну строку в таблице.Учитывая высокий уровень активности на затронутых моделях, я не могу использовать обычные механизмы блокировки (http://guides.rubyonrails.org/active_record_querying.html#locking-records-for-update), которые вы использовали бы для обновления.
Этот вопрос ( Запрет одновременной работы)Транзакции в веб-приложении ) решают аналогичную проблему, но для обеспечения решения используется блокировка файлов (flock), поэтому это не будет работать с несколькими серверами приложений, как у нас.Мы могли бы сделать что-то подобное, я полагаю, с Redis или другим хранилищем данных, которое доступно для всех наших серверов приложений, но я не знаю, действительно ли это решит проблему полностью.
Каков наилучший способпредотвратить повторяющиеся вставки базы данных из одновременно выполняемых транзакций?