ホームページ  >  記事  >  仮想読み取りとは、反復不可能な読み取りを意味しますか?

仮想読み取りとは、反復不可能な読み取りを意味しますか?

藏色散人
藏色散人オリジナル
2020-05-21 11:29:032982ブラウズ

仮想読み取りとは、反復不可能な読み取りを意味しますか?

#仮想読書は反復不可能な読書ですか?

仮想読み取りと非反復読み取りは異なります。

ダーティ リード ダーティ リード: このイベントは、トランザクションがまだコミットされていないデータを読み取るときに発生します。例: トランザクション 1 がデータ行を変更し、トランザクション 2 が変更操作をコミットする前に変更された行を読み取ります。トランザクション 1 が変更操作をロールバックした場合、トランザクション 2 によって読み取られたデータは存在しないものとみなされます。

反復不可能な読み取り: このイベントは、トランザクションが同じデータ行を 2 回読み取り、取得されるデータが毎回異なる場合に発生します。例: トランザクション 1 がデータ行を読み取り、次にトランザクション 2 がその行を変更または削除し、変更操作を送信します。トランザクション 1 が行を再度読み取ろうとすると、(行が更新された場合) 異なるデータ値が取得されるか、(行が削除された場合) 行がもう存在しないことがわかります。

ファントムリード ファントムリード: このイベントは、後続の読み取り操作で検索条件を満たすデータ行が出現したが、そのデータ行が元のデータに属していない場合に発生します。たとえば、トランザクション 1 は特定の検索条件を満たすいくつかの行を読み取り、トランザクション 2 はトランザクション 1 の検索条件に一致する新しい行を挿入します。トランザクション 1 が元の行を生成したクエリを再実行すると、異なる行が取得されます。

取引シナリオは次のとおりです:

同じ銀行口座で、A は 200 元を持っており、A は 100 元を引き出し、B は 100 元を口座 B に送金します。トランザクションが分離されていない場合、次の問題が発生する可能性があります:

1. 更新の喪失の最初のタイプ: まず、A がお金を引き出すとき、口座には 200 元があり、同時に B 200元を送金し、AとBが同時に動作し、Aが動作する 100元が正常に引き出される場合、Bの動作は失敗し、ロールバックされます 口座内の最終的な金額は200元になります このように、Aの動作は次のようになります上書きされ、銀行は 100 元を失います。

2. 読みにくい: A は 100 元を引き出しましたが、送信しませんでした。B は送金を行い、口座に 100 元が残っていることに気づきました。これは、A が操作を放棄し、ロールバックしたことを意味します。B は送信しました。通常の操作では、口座の最終金額は 0 元ですが、B が A のダーティ データを読み取り、顧客は 100 元を失います。

3. 仮想読み取り: ダーティ リードと同様に、挿入操作中の読み取り問題を対象としています。たとえば、100 元の預金 C が提出されていない場合に、銀行は報告を行います。統計調査のため、口座残高が200元であるとCが提出したところ、銀行はこの時点で口座残高が300元であることを発見しました。

統計は時々更新する必要があると誰もが考えているようですが、それは正常なことです。しかし、統計がトランザクション内にある場合、これは正常ではありません。たとえば、統計アプリケーションの 1 つは、統計アプリケーションを分離する必要があります。結果をリモート ネットワーク上のコンピュータのコンピュータ画面とディスク ファイルに出力します。

パフォーマンスとユーザーの応答性を向上させるため、スレッドを 2 つに分割します。このとき、統計データが最初に完了しました。後で完成するものは矛盾する可能性があるため、どちらを優先すべきかわかりません。

4. 反復不可能な読み取り: A と B は両方とも同時に口座が 200 元であることを確認し始めました。A は 100 元の引き出しを開始し、提出しました。このとき、B は別のクエリを実行しました。最終更新の準備をしていて、結果が 100 元であることがわかった場合、B はアカウントを 100 に変更するか 0 に変更するか分からず、非常に混乱するでしょう。

ダーティ リードとダーティ リードの違いは、ダーティ リードは前のトランザクションのコミットされていないダーティ データを読み取るのに対し、非反復読み取りは前のトランザクションによって送信されたデータを再読み取ることです。

5. 失われた更新の 2 番目のタイプ: これは、反復不可能な読み取りの特殊なケースです。上記のように、B は 2 番目のクエリを作成せず、操作を直接完了します。アカウントの最終的な金額は 100元が下落すると、A の操作は上書きされ、下落すると銀行は 100 元を失います。これは、最初のタイプの失われたアップデートに似ているように感じます。

以上が仮想読み取りとは、反復不可能な読み取りを意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。