ACIDとデータベーストランザクションはどのように機能しますか?


161

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

ACIDはデータベーストランザクションを提供しますか、それとも同じですか?

誰かがこのトピックを啓発できますか?

回答:


320

ACIDは、データベースを変更するときに適用する一連のプロパティです。

  • 原子性
  • 一貫性
  • 隔離
  • 耐久性

トランザクションは、いくつかのACIDプロパティを実現するために使用される一連の関連する変更です。トランザクションは、ACIDプロパティを実現するためのツールです。

原子性とは、トランザクションのすべてが発生するか、発生しないことを保証できることを意味します。複雑な操作を1つのユニットとして実行することも、すべてを実行することも、何も実行しないこともできます。クラッシュ、停電、エラーなど、関連する変更の一部のみが発生した状態になることはありません。

一貫性とは、データの一貫性を保証することを意味します。関連データに課せられている制約に違反することはありません。

分離とは、あるトランザクションが、まだ完了していない別のトランザクションからデータを読み取ることができないことを意味します。2つのトランザクションが同時に実行されている場合、それぞれがシーケンシャルに実行されているかのように世界を認識し、一方が他方によって書き込まれたデータを読み取る必要がある場合、もう一方が完了するまで待機する必要があります。

耐久性とは、トランザクションが完了すると、すべての変更が耐久性のある媒体(ハードディスクなど)に記録されていることが保証され、トランザクションが完了したことが同様に記録されることを意味します。

したがって、トランザクションはこれらのプロパティを保証するためのメカニズムです。これらは、関連するアクションをグループ化する方法であり、全体として、操作のグループをアトミックにし、一貫した結果を生成し、他の操作から分離し、永続的に記録することができます。


6
「一貫性とは、データの一貫性が保証されることを意味します。関連データに課せられている制約に違反することはありません。」制約により、データベースで定義されたもの(チェック制約など)を意味する場合、トランザクション管理はそれらが違反されないようにするために何を行う必要があるか 彼らは常に有効ではないのですか?ACIDのCには別の意味があるに違いないようです。
Marc Rochkind 2013年

20
@MarcRochkindトランザクションを使用すると、トランザクション内の個々の操作が一貫性の制約に違反する場合でも、一貫性チェックを適用できます。たとえば、複式簿記システムを更新する場合、複数の口座から引き落とし、同時に複数の口座に入金する必要がある場合があります。トランザクションがないと、すべてのステートメントの後に制約をチェックし、個々のステートメントは一貫性を維持できないため失敗します。トランザクションでは、個々のステートメントは一貫性を維持しませんが、トランザクションは全体として維持します。
ブライアンキャンベル

1
そして、ある人が別の人が書き込んだデータを読み取る必要がある場合、もう一方が完了するまで待つ必要があります」-完全に真実ではありません。最初のトランザクションはそのデータを読み取ることができ(今後も)、2番目のトランザクションが開始される前の状態を確認します。
a_horse_with_no_name 2015年

1
@BrianCampbell 1)整合性は、トランザクションの終了時のUNIQUE、FOREIGN KEYのような「チェック制約」であると同時に、(アプリケーションのビジネスロジック/要件に応じた)有効な状態ですか。2)原子性または分離のみでは一貫性が保証されませんか?Consistencyを必須プロパティとして明示的に言及する必要がありますか?
user104309 2016年

1
@a_horse_with_no_name OCC(楽観的同時実行制御)v / s PCC(悲観的)について話している。どちらも、ACID準拠のデータベースシステムに実装できます。これは、一貫性を確保するか、高可用性を確保するかによって異なります。
シッダールタ2017

37

ACIDは、トランザクション処理エンジンの望ましい特性です。

DBMSは(適切であれば)特定の種類のトランザクション処理エンジンであり、通常、これらのプロパティを完全にではなく非常に大規模に公開します。

しかし、これらのプロパティを公開できる他のエンジンが存在します。かつて「TPモニター」と呼ばれていた種類のソフトウェアがその代表例です(今日の同等のものは主にWebサーバーです)。

