データベースダーティー読み取り、反復不能読み取り、ファントム読み取り

ときにデータを読み込む際に、複数のトランザクションが同時に、データベースが発生します:データベースが汚れ、非反復可能読み取りを読んで、ファントムをお読みください。彼らはそれぞれの分離レベルの意味を理解するのに役立ちます理解しています。

 

まず、トランザクション分離レベル

サービス:それは実行される作業の単一の論理ユニットとしての一連の操作を意味し、いずれかのすべてが行うか行いません。 

トランザクションのACIDプロパティ:原子性、一貫性、持続性、隔離。

データベーストランザクションの4つのACIDプロパティで、単離は、最もリラックスものです。データ操作中機構または複数のデータベースの同時実行制御機構をロックするより高い分離レベルを使用して得ることができます。しかし、データベースの分離レベルの向上と、データの同時実行が低下します。だから、良いトレードオフを作る方法は、並行性と分離の間の重要な課題となっています。隔離の異なるレベルの読みと異なる現象を解決するために導くことができます。

第二に、汚れた読書

読まれるダーティ、ダーティデータ、無効なデータを読みます。

トランザクションがデータにアクセスされ、データが変更されており、この変更はデータベースに(コミット)に提出されていない場合は、その後、別のトランザクションは、データにアクセスし、このデータを使用しています。データはまだコミットされていないので、このデータは、その後、別のトランザクションは、このデータがダーティデータは、操作が間違っているダーティデータを参照することができるで読みます。

例えば、コードは、今回提出されなかった後、私はローカルのデータベース操作を変更すると、他の誰かがダーティデータを読まれる私のコードを、使用していました。私は、コードを提出しなかったので他の人が単にコードが汚れていると得る一方で、任意の時点で、コードを変更することがあります。

この場合、複数の開発者によって複雑に高く、他の人はいつも私のコードを読み取ることができますが、我々のコードの分離が悪いので、非常に簡単に、ダーティデータを読み取るために。

私たちは、他の人に読まれる、コミットされていない場合には、コードをしたくないので、私たちは、コードの分離を増やす必要があります。 

第三に、非反復可能読み取り

ダーティデータ読み出しの問題を解決するために、我々は、コードの分離を増加させることによって達成しました。私は、コードを変更すると、他の人は子供がダーティデータを読み取らないように、私のアクセスコードのみ、コードを提出した後にアクセスすることができます読み取ることが許可されていません。

これは、コード間の分離を向上させように私が入れた後、コードを読むために他の人々を提出する必要があるため、同時実行は、低くなります。しかし、非反復可能読み取りに問題があるでしょう。

別の例は:ジョー・スミスと私は、クラスのコードを訪れ、1つの定数が変更であり、私がコンテンツを提供するために、再度、ときジョー・スミス・アクセス・コードを提出した非反復可能読み取りである、同じではありません。

非反復可能読み取ります。これは、データベースアクセス、トランザクションのスコープ内で同じクエリを参照するが、2つの異なるデータを返しました。これが生じたその他の事項を変更するクエリを提出するシステムによるものです。このような読み、データを再度読み取りをテストし、読み出すために、データ、T1の値を変更するには、データの読み取りトランザクションT1、T2のトランザクションとして、我々は異なる結果を得ます。

これは非反復可能読み取り分離とコードを改善する問題を解決するような非反復可能読み取りの問題を解決するために、あなたは、ジョー・スミスのコードは、私がアクセスすることはできません読み取る必要がある、並行処理が軽減されます。

第四に、ファントム読み取り

ジョー・スミスは、クラス内のコードを読んだとき、私は非反復可能読み取りの問題を解決するための修正のこのタイプを実行していないが、私はジョー・スミスが読んでいる編集ませんが、私は、隔離の解除後に、いくつかのクラスを追加しましたクラス、ジョー・スミスは私の変更されたクラスを読んでいないだろう。しかし、私はいくつかのクラスを追加または削除することがあります。以前はこの時ジョー・スミスへとクラスの合計数が変更されているお読みください。ジョー・スミスは、データを読み込む前に、他の言葉では、正確ではありません。これは読みファントムです。

ファントムをお読みください。複数のクエリは、(そのような行の増加または減少など)が同じではない戻り、同じトランザクション内で結果セットを指します。同じ条件下で、例えば、1Nのレコードが同じトランザクション最初のクエリが、問い合わせ内が、N +レコード幻覚と思われる第二の時間を、。

ジョー・スミスは、コードを読むときマジック読書は、私が何も操作を行わないコード、私たちの間の最大の分離、同時実行最小に解決されます。

汚い読み込み、非反復可能読み取りを解決するために、ファントムは、読み取りなどの現象を読んで、あなたは、トランザクションの分離レベルを上げる必要があります。同時に、同時容量下部、トランザクション分離レベルが高いです。だから、読者はまた、ビジネスニーズに応じて秤量する必要があります。

 

トランザクション分離現象を読み取るがハイからローに生成することができるされている:汚いは、非反復可能読み取り、ファントムリードを読み出します。

ダーティリードは、コミットされていないデータを読み込むことをいいます。

反復不能読み取りトランザクションに同じクエリ内に複数回を参照し、異なる結果を読み出します。

マジック読書の先生は、特定のシーンの読み込みを繰り返すことはできません。トランザクションのクエリの範囲内の多くの時間が異なる結果を取得します。

書面でロックすることにより、あなたはダーティリードを解決することができます。

読書にロックすることにより、あなたは非反復可能読み取りを解決することができます。

シリアライズすることにより、ファントム読み取り解決することができます。

これらのタイプのソリューションの上に実際にデータベースのいくつかの分離レベルです。

おすすめ

転載: blog.csdn.net/vandet100/article/details/87775420