У нас есть система, в которой клиенты распределяют продукт по принципу «первым пришел - первым обслужен».
Наша таблица продуктов содержит инкрементный первичный ключ, который начинается с нуля, который мы используем для отслеживания того, сколько продуктов было выделено, т.е. пользователь резервирует продукт и получает 1, следующий пользователь получает 2 и т. Д.
Проблема в том, что потенциально сотни тысяч пользователей получат доступ к системе в любой данный час. Все из которых будут бить этот стол.
Поскольку нам нужно убедиться, что каждому клиенту назначен только один продукт, и отслеживать, сколько продуктов было выделено, мы используем блокировку строки для каждого клиента, обращающегося к системе, чтобы они записывали в таблицу до того, как следующий клиент достигнет система - т.е. применение правила «первым пришел - первым обслужен».
Мы обеспокоены узким местом, которым является время обработки каждого запроса, поступающего в SQL Server 2008 Enterprise Edition , и блокировкой строки.
Мы не можем использовать несколько серверов, поскольку нам нужно обеспечить целостность первичного ключа, чтобы все, что требует репликации, не работало.
Кто-нибудь знает какие-либо хорошие решения, которые особенно эффективны при обработке огромного количества запросов к одной таблице базы данных?
Немного больше информации:
По сути, эта таблица содержит только два поля - ID и CustomerID. Решение заключается в бесплатной раздаче миллиона продуктов - отсюда ожидание высокого спроса и почему использование увеличивающегося первичного ключа в качестве ключа имеет смысл для нас - как только ключ достигнет миллиона, больше клиентов не смогут зарегистрироваться. Кроме того, все продукты разные, поэтому важно правильно подобрать ключ, например, первые 100 введенных клиентов получают продукт с более высокой стоимостью, чем следующие 100 и т. д.