このようなTPモニターは、DBMS以外のリソース(プリンターなど)にアクセスでき、ユーザーに対してACIDを保証できます。プリンタがトランザクションに関与している場合のACIDの意味の例として、

  • 原子性:ドキュメント全体が印刷されるか、まったく印刷されない
  • 一貫性:トランザクションの終了時に、紙送りはページの上部に配置されます
  • 分離:印刷中に2つのドキュメントが混同されることはありません
  • 耐久性:プリンターは、空のカートリッジで「印刷」されなかったことを保証できます。

3
優れた簡潔なプリンターの例。
Lakesare 2015

2
良い例え。「一貫性」の部分はわかりません。私の考えでは、より良い例は「プリンタは10インチより大きい用紙を受け入れない」です。
skeller88 2015年

編集-「10インチより広い紙」
skeller88 2015年

1
私は少し伸びていると認めます。しかし、「一貫性」はデータに関するものであり、プリンターは正確にはデータデバイスではないため、より良い例を見つけるのは困難です。
Erwin Smout、2015年

1
プリンタには、ドキュメントのページ数が現在用紙サプライにあることがわかっているシート数よりも多い場合に、印刷を開始しないようにする機能があります。ここでコメントする多くの人々の問題です。あなたは「プリンター」について言及し、彼らは自分のホームデスクにあるばかばかしいシリアルストリーミングデバイスのみを表示し、リビングルーム全体を埋める高品質のプロフェッショナルデバイスは表示しません(そして、私が言及したような機能を備えていることがよくあります)。
Erwin Smout、2018年

21

わかりやすくするために、プリンターの例を少し変更しました

2ページのコンテンツを持つ1つのドキュメントがプリンターに送信されました

トランザクション -プリンターに送信されたドキュメント

  • 原子性 -プリンターはドキュメントの2ページを印刷するか、何も印刷しない
  • 一貫性 -プリンタが半分のページを印刷し、ページが動かなくなる。プリンタが再起動し、すべてのコンテンツを含む2ページを印刷します
  • 分離 -進行中の印刷出力が多すぎますが、プリンターはドキュメントの正しい内容を印刷します
  • 耐久性 -印刷中に電源が切れた-プリンターはエラーなしでドキュメントを再度印刷する

これが誰かがACIDの概念のコツをつかむのに役立つことを願っています


「進行中のプリントアウトが多すぎた」とはどういう意味かわかりません。「多すぎる」ではなく「複数」にすぎませんか?
icc97

17

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

リレーショナルデータベースでは、すべてのSQLステートメントをトランザクションのスコープ内で実行する必要があります。

トランザクション境界を明示的に定義しないと、データベースは暗黙的なトランザクションを使用して、個々のステートメントをすべてラップします。

暗黙的なトランザクションは、ステートメントが実行される前に開始され、ステートメントが実行された後に終了(コミットまたはロールバック)します。暗黙的なトランザクションモードは、一般に自動コミットと呼ばれます。

この記事で説明したように、トランザクションは、含まれているすべての操作が成功した場合にのみ成功する読み取り/書き込み操作のコレクションです。

原子性

本質的に、トランザクションは4つのプロパティ(一般にACIDと呼ばれる)によって特徴付けられます。

  • 原子性
  • 一貫性
  • 隔離
  • 耐久性

ACIDはデータベーストランザクションを提供しますか、それとも同じですか?

リレーショナルデータベースシステムの場合、SQL標準ではトランザクションがACID保証を提供する必要があると指定されているため、これは当てはまります。

原子性

原子性は個々の操作を取り、それらをオールオアナッシング作業単位に変え、含まれているすべての操作が成功した場合にのみ成功します。

トランザクションは、状態の変化をカプセル化する場合があります(読み取り専用の場合を除く)。トランザクションは、同時にインターリーブされる同時トランザクションの数に関係なく、常にシステムを一貫した状態にしておく必要があります。

一貫性

一貫性とは、コミットされたすべてのトランザクションに制約が適用されることを意味します。これは、すべてのキー、データタイプ、チェック、およびトリガーが成功し、制約違反がトリガーされないことを意味します。

隔離

トランザクションには同時実行制御メカニズムが必要であり、インターリーブされている場合でも正確性が保証されます。トランザクションの失敗はシステムの状態を壊してはならないので、分離はコミットされていない状態の変化を外部の世界から隠すという利点をもたらします。分離は、悲観的または楽観的ロックメカニズムを使用した同時実行制御によって実現されます。

