web-dev-qa-db-ja.com

トランザクションの原子性は一貫性を意味します

トランザクションには、原子性と一貫性の両方が必要であると言われています。しかし、一貫性のポイントは何ですか?

送金で両方のアカウントを更新することを確認すると、一貫性が保たれます。一貫性に関するウィキペディアの記事によると、一貫性は一連のプログラム上の制約、不変条件です。ただし、トランザクション操作は自由にコーディングできます。ですから、プログラマーに必要なのは、Atomicity、Isolation、Durabilityだけだと思います。整合性は、トリガーやストアドプロシージャなど、追加の便利なDBツールであり、絶対的な低レベルの要件ではありません。 AIDが与えられると、プログラマーは常に一貫性を確保できます。ユーザーデータを確認し、ルールに違反した場合はリクエストを拒否するだけです。正しい?

ウィキペディアのように見えます データの整合性で原子性と整合性を識別します 記事ですが、ACIDトランザクションに関する記事ではありません。

結果整合性を聞いてみると、開発者はDBが常に正しいスナップショット状態にあることを意味していることがわかります。つまり、データが安定しており、DBでトランザクションをクエリ/発行できます。これは、DBが移行中に使用できる場合は実行できませんでした。つまり、一貫性のあるDBは、いつでも制約を満たすDBです。ただし、操作がアトミックである場合は、制約を満たします。 Atomicityは、トランザクション結果のみが表示されることを意味します。つまり、スナップショットのみが表示されることを意味します。これは、一貫性を意味します。それが独立した財産であるかのように、なぜあなたは一貫性を選び出す必要があるのですか?

2

トランザクションの原子性は一貫性を意味します

本当じゃない。存在しない顧客の注文を追加するトランザクションはアトミックですが、データの一貫性が失われます。

あなたの例に従うために、一貫した銀行取引は、すべての借方と貸方の合計が正確に0であることを保証する必要があります。アトミック取引は、必要なすべてのテーブルが更新されるか、まったく更新されないことを保証するだけで、更新される値については何も述べません。と。

原子性は、データの整合性を確保するために使用されるツールの1つですが、それだけではありません。

1
mustaccio

これが私がそれを手に入れた方法です。ユーザーが部分的に適用されたトランザクション(原子性違反)を確認できる場合、データベースに一貫性がなくなる可能性があります。ただし、トランザクション自体がクレイジーで、アトミックに実行されるはずのすべてのアクションが含まれていない場合にも、同じ破損したビューが発生する可能性があります。したがって、アトミック性が与えられると、データベースの一貫したビュー/スナップショットを常に実現できます。ただし、DBユーザーは、状態遷移を正当な状態遷移のみに制限できるデータベースを扱うことを好みます。したがって、アトミック性はDBユーザーが安定した状態で作業することを保証し、一貫性は有効な状態遷移のみが発生することを保証します。

0