リレーショナル データベースでは、悲観的ロックと楽観的ロックがリソース同時実行シナリオのソリューションです。次に、これら 2 つの同時実行ソリューションの実際の使用法と利点と欠点について詳しく説明します。 まず、データベースを定義し、次のように単純な在庫テーブルを作成します。 テーブル「order_stock」を作成します( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `oid` int(50) NOT NULL COMMENT '製品ID', `quantity` int(20) NOT NULL COMMENT '在庫', 主キー (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 デフォルト CHARSET=utf8; 数量は、さまざまな商品 oid の在庫を表します。次に、OCC と PCC は、このデータベースをデモンストレーションに使用します。 楽観的ロック (OCC) 複数ユーザーの同時トランザクションは処理中に互いに影響を及ぼさず、各トランザクションはロックを生成せずに影響を受けるデータの一部を処理できることを前提としています。データの更新をコミットする前に、各トランザクションはまず、他のトランザクションがデータを読み取った後にそのデータを変更したかどうかを確認します。他のトランザクションに更新がある場合、コミットされているトランザクションはロールバックされます。 つまり、「楽観的ロック🔒」では、ロックを取得したユーザーが成功する可能性が高いと判断されるため、実際にデータの更新が必要な業務操作の最後のステップでロックを取得すれば十分です。これにより、データベース自体によって定義された行ロックの使用を回避し、デッドロックを回避できます。 order_stock を更新し、 quantity = quantity - 1 を設定します。 WHERE oid = 1 かつ quantity - 1 > 0 です。 楽観的同時実行制御は、データの競合や衝突がほとんどない環境で主に使用されます。このような環境では、トランザクションを時々ロールバックするコストは、データを読み取るときにデータをロックするコストよりも低いため、他の同時実行制御方法よりも高いスループットを実現できます。 悲観的ロック PCC トランザクションが他のユーザーに影響を与えるような方法でデータを変更することを防ぎます。トランザクションがデータ行を読み取ってロックを適用する操作を実行する場合、そのトランザクションがロックを解除すると、他のトランザクションはロックと競合する操作のみを実行できるようになります。 この設計では、「1 つのロック 🔒 2 つのクエリ 🔍 3 つの更新」モードを採用しており、データベース内の 始める order_stock から quantity を選択し、 oid = 1 で UPDATE を実行します。 order_stock を更新し、 quantity = 2 を設定します。 WHERE oid = 1; 専念; MySQL のもう 1 つの問題は、select ... for update ステートメントの実行中にスキャンされたすべての行がロックされ、簡単に問題が発生する可能性があることです。したがって、MySQL で悲観的ロックを使用する場合は、テーブル全体のスキャンではなくインデックスを使用するようにしてください。 悲観的同時実行制御は、データの競合が激しい環境や、同時実行の競合が発生したときにロックを使用してデータを保護するためのコストがトランザクションのロールバックのコストよりも低い環境で主に使用されます。 OCCとPCCの長所と短所 OCC の利点と欠点 【アドバンテージ】
【欠点】
PCC の利点と欠点 【アドバンテージ】 「最初にロックしてからアクセスする」という保守的な戦略により、データ処理のセキュリティが確保されます。 【欠点】
上記は、MySQL における悲観的ロックと楽観的ロックの詳細です。MySQL の悲観的ロックと楽観的ロックの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: 子コンポーネントを通じて親コンポーネントのプロパティを変更するための Vue のさまざまな実装方法
<br />このシリーズの最初のセクションでは、Web サイトのパフォーマンスを向上させ...
序文: MySQL システムには、さまざまな種類のログが存在します。さまざまなログにはそれぞれ独自の...
ソフトウェア開発者であれば、Subversion に精通している必要があります。 Subversio...
背景:かなり前(2017.6.5、記事にはタイムリーさがあり、特に使用されているツールは頻繁に更新さ...
最近私が学んでいるのは MySQL の知識なので、MySQL をインストールすることが非常に重要です...
mysql 行から列へ、列から行へ難しい文章ではないので、詳しく説明はしません。文章を読むときは、一...
データボリュームの使用開始先ほどのケースでは、ホストからコンテナにデータをコピーする必要がある場合、...
ウェブフロントエンド1学生証名前性別年01張三男20 02李思女性21総人数60フォームのコンポーネ...
関連記事:初心者が学ぶ HTML タグ (4)導入された HTML タグは、必ずしも XHTML 仕...
背景:以前、コンテナ内のホストが提供する Redis サービスにアクセスする必要があるプロジェクトを...
Docker-ComposeとはCompose プロジェクトは、以前の fig プロジェクトから派生...
1. parseFloat() 関数Web ページ上に簡単な計算機を作成し、テキスト ボックスに ...
React コンポーネントのライフサイクル機能とは何ですか?ライフサイクル関数は、ES6 構文クラス...
導入実稼働環境では、データの損失を回避するために、通常、データベースは定期的にバックアップされます。...
怖いですね! 写真の翻訳: (内側から外側へ)最初のレイヤー:ユーザーエクスペリエンス第2層:コンテ...