- Как долго вы хотели держать транзакцию открытой?
- Сколько одновременно работающих пользователей вы собираетесь поддерживать?
Это два вопроса, которые вам нужно задать себе. Если ответ для первого - «долгое время», а для второго - «много», то такой подход, вероятно, столкнется с проблемами.
Итак, мой ответ на первый вопрос: нет, это, вероятно, неправильный подход.
Если вы выберете метод транзакционной блокировки, вы ограничите свою масштабируемость и время отклика. Вы также можете столкнуться с ошибками базы данных. например SQL Server (при условии, что вы используете SQL Server) может быть очень жадным с блокировками и может блокировать больше ресурсов, чем вы запрашиваете / ожидаете. Приложение может запросить некоторые блокировки на уровне строк, чтобы заблокировать записи, которыми оно «владеет», однако SQL Server может перевести эти блокировки строк в блокировку таблицы. Это блокирует и может привести к тайм-ауту или, возможно, к тупикам.
Я думаю, что лучший способ удовлетворить требования, как вы их сформулировали, - написать систему управления блокировками / проверкой записей. Мартин Фаулер называет это пессимистическим автономным замком .
UPDATE
Если вы используете SQL Server 2008, вы можете установить поведение повышения блокировки на уровне таблицы:
ALTER TABLE T1 SET (LOCK_ESCALATION = DISABLE);
Это отключит эскалацию блокировки в «большинстве» ситуаций и может вам помочь.