Понимание транзакций в базах данных - PullRequest
1 голос
/ 01 апреля 2012

Я новичок в приложениях баз данных, и я пытаюсь использовать Datamapper для создания веб-приложений ruby.

Я наткнулся на этот фрагмент кода, который я не понимаю:

transaction do |txn|
    link = Link.new(:identifier => custom)
    link.url = Url.create(:original => original)
    link.save   
end

У меня есть несколько вопросов: что такое транзакции?И почему это было предпочтительнее, чем просто:

link = Link.new(:identifier => custom)
link.url = Url.create(:original => original)
link.save   

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

Спасибо!

Ответы [ 2 ]

3 голосов
/ 01 апреля 2012

Транзакция является неделимой единицей работы. Идея исходит из мира баз данных и связана с проблемами выбора / обновления данных. Рассмотрим следующую ситуацию:

  1. пользователь A запрашивает объект O, чтобы изменить его.
  2. Пока А делал свои вещи, пользователь Б попросил тот же объект. Объект O в настоящее время одинаков для обоих пользователей.
  3. Затем A помещает обновление в базу данных с измененным свойством O1 для объекта O. Пользователь B не получил этого изменения - его объект O остается таким же, как и раньше.
  4. B помещает обновление в базу данных с измененным свойством O2 в объект O. Изменение в O1 фактически теряется.

По сути, это связано с многопользовательским доступом и изменениями - возникает несколько видов проблем.

Транзакции также используются для объединения различных операций в один оператор логической обработки. Например, вам нужно удалить пользователя со всеми его / ее фотографиями.

Тема действительно обширна, чтобы ее охватить в одном посте, поэтому я рекомендую прочитать следующие статьи: wiki # 1 и wiki # 2 .

1 голос
/ 01 апреля 2012

Транзакция - это серия инструкций, которые после выполнения рассматриваются как одна атомарная инструкция.

Это означает, что для успешного выполнения транзакции все инструкции должны быть успешными. Если произойдет сбой только одного из них, вы вернетесь в состояние, в котором вы были до начала транзакции. Это хорошо для отказоустойчивости, например.

Еще одно поле, в котором полезны транзакции, находится в параллельных приложениях. Использование транзакции позволяет избежать вмешательства других процессов.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...