耐久性

トランザクションが成功すると、システムの状態が永続的に変更され、終了する前に、状態の変化が永続的なトランザクションログに記録されます。システムがシステムクラッシュや停電の影響を突然受けた場合、未完了のコミット済みトランザクションがすべて再生される可能性があります。

ここに画像の説明を入力してください

耐久性とやり直しログの詳細については、こちらの記事をご覧ください。


「一貫性」について-多くの場所で、説明として「アプリケーション固有の論理的正しさ」が見られます。その場合、DBはアプリのロジックを認識できません。したがって、「一貫性」はDBの固有のプロパティにはなりません。したがって、アプリがその正確性(または「一貫性」)を実装するには、原子性と分離性だけでは不十分ですか?
user104309

1
ACIDの一貫性とは、データベースの整合性制約(PK、FK、UNIQUE制約)を意味します。ACIDは重要ですが、アプリケーションレベルの楽観的ロックを必要とする長い会話更新が失われないようにするなど、アプリケーションにはそれ以上のものが必要になる場合があります。
Vlad Mihalcea

見せてください。しかし、その前に基本的な説明が必要です。受け入れられた回答におけるブレインキャンベルのコメント「トランザクションでは、個々のステートメントは一貫性を維持しませんが、トランザクションは全体として維持します」。どのように可能ですか?そして、一貫性に関連する複数の借方と貸方はどのように関係していますか?
user104309

これらすべての質問に対する詳細な回答については、私の高性能Java Persistenceブックのトランザクションの章を確認してください。
Vlad Mihalcea

12

ACIDプロパティは非常に古く、データベース理論の重要な概念です。このトピックについてはたくさんの投稿を見つけることができますが、これはRDBMSの非常に重要なトピックであるため、これについて共有回答を開始したいと思います。

データベースシステムは、すべてのトランザクションに特定の特性があるさまざまな種類のトランザクションで機能します。この特性は、既知のACIDプロパティです。ACIDプロパティは、すべてのタスクを実行するために、すべてのデータベーストランザクションの権限を取得します。

原子性:すべてまたは何もコミットしない。

一貫性:すべてのルールの検証とトランザクションの制約に関して一貫した記録を作成します。

分離:2つのトランザクションが互いに気づかないようにします。

耐久性:コミットされたデータは永久に保存されます。 この記事から引用したリファレンス:


5

ウィキペディアを引用するには:

ACID(原子性、一貫性、分離、耐久性)は、データベーストランザクションが確実に処理されることを保証する一連のプロパティです。

トランザクションをサポートするDBMSは、これらすべてのプロパティをサポートするように努力します。商用のDBMS(およびいくつかのオープンソースDBMS)は、ACIDの完全なサポートを提供しますが、(たとえば、MSSQLでさまざまな分離レベルを使用して) ACIDnessを減らします-したがって、完全なトランザクション動作の保証が失われます。


3

[Gray]は1981年にトランザクションのACDプロパティを導入しました。1983年に[Haerder]はIsolationプロパティを追加しました。私の意見では、ACDプロパティには、より有用なプロパティセットが含まれていると思います。Atomicityの1つの解釈(トランザクションはいつでもどのクライアントからも見られるようにアトミックでなければならない)は、実際には分離プロパティを意味します。トランザクションがあるときに「隔離」プロパティが便利ですありません分離されてます。分離プロパティが緩和されたとき。ANSI SQLで言う:分離レベルが弱い場合、シリアライズ可能です。ただし、分離レベルがSERIALIZABLEの場合、分離プロパティはあまり重要ではありません。

これについては、ブログの投稿「ACIDが意味をなさない」で詳しく説明しています。

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

[グレー]トランザクションコンセプト、ジムグレイ、1981。http ://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Haerder]トランザクション指向データベース回復、Haerderとロイターの原則、1983年 http://www.stanford.edu/class/cs340v/papers/recovery.pdf


1

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

すべてのトランザクションには、一般にACIDプロパティと呼ばれる4つのプロパティが含まれている必要があります。つまり、ACIDはトランザクションのプロパティのグループです。

  • 原子性:
  • 一貫性
  • 隔離
  • 耐久性
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.