ビジネスにおける楽観主義と悲観的なロックの実用的なアプリケーションのケース
楽観的なロックと悲観的なロックの選択は、ビジネスシナリオとデータの一貫性要件に依存します。 1.悲観的なロックはデータの競合を想定し、ロックはデータの一貫性を確保しますが、銀行の転送などの高い並行性の下では効率が低くなります。 2.楽観的なロックデータの競合確率が低く、ロックが追加されていないと仮定します。更新前にデータが変更されているかどうかを確認します。高効率ですが、eコマースインベントリ管理やフォーラムコメントなどのデータの矛盾。 3.高い並行性シナリオでは、楽観的なロックと悲観的なロックを組み合わせ、楽観的なロックの最初の前処理、そして最終的には、効率とデータの一貫性を考慮して、悲観的ロックを確認することを検討できます。最終的な選択には、効率とデータの一貫性のトレードオフが必要です。
楽観的なロックと悲観的なロック:ビジネス慣行のトレードオフと選択
楽観的なロックと悲観的なロック、これら2つの概念は神秘的に聞こえますが、実際には、データベースへの同時アクセスを扱う場合、2つの完全に異なる戦略です。簡単に言えば、楽観的なロックは「データは一般的に矛盾しない」と信じていますが、悲観的なロックは「データは競合する可能性が高い」と考えています。この記事では、退屈な定義を提供するものではありませんが、ビジネスシナリオに参加して、実際の条件に基づいて適切なソリューションを選択する方法を確認します。それを読んだ後、ビジネスニーズに基づいて古いドライバーのようなこれら2つのロックメカニズムを制御できます。
基本から始めましょう。名前が示すように、悲観的なロックは、常に最悪の場合を想定しています - 同時の修正。データの競合を回避するために、データにアクセスするときにデータを直接ロックします。典型的な例は、データベースのトランザクション分離レベルと、いくつかのプログラミング言語によって提供されるミューテックスメカニズムです。銀行口座の転送を想像してください。悲観的なロックは、厳格な警備員のようなものです。一度に操作を入力できるユーザーは1人だけで、他のユーザーは並んでいるだけです。これにより、データの一貫性が保証されますが、効率性...特に並行性が大きい場合は、待ち時間が長くなります。
楽観的なロックは完全に異なります。データの競合の確率は非常に低いため、ロックを積極的に追加しないと考えています。データを更新する前に、データが変更されたかどうかを確認します。変更されていない場合、更新されます。変更された場合、競合が促され、ユーザーが再入力されます。これは柔軟な管理者のようなもので、複数のユーザーがデータを同時に表示および変更でき、変更を送信するときにのみ確認を実行できます。これははるかに効率的ですが、リスクがあります。つまり、「汚いライティング」が発生する可能性があり、注意して処理する必要があります。
実際のケースを見てみましょう。
ケース1:eコマース製品在庫管理
コモディティインベントリは、典型的な同時シナリオです。悲観的なロックを使用する場合は、ユーザーが製品ページにアクセスするたびにロックを追加するか、インベントリをチェックするだけで、深刻なパフォーマンスボトルネックにつながる必要があります。そして、楽観的なロックは非常に適しています。バージョン番号メカニズムを使用して楽観的なロックを実現できます。各製品にはバージョン番号があり、インベントリが更新されるたびに、バージョン番号が一貫しているかどうかを確認します。一貫性がない場合、それはデータが変更され、更新が拒否されたことを意味します。これは、製品在庫に投稿されたラベルのようなもので、変更の数を記録し、ラベルが変更されていない場合にのみ変更できます。
<code class="python">class Product:</code><pre class='brush:php;toolbar:false;'> def __init __(self、id、name、stock、version): self.id = id self.name = name self.stock = stock self.version =バージョン def update_stock(self、new_stock、current_version): self.version == current_version: self.stock = new_stock self.version = 1 trueを返す#更新成功Else: false#updateが失敗し、データが変更されました
同時の更新をシミュレートします
Product = Product(1、 "iPhone"、100、1)
thread1 = threading.thread(ターゲット= lambda:product.update_stock(90、1))
thread2 = threading.thread(target = lambda:croduct.update_stock(80、1))
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print(f "final Inventory:{product.stock}")#結果の実行の順序に応じて、結果が80または90ではない場合があります。
このコードは、Pythonを使用して、楽観的なロックの実装をシミュレートします。これは単純化されたバージョンであり、データベーストランザクションの原子性などの問題を実際のアプリケーションで考慮する必要があることに注意してください。見たことがありますか?楽観的なロックは効率的ですが、データの矛盾につながる可能性があり、競合に対処するために適切なメカニズムが必要です。
ケース2:フォーラムの投稿コメント
フォーラムの投稿コメント、並行性のボリュームも非常に大きいです。悲観的なロックを使用する場合、すべてのコメントをロックする必要がありますが、これは効率的すぎます。ここにも楽観的なロックが適用されます。バージョン番号と同様のメカニズムを使用するか、タイムスタンプを使用してデータが変更されたかどうかを判断できます。
ケース3:銀行譲渡(別の強調)
上記のように、悲観的なロックはデータの一貫性を確保できるため、より安全な選択のようです。ただし、並行性のボリュームが非常に高い場合、悲観的なロックのパフォーマンスボトルネックは非常に明白になります。この時点で、楽観的なロックと悲観的なロックを組み合わせることを検討できます。たとえば、並行性シナリオでの前処理のために楽観的なロックを使用し、最後のコミットが提出された場合にのみ最終確認のために悲観的なロックを使用します。これにより、効率とデータの一貫性の両方が保証されます。これには、より複雑な戦略と設計が必要です。
要するに、楽観的なロックや悲観的なロックには絶対的な良いことも悪いこともありません。選択する戦略は、特定のビジネスシナリオとデータの一貫性の要件に依存します。高い並行性シナリオでは、楽観的なロックは通常より効率的ですが、データの競合を慎重に処理する必要があります。データの一貫性のために非常に高い要件を備えたシナリオでは、悲観的なロックはより安全ですが、パフォーマンスはボトルネックになる可能性があります。選択を行うときは、効率とデータの一貫性を量り、実際の状況に応じて適切なソリューションを選択するか、組み合わせて使用する必要があります。銀の弾丸はなく、適切な解決策のみがあることを忘れないでください。ロックメカニズムのマスターになりたいです!
以上がビジネスにおける楽観主義と悲観的なロックの実用的なアプリケーションのケースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonコードをSublimeテキストで実行するには、最初にPythonプラグインをインストールし、次に.pyファイルを作成してコードを書き込み、Ctrl Bを押してコードを実行する必要があります。コードを実行すると、出力がコンソールに表示されます。

Visual Studioコード(VSCODE)でコードを作成するのはシンプルで使いやすいです。 VSCODEをインストールし、プロジェクトの作成、言語の選択、ファイルの作成、コードの書き込み、保存して実行します。 VSCODEの利点には、クロスプラットフォーム、フリーおよびオープンソース、強力な機能、リッチエクステンション、軽量で高速が含まれます。

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

メモ帳でPythonコードを実行するには、Python実行可能ファイルとNPPEXECプラグインをインストールする必要があります。 Pythonをインストールしてパスを追加した後、nppexecプラグインでコマンド「python」とパラメーター "{current_directory} {file_name}"を構成して、メモ帳のショートカットキー「F6」を介してPythonコードを実行します。
