Параллельные транзакции базы данных - PullRequest
2 голосов
/ 23 сентября 2010

Мое требование - получить уникальный идентификатор из базы данных для обработки на сервере приложений (кластерное приложение). Для этого у меня есть таблица с одной ячейкой, содержащая значение X. Это значение будет увеличиваться при каждом получении.

BEGIN TRAN
      UPDATE ID_TABLE SET VALUE = VALUE + 1
      SELECT VALUE FROM ID_TABLE
END TRAN

Рассмотрим график двух трансаций (T1 и T2), происходящих следующим образом.UPDATE (T1), UPDATE (T2), READ (T1), READ (T2)

Возможно ли такое чередование для транзакций базы данных.

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

Ответы [ 2 ]

2 голосов
/ 23 сентября 2010

Возможно ли такое чередование для транзакций базы данных?

Нет, на обычных уровнях изоляции транзакции этого не произойдет (см. Ниже).

Есть ли способы избежать этого, кроме получения блокировки на столе

Опять же, в обычных реализациях (таких как Oracle) вы уже блокируете строку при ее обновлении. Вторая транзакция будет блокироваться при вызове обновления до первой подтвержденной транзакции. Кроме того, у вас не будет грязных чтений (чтение незафиксированного значения из другой транзакции).

Если в вашей базе данных есть генератор последовательности, вам, вероятно, следует использовать это средство (оно было сделано именно для этой цели).

0 голосов
/ 23 сентября 2010

Это обрабатывается указанным вами «уровнем изоляции транзакций».

Я не знаю, как это делается в других БД, но в Sql Server (и в Access) вы можете указатьуровень изоляции, который следует использовать при запуске транзакции.

Возможны следующие варианты:

  • чтение незафиксировано
  • чтение зафиксировано
  • повторное чтение
  • serializable

Для SqlServer уровнем изоляции по умолчанию является ReadCommitted.Этот режим изоляции гарантирует, что другие соединения не смогут читать / просматривать измененные данные другими незафиксированными транзакциями.

Для получения дополнительной информации об уровнях изоляции, проверьте эту статью

...