web-dev-qa-db-ja.com

データベーストランザクションとは何ですか?

(ウィキペディアからコピーされた場合でも)コンピューティングに適用されるトランザクションの簡単な(ただし、可能な限り単純ではない)説明を提供できますか?

94
Vlad Gudim

トランザクションは、「全体」として扱いたい作業単位です。完全に発生するか、まったく発生しない必要があります。

古典的な例は、ある銀行口座から別の銀行口座への送金です。そのためには、まずソースアカウントから金額を引き出してから、デスティネーションアカウントに入金する必要があります。操作は完全に成功する必要があります。途中で停止すると、お金が失われます。それは非常に悪いことです。

現代のデータベースでは、トランザクションは他のことも行います-他の人が途中で書いたデータにアクセスできないようにするなど。しかし、基本的な考え方は同じです-トランザクションは、何が起きても、作業するデータは賢明な状態になりますを確保するためにあります。彼らは、お金が1つの口座から引き出されるが、別の口座に入金されない状況がないことを保証します。

211
Vilx-

トランザクションは、状態の変化を表す方法です。トランザクションには、一般にACIDとして知られる4つのプロパティが理想的です。

  • アトミック(変更がコミットされた場合、一挙に発生します。「変更の半分」は表示されません)
  • 一貫性(システムの新しい状態が有効な場合にのみ変更が発生します。無効な変更をコミットしようとすると失敗し、システムは以前の有効な状態のままになります)
  • 分離(コミットされるまで、トランザクションのどの部分も他の誰にも見えません)
  • 耐久性(変更が発生すると-システムがトランザクションがコミットされたと言う場合、クライアントは変更を「スティック」するためにシステムを「フラッシュ」することを心配する必要はありません)

詳細については、Wikipedia [〜#〜] acid [〜#〜] エントリを参照してください。

これは通常、データベースに適用されますが、必ずしもそうである必要はありません。 (特に、 ソフトウェアトランザクションメモリ を参照してください。)

68
Jon Skeet

以下に簡単な説明を示します。アカウントAからアカウントBに100ドルを移動する必要があります。次のいずれかを実行できます。

accountA -= 100;
accountB += 100;

または

accountB += 100;
accountA -= 100;

ペアの最初の操作と2番目の操作の間に何か問題が発生した場合、問題が発生します。100ドルが消滅したか、どこからともなく出現しました。

トランザクションは、操作のグループにマークを付けて、すべて実行する(コミット)ように、またはシステム状態がまったく実行を開始していないかのように(ロールバックする)ように実行できるメカニズムです。

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

100ドルを転送するか、両方のアカウントを初期状態のままにします。

35
sharptooth

「データベースを一貫した状態のままにして、完全に完了するか完全に失敗する必要がある一連のデータ操作ステートメント」

31
Rad

トランザクションは、1つの単位として扱われる1つ以上のSQL操作のシーケンスです。

具体的には、各トランザクションは単独で実行されているように見えます。さらに、システムに障害が発生した場合、各トランザクションは完全に実行されるか、すべてではありません。

トランザクションの概念は、2つの完全に独立した懸念によって動機付けられています。 1つは複数のクライアントによるデータベースへの同時アクセスに関係し、もう1つはシステム障害に対して回復力のあるシステムを持つことに関係しています。

トランザクションは、ACIDプロパティと呼ばれるものをサポートしています。

  • A:原子性;
  • C:一貫性。
  • I:分離;
  • D:耐久性。
10
Mourad BENKDOUR

http://en.wikipedia.org/wiki/Database_transaction
http://en.wikipedia.org/wiki/ACID
ACID =[〜#〜] a [〜#〜]tomicity、[〜# 〜] c [〜#〜]onistency、[〜#〜] i [〜#〜]solation、 [〜#〜] d [〜#〜]耐久性

単一のトランザクションに複数のトランザクションリソースを関与させる場合は、 2フェーズコミット ソリューションのようなものを使用する必要があります。 [〜#〜] xa [〜#〜] は非常に広くサポートされています。

3
Stephen Denne

「トランザクション処理」の定義は、コンピュータサイエンスの概念としてのトランザクションを対象とするため、より有用であることをお勧めします。

ウィキペディアから:

コンピューターサイエンスでは、トランザクション処理は、トランザクションと呼ばれる個々の不可分な操作に分割される情報処理です。各トランザクションは、完全なユニットとして成功または失敗する必要があります。中間状態のままにすることはできません。

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

1
Adam Cooper

上記の応答に加えて、少なくとも理論的には、どの種類のリソースがトランザクションに関与するかについての制限はないことに注意する必要があります。

ほとんどの場合、それは単なるデータベース、または複数の別個のデータベースですが、プリンターがトランザクションに参加し、紙詰まりの場合などにそのトランザクションが失敗することも考えられます。

1
Erwin Smout

トランザクションは、最小処理単位と見なされるタスクのコレクションとして定義できます。各最小処理単位をさらに分割することはできません。

トランザクションの主な操作は読み取りと書き込みです。

すべてのトランザクションには、正確性、完全性、データの整合性を確保するために、一般にACIDプロパティと呼ばれる4つのプロパティが含まれている必要があります。

1
rashedcs

トランザクションは、DBMSの観点から原子的なアクションだと思います。

つまり、分離できません。はい、トランザクションでは、システムが実行するためのいくつかの命令があります。しかし、それらは1つの基本タスクを完了するために一緒にバインドされます。

例えば。橋を渡る必要があります(これをトランクションとして扱いましょう)。これを行うには、たとえば100ステップ必要です。全体的に、これらの手順は分離できません。それらの半分を完了したら、2つの選択肢しかありません。すべてを終了し続けることと、開始​​点に戻ることです。トランザクションの結果と同じです:success(commit)およびfail(rollback)

0
fwoncn

トランザクションは、データ処理の分割不可能な単位です。すべてのトランザクションには、ACIDプロパティが必要です。

すなわち:Atomicity、Consistency、Isolation、Durable Transactionはすべてまたは何もかもしれないが、無差別ではありません(つまり、ある口座から別の口座にお金を送金する場合、1つの口座がその金額を失う必要があり、他の口座はその金額を獲得する必要がありますが、ある口座から送金し、別の口座はまだ空であり、取引ではありません)

0
Mohamed Seif