Что такое транзакция базы данных? - PullRequest
92 голосов
/ 10 июня 2009

Может ли кто-нибудь дать прямое (но не более простое, чем возможно) объяснение транзакции применительно к вычислениям (даже если оно скопировано из Википедии)?

Ответы [ 11 ]

197 голосов
/ 10 июня 2009

Транзакция - это единица работы, которую вы хотите рассматривать как «целое». Это должно происходить полностью или не происходить вообще.

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

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

66 голосов
/ 10 июня 2009

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

  • Атомная (если изменение зафиксировано, оно происходит одним махом; вы никогда не увидите «половину изменения»)
  • Согласовано (изменение может произойти только в том случае, если новое состояние системы будет действительным; любая попытка зафиксировать недопустимое изменение завершится неудачей, оставив систему в своем предыдущем действительном состоянии)
  • Изолировано (никто не видит какую-либо часть транзакции, пока она не будет совершена)
  • Долговечный (после того, как изменение произошло - если система сообщает, что транзакция была совершена, клиенту не нужно беспокоиться о «очистке» системы, чтобы изменение «залипло»)

См. Запись в Википедии ACID для получения более подробной информации.

Хотя это обычно применяется к базам данных, это не обязательно. (В частности, см. Программная транзакционная память .)

34 голосов
/ 10 июня 2009

Вот простое объяснение. Вам нужно перевести 100 баксов со счета А на счет Б. Вы можете сделать:

accountA -= 100;
accountB += 100;

или

accountB += 100;
accountA -= 100;

Если между первой и второй операцией в паре что-то идет не так, у вас есть проблема - либо 100 долларов пропали, либо они появились из ниоткуда.

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

beginTransaction;
accountB += 100;
accountA -= 100;
commitTransaction;

либо переведет 100 баксов, либо оставит оба аккаунта в исходном состоянии.

31 голосов
/ 10 июня 2009

"Серия операторов манипулирования данными, которые должны либо полностью завершиться, либо полностью завершиться неудачей, оставив базу данных в согласованном состоянии"

10 голосов
/ 27 февраля 2014

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

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

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

Транзакция поддерживает так называемые свойства ACID:

  • A: атомарность;
  • C: последовательность;
  • I: Изоляция;
  • D: долговечность.
3 голосов
/ 10 июня 2009

http://en.wikipedia.org/wiki/Database_transaction
http://en.wikipedia.org/wiki/ACID
КИСЛОТА = A томичность, C стойкость, I сольватация, D прочность

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

1 голос
/ 14 сентября 2017

Транзакция может быть определена как набор задач, которые рассматриваются как минимальная единица обработки. Каждый минимальный блок обработки не может быть разделен дальше.

Основная операция транзакции - чтение и запись.

Все транзакции должны содержать четыре свойства, которые обычно называются свойствами ACID с целью обеспечения точности, полноты и целостности данных.

1 голос
/ 10 июня 2009

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

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

1 голос
/ 10 июня 2009

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

Из википедии:

В информатике обработка транзакций - это обработка информации, которая делится на отдельные неделимые операции, называемые транзакциями. Каждая транзакция должна быть успешной или неудачной как единое целое; оно не может оставаться в промежуточном состоянии.

http://en.wikipedia.org/wiki/Transaction_processing#Implementations

0 голосов
/ 21 марта 2014

Транзакция является неделимой единицей обработки данных -Все транзакции должны иметь свойства ACID:

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

...