sql >> データベース >  >> RDS >> Sqlserver

楽観的ロックと悲観的ロック

    Optimistic Lockingは、レコードを読み取り、バージョン番号をメモし(これを行う他の方法には、日付、タイムスタンプ、またはチェックサム/ハッシュが含まれます)、レコードを書き戻す前にバージョンが変更されていないことを確認する戦略です。レコードを書き戻すときは、バージョンの更新をフィルタリングして、アトミックであることを確認します。 (つまり、バージョンを確認してからディスクにレコードを書き込むまでの間に更新されていません)、1回のヒットでバージョンを更新します。

    レコードがダーティである場合(つまり、バージョンが異なる場合)、トランザクションを中止し、ユーザーはトランザクションを再開できます。

    この戦略は、セッションのためにデータベースへの接続を必ずしも維持する必要がない、大量のシステムおよび3層アーキテクチャに最も適しています。この状況では、接続がプールから取得され、あるアクセスから次のアクセスに同じ接続を使用していない可能性があるため、クライアントは実際にデータベースロックを維持できません。

    悲観的ロックとは、レコードを使い終わるまで、排他的に使用するためにレコードをロックすることです。楽観的なロックよりもはるかに優れた整合性がありますが、デッドロックを回避するためにアプリケーションの設計に注意する必要があります。ペシミスティックロックを使用するには、データベースへの直接接続(通常、2層クライアントサーバーアプリケーションの場合)または接続とは独立して使用できる外部で使用可能なトランザクションIDのいずれかが必要です。

    後者の場合、TxIDを使用してトランザクションを開き、そのIDを使用して再接続します。 DBMSはロックを維持し、TxIDを介してセッションをバックアップできるようにします。これは、2フェーズコミットプロトコル(XAやCOM +トランザクションなど)を使用する分散トランザクションがどのように機能するかを示しています。



    1. SQL Serverデータベースの回復保留状態を修正するにはどうすればよいですか?

    2. Oracle ORA-12154:TNS:サービス名エラーを解決できませんでしたか?

    3. MySqlで同じ列値を持つ行を返す方法

    4. PHPでPDOを使用して開いたSQL接続を閉じる必要がありますか