Я начинаю проект, где мне нужно убедиться, что большой объем пользователей может получить промо-код для нескольких рекламных акций.SQL Server получает уникальные записи
Коды имеют приложенную к ним денежную стоимость, поэтому жизненно важно, чтобы каждый пользователь обращался только к одному коду, и ни один из двух пользователей не может получить код.
Мой план до сих пор заключается в том, чтобы создать таблицу в SQL Server, известную как code_pool
, и делать объемную вставку кодов каждый раз.
SQL Server 2005 таблицы будет выглядеть следующим образом ...
[id](int pk), [promo_code] varchar(150), [promotion_id](int fk)
Пользователей затем извлечь каждый код с помощью хранимой процедуры, что бы получить первую запись из таблицы для этой акции, и затем удалить (или обновление) запись перед возвратом кода в результате процедуры.
Мой вопрос: как я могу обеспечить, чтобы запись была заблокирована так, чтобы только один пользователь мог когда-либо получать каждую запись и что ни один из двух пользователей, обращающихся к proc одновременно, никогда не получит один и тот же код?
Нужно ли блокировать стол/записи, и если да, то как это будет складываться в загруженной производственной среде?