Мое представление о безтыквенной регистрации:
1) При входе в профиль генерируется уникальный ключ (К1) по которому можно однозначно идентифицировать клиента и факт его логина.
2) В профиле есть ссылка на статическую страницу регистрации, которая лежит на сервере и выдается клиентам в первозданном виде (никакой динамики). До часа X там пустая страница, чтоб обновление страниц работало.
3) В час Х на место этой страницы выкладывается правильная. Которая содержит ключ (К2) для идентификации соревнований +подгружает только один файл, со свободными местами в категориях. JavaScript`ом на стороне !клиента! модифицируется, отключаются кнопки, скрываются категории без мест и т.д. Очень важно не делать это на сервере.
4) При нажатии кнопки зарегистрировать команду на сервер отправляются два ключа К1 и К2, от сервера приходит ключ К3 идентификатор поданной заявки.
5) На сервере крутится процесс который регистрирует заявки, выстраивает их в очередь и в фоне начинает добавлять их в БД попутно проверяя не кончились ли места. Заявки за последний час хранятся в оперативке и не ведут к обращению к БД. Этот же процесс отвечает HTTP серверу на статус заявки и все операции с ней.
6) Клиент должен получить страницу результатов регистрации, в которой единственный динамический элемент - статус заявки (в очереди, отклонена, зарегистрирована, готова к оплате, оплачена)
7) Если заявка зарегистрирована, то нужно ввести название команды и одного участника. Результат отправляется на сервер, где тот же процесс в фоне добавляет инфу о команде в БД, после добавления переводит в статус готова к оплате.
8) После чего заявка оплачивается.
9) Еще можно добавить страницу со списком заявок пользователя, их от того же процесса можно получить.
Т.е. основные момнты:
1) Минимизировать количество генерируемых страниц.
2) Развязать пользователей и БД.
3) Нужна программка/скрипт которая будет хранить историю за последний час в оперативке и выдавать ее HTTP серверу не нагружая БД.