開発中にこのような問題に遭遇しました ビデオ視聴記録が 100 に更新されると、視聴されたことを意味し、後続のリクエストがあった場合は更新されません。 消す: その結果、内部の多くのデータに問題が生じます。 次のような状況が、 最初のリクエスト トランザクションは実行中であり、コミットされていません (ローカルで再現することが難しい場合があるため、この効果を実現するために、最初のレコードを処理するときにプログラム内で手動で数秒間スリープします) 2 番目のリクエスト トランザクションの実行が開始されました。この時点で、見つかった履歴の最大値は 100 ではないため、更新されます。 解決策をオンラインで調べました: 悲観的ロック 直接ロック行レコード これをローカルでテストしたところ、本当にうまくいきました。1 つのトランザクションは開始されますが終了せず、2 番目のトランザクションは待機します。ただし、システムの同時実行性により、ブロッキング状態が発生します。私はあえてそれを考慮しないので、この方法を記録するだけです。 手動シミュレーション: 最初のトランザクションを実行します。 -- ビデオ 100 開始; `biz_coursestudyhistory` から * を選択 WHERE sid = 5777166; biz_coursestudyhistory を更新し、studyStatus を 100、versionNO を versionNO+1 に設定します (sid が 1 で、versionNO が 0 の場合)。 -- commit ; 最初に実行せず、最初に注釈を付け、上記のみを実行する 次に、2 番目のトランザクションを実行します。 始める; biz_coursestudyhistory を更新し、studyStatus を 90、versionNO を versionNO+1 に設定します (sid が 1 で、versionNO が 0 の場合)。 SELECT * FROM `biz_coursestudyhistory` WHERE sid = 1 FOR UPDATE; 専念; あなたは成功できず、常に待機状態にあることに気づくでしょう。 ロックを表示 確かにロックされています。ここでは、最初のトランザクションのコミットが実行されている限り、2 番目のトランザクションが実行されます。 このことから、行ロックは理想的なデータ統合状態を直接実現できることがわかります。1 つのトランザクションが変更されると、他の操作は実行できなくなります。これは、銀行などのセキュリティ プロジェクトに適していると感じています。 楽観的ロック: これはより単純で、ブロックを引き起こしません 方法はバージョン番号を追加することです
更新するには、 書かれた言葉 テーブル (contentStudyID、courseWareID、studyStatus、studyTime、endTime) に INSERT します。 SELECT 27047358,3163,100,333,NOW() FROM デュアル WHERE NOT EXISTS (SELECT 1 FROM テーブル WHERE contentStudyID =27047358 AND コースウェアID = 3163 ) このように、更新時や書き込み時に、ライブラリ内のデータが存在するかどうかを直接判断できます。存在しない場合は、他のスレッドによって使用されます。 この記述スタイルに変更した後、マルチスレッド テストに jmeter を使用すると、当初は複数のレコードの更新は成功しましたが、現在は 1 つのレコードのみが正常に実行され、残りは失敗します。 最初に複数のレコードを挿入することから、後で1つのデータのみを挿入することまで 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: nginx を使用して http を https に変換するサンプルコード
>>: Nginx コンパイル済み nginx - 新しいモジュールを追加
今日、Ubuntu 用の小さなツールを顧客に送りましたが、ユーザーはそれを受け取った後、実行できませ...
目次1. はじめに2. スケジューラの基本概念2.1. 実行キュー (rq) 2.2 スケジューリン...
<br />一般的なゲストブック、フォーラムなどでは、テキスト入力ボックスが使われていま...
スクリプトを書く目的は、さまざまなサービスを手動で起動しなくて済むようにすることです(怠惰のためでも...
ここでは、CSS テクニックを巧みに使用することで、HTML を変更せずにブログやテンプレートの外観...
MySQL 5.7.18 のインストールと問題の概要。今日、新しい MySQL サーバーを導入しまし...
この記事では、古典的なスネークゲームを実装するためのJavaScriptの具体的なコードを参考までに...
実際、Vueでaxiosをカプセル化するのは非常に簡単ですまず、srcパスにhttpフォルダを作成し...
最近のプロジェクトでフォームを作成するときに、コメント ボックスまで自動的にスクロールし、コメント ...
1. 改行を強制せず、省略記号で終了します。コードをコピーコードは次のとおりです。 <div ...
Docker 公開方法は、DevOps (送信、コンパイル、パッケージ化、リリースなどの一連のイベ...
目次MySQL 削除構文エイリアスの問題mysql の delete ステートメントでエイリアスを使...
最近、プロジェクトで作業しているときに webSocket プロトコルを使用し、WeChat アプレ...
目次イベントループブラウザ環境イベントループノード環境イベントループ6つのステージ(1)setTim...
目次1. プロセス制御2. シーケンシャルプロセス制御3. 分岐フロー制御if文1. 支店構造2. ...