ACIDとデータベーストランザクションの関係は何ですか?
ACIDはデータベーストランザクションを提供しますか、それとも同じですか?
誰かがこのトピックを理解できますか。
ACID は、データベースを変更するときに適用するプロパティのセットです。
トランザクションは、いくつかのACIDプロパティを達成するために使用される関連する変更のセットです。トランザクションは、ACIDプロパティを実現するツールです。
アトミック性とは、すべてのトランザクションが発生することを保証できること、またはトランザクションがまったく発生しないことを保証できることを意味します。単一のユニットとして複雑な操作を行うこともできますが、クラッシュ、停電、エラーなど、関連する変更の一部のみが発生した状態になることはありません。
一貫性とは、データの一貫性を保証することです。関連データにある制約に違反することはありません。
分離とは、1つのトランザクションがまだ完了していない別のトランザクションからデータを読み取れないことを意味します。 2つのトランザクションが同時に実行されている場合、それぞれは順番に実行されているかのようにワールドを認識し、一方が他方によって書き込まれたデータを読み取る必要がある場合、他方が完了するまで待機する必要があります。
耐久性とは、トランザクションが完了すると、すべての変更が耐久性のあるメディア(ハードディスクなど)に記録され、トランザクションが完了したという事実も同様に記録されることを意味します。
したがって、トランザクションはこれらのプロパティを保証するメカニズムです。これらは関連するアクションをグループ化する方法であり、全体として、操作のグループはアトミックで、一貫した結果を生成し、他の操作から隔離され、永続的に記録されます。
ACIDは、トランザクション処理エンジンの望ましいプロパティです。
DBMSは(もしそれが良ければ)通常、これらのプロパティを非常に広範囲に公開しますが、完全には公開しません。
ただし、これらのプロパティを公開できる他のエンジンも存在します。 「TPモニター」と呼ばれていたソフトウェアの種類がその典型です(今日では、ほとんどがWebサーバーです)。
このようなTPモニターは、DBMS以外のリソース(プリンターなど)にアクセスでき、ユーザーに対するACIDを保証します。プリンターがトランザクションに関与している場合のACIDの意味の例として:
プリンターの例を少し変更して、説明しやすくしました
2ページのコンテンツを持つ1つのドキュメントがプリンターに送信されました
トランザクション-プリンターに送信されたドキュメント
これが誰かがACIDの概念を理解するのに役立つことを願っています
ACIDプロパティは非常に古く、データベース理論の重要な概念です。このトピックに関する多くの投稿を見つけることができることは知っていますが、RDBMSの非常に重要なトピックであるため、これに関する回答を共有したいと思います。
データベースシステムは、すべてのトランザクションに特定の特性があるさまざまな種類のトランザクションを処理します。この特性は、既知のACIDプロパティです。 ACIDプロパティは、すべてのデータベーストランザクションの被付与者を取得して、すべてのタスクを実行します。
原子性:すべてをコミットするか、何もコミットしません。
一貫性:トランザクションのすべてのルールと制約の検証に関して一貫した記録を作成します。
分離:2つのトランザクションが互いに認識しないようにします。
耐久性:コミットされたデータは永久に保存されます。 この記事から引用したリファレンス:
ACIDとデータベーストランザクションの関係は何ですか?
リレーショナルデータベースでは、すべてのSQLステートメントはトランザクションのスコープ内で実行する必要があります。
トランザクション境界を明示的に定義しないと、データベースは個々のステートメントをラップする暗黙的なトランザクションを使用します。
暗黙的なトランザクションは、ステートメントが実行される前に開始され、ステートメントが実行された後に終了(コミットまたはロールバック)します。暗黙的なトランザクションモードは、一般に自動コミットとして知られています。
この記事 で説明されているように、トランザクションは、含まれているすべての操作が成功した場合にのみ成功する読み取り/書き込み操作のコレクションです。
本質的にトランザクションは、4つのプロパティ(一般にACIDと呼ばれます)によって特徴付けられます。
ACIDはデータベーストランザクションを提供しますか、それとも同じですか?
リレーショナルデータベースシステムの場合、SQL標準ではトランザクションがACID保証を提供するように指定されているため、これは真です。
アトミック性は個々の操作を取得し、それらをすべてまたは何もない作業単位に変換し、含まれるすべての操作が成功した場合にのみ成功します。
トランザクションは、状態の変更をカプセル化する場合があります(読み取り専用の場合を除く)。ある時点でインターリーブされている同時トランザクションの数に関係なく、トランザクションは常にシステムを一貫した状態にしておく必要があります。
一貫性とは、コミットされたすべてのトランザクションに制約が適用されることを意味します。これは、すべてのキー、データタイプ、チェック、トリガーが成功し、制約違反がトリガーされないことを意味します。
トランザクションには同時実行制御メカニズムが必要であり、インターリーブされている場合でも正確性が保証されます。分離は、トランザクションの失敗がシステムの状態を破壊することはないため、コミットされていない状態の変更を外部から隠す利点をもたらします。分離は、悲観的または楽観的ロックメカニズムを使用した同時実行制御によって実現されます。
成功したトランザクションは、システムの状態を永続的に変更する必要があり、終了する前に、状態の変更は永続的なトランザクションログに記録されます。システムがシステムクラッシュまたは停電によって突然影響を受けた場合、未完了のコミット済みトランザクションがすべて再生される可能性があります。
耐久性とREDOログの詳細については、 この記事 をご覧ください。
引用するには Wikipedia :
ACID(原子性、一貫性、分離、耐久性)は、データベーストランザクションが確実に処理されることを保証する一連のプロパティです。
トランザクショACIDnessを減らします-したがって、完全なトランザクション動作の保証が失われます。
[グレー]は1981年にトランザクションのACDプロパティを導入しました。1983年に[ハーダー]は分離プロパティを追加しました。私の意見では、ACDプロパティには、議論するより有用なプロパティのセットがあるでしょう。 Atomicityの1つの解釈(トランザクションはいつでもクライアントから見てアトミックである必要があるということ)は、実際には分離プロパティを意味します。 「isolation」プロパティは、トランザクションがnot隔離されている場合に役立ちます。分離プロパティが緩和されたとき。 ANSI SQLで言えば:分離レベルが弱い場合はシリアライズ可能です。ただし、分離レベルが直列化可能である場合、分離プロパティは実際には重要ではありません。
これについては、ブログ記事「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 and Reuter、1983。 http://www.stanford.edu/class/cs340v/papers/recovery.pdf
トランザクションは、最小処理単位と見なされるタスクのコレクションとして定義できます。各最小処理単位をさらに分割することはできません。
すべてのトランザクションには、一般にACIDプロパティと呼ばれる4つのプロパティが含まれている必要があります。つまり、ACIDは、トランザクションのプロパティのグループです。