Подсказки для блокировки таблицы с одновременным доступом для чтения и записи - PullRequest
0 голосов
/ 07 февраля 2011

Я видел несколько похожих вопросов, но ни один из них не отвечал этому сценарию.

У меня есть онлайн-приложение для оценки, которое представляет пользователям вопросы, по одному вопросу на страницу, и записывает их ответы.Пользователи могут перемещаться между вопросами, и их ответы автоматически сохраняются.

При переходе с одной страницы (вопрос Q1) на другую (вопрос Q2) база данных должна:

  • ОБНОВЛЕНИЕответ этого пользователя на Q1 (если он существует) или ВСТАВИТЬ ответ на Q1.
  • ВЫБЕРИТЕ ответ этого пользователя на Q2 (если он существует), чтобы заполнить страницу.

The [RESPONSE] таблица является предметом спора со многими пользователями одновременно чтения и записи.Однако каждый пользователь будет когда-либо читать и писать только в свои собственные строки .

. Это наводит меня на мысль, что я могу использовать (READUNCOMMITTED), и UPDATE с (NOLOCK) безопасно.Меня беспокоит то, что я не хочу ситуации, когда пользователь переходит на страницу вперед, а затем возвращается назад и получает старые данные до того, как они были обновлены.Я могу поместить две операции в транзакцию, но если я использую подсказки NOLOCK, это что-нибудь изменит?

Какую стратегию блокировки я могу использовать, чтобы уменьшить раздоры в этой таблице?

Мыв настоящее время на SQL2000.

1 Ответ

2 голосов
/ 07 февраля 2011

Вам просто нужно использовать подсказку rowlock и убедиться, что у вас есть соответствующие индексы, чтобы можно было напрямую искать строки без необходимости сканировать другие строки, принадлежащие разным пользователям.

...