ACIDとデータベーストランザクションの関係は何ですか?
ACIDはデータベーストランザクションを提供しますか、それとも同じですか?
誰かがこのトピックを啓発できますか?
ACIDとデータベーストランザクションの関係は何ですか?
ACIDはデータベーストランザクションを提供しますか、それとも同じですか?
誰かがこのトピックを啓発できますか?
回答:
ACIDは、データベースを変更するときに適用する一連のプロパティです。
トランザクションは、いくつかのACIDプロパティを実現するために使用される一連の関連する変更です。トランザクションは、ACIDプロパティを実現するためのツールです。
原子性とは、トランザクションのすべてが発生するか、発生しないことを保証できることを意味します。複雑な操作を1つのユニットとして実行することも、すべてを実行することも、何も実行しないこともできます。クラッシュ、停電、エラーなど、関連する変更の一部のみが発生した状態になることはありません。
一貫性とは、データの一貫性を保証することを意味します。関連データに課せられている制約に違反することはありません。
分離とは、あるトランザクションが、まだ完了していない別のトランザクションからデータを読み取ることができないことを意味します。2つのトランザクションが同時に実行されている場合、それぞれがシーケンシャルに実行されているかのように世界を認識し、一方が他方によって書き込まれたデータを読み取る必要がある場合、もう一方が完了するまで待機する必要があります。
耐久性とは、トランザクションが完了すると、すべての変更が耐久性のある媒体(ハードディスクなど)に記録されていることが保証され、トランザクションが完了したことが同様に記録されることを意味します。
したがって、トランザクションはこれらのプロパティを保証するためのメカニズムです。これらは、関連するアクションをグループ化する方法であり、全体として、操作のグループをアトミックにし、一貫した結果を生成し、他の操作から分離し、永続的に記録することができます。
ACIDは、トランザクション処理エンジンの望ましい特性です。
DBMSは(適切であれば)特定の種類のトランザクション処理エンジンであり、通常、これらのプロパティを完全にではなく非常に大規模に公開します。
しかし、これらのプロパティを公開できる他のエンジンが存在します。かつて「TPモニター」と呼ばれていた種類のソフトウェアがその代表例です(今日の同等のものは主にWebサーバーです)。
このようなTPモニターは、DBMS以外のリソース(プリンターなど)にアクセスでき、ユーザーに対してACIDを保証できます。プリンタがトランザクションに関与している場合のACIDの意味の例として、
わかりやすくするために、プリンターの例を少し変更しました
2ページのコンテンツを持つ1つのドキュメントがプリンターに送信されました
トランザクション -プリンターに送信されたドキュメント
これが誰かがACIDの概念のコツをつかむのに役立つことを願っています
ACIDとデータベーストランザクションの関係は何ですか?
リレーショナルデータベースでは、すべてのSQLステートメントをトランザクションのスコープ内で実行する必要があります。
トランザクション境界を明示的に定義しないと、データベースは暗黙的なトランザクションを使用して、個々のステートメントをすべてラップします。
暗黙的なトランザクションは、ステートメントが実行される前に開始され、ステートメントが実行された後に終了(コミットまたはロールバック)します。暗黙的なトランザクションモードは、一般に自動コミットと呼ばれます。
この記事で説明したように、トランザクションは、含まれているすべての操作が成功した場合にのみ成功する読み取り/書き込み操作のコレクションです。
本質的に、トランザクションは4つのプロパティ(一般にACIDと呼ばれる)によって特徴付けられます。
ACIDはデータベーストランザクションを提供しますか、それとも同じですか?
リレーショナルデータベースシステムの場合、SQL標準ではトランザクションがACID保証を提供する必要があると指定されているため、これは当てはまります。
原子性は個々の操作を取り、それらをオールオアナッシング作業単位に変え、含まれているすべての操作が成功した場合にのみ成功します。
トランザクションは、状態の変化をカプセル化する場合があります(読み取り専用の場合を除く)。トランザクションは、同時にインターリーブされる同時トランザクションの数に関係なく、常にシステムを一貫した状態にしておく必要があります。
一貫性とは、コミットされたすべてのトランザクションに制約が適用されることを意味します。これは、すべてのキー、データタイプ、チェック、およびトリガーが成功し、制約違反がトリガーされないことを意味します。
トランザクションには同時実行制御メカニズムが必要であり、インターリーブされている場合でも正確性が保証されます。トランザクションの失敗はシステムの状態を壊してはならないので、分離はコミットされていない状態の変化を外部の世界から隠すという利点をもたらします。分離は、悲観的または楽観的ロックメカニズムを使用した同時実行制御によって実現されます。
トランザクションが成功すると、システムの状態が永続的に変更され、終了する前に、状態の変化が永続的なトランザクションログに記録されます。システムがシステムクラッシュや停電の影響を突然受けた場合、未完了のコミット済みトランザクションがすべて再生される可能性があります。
耐久性とやり直しログの詳細については、こちらの記事をご覧ください。
ACIDプロパティは非常に古く、データベース理論の重要な概念です。このトピックについてはたくさんの投稿を見つけることができますが、これはRDBMSの非常に重要なトピックであるため、これについて共有回答を開始したいと思います。
データベースシステムは、すべてのトランザクションに特定の特性があるさまざまな種類のトランザクションで機能します。この特性は、既知のACIDプロパティです。ACIDプロパティは、すべてのタスクを実行するために、すべてのデータベーストランザクションの権限を取得します。
原子性:すべてまたは何もコミットしない。
一貫性:すべてのルールの検証とトランザクションの制約に関して一貫した記録を作成します。
分離:2つのトランザクションが互いに気づかないようにします。
耐久性:コミットされたデータは永久に保存されます。 この記事から引用したリファレンス:
[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