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

頻繁な更新でのStaleObjectStateException

    楽観的同時実行制御 。つまり、Userテーブルには、行が更新されるたびにHibernateがインクリメントするバージョンフィールドがあります。

    ほとんどの場合、トランザクションはHTTPリクエストの開始時に開始し、HTTPレスポンスの終了時に終了します。つまり、ユーザーを編集するプロセスは2つのトランザクションで構成されます。1つはWebフォームに入力するトランザクションで、もう1つは変更を保存するトランザクションです。

    その場合、データベースの分離レベルを変更しても効果はありません。ほとんどの場合、取得できるのはパフォーマンスとスケーラビリティの低下

    StaleObjectExceptionがあることは悪いことではありません s。それは現実の世界を反映しています-人々は実際に時々同じことをし、対立が起こるかもしれません。問題は、競合が検出された場合、エンドユーザーが満足できる方法でどのように解決するかということです。ユーザーの助けがなくても解決できますか?

    考えられる戦略は

    • 前のユーザーの変更を上書きします(多くの場合、必要なものではないため、同時実行制御が必要です)、

    • ユーザーに更新して変更を再度実行するように求めるエラーメッセージを表示します。

    • 前のユーザーの変更を上書きせずに、変更を自動的にマージします(場合によっては可能)

    • データの古さをユーザーに通知し、変更を手動でマージする方法をユーザーに提供します

    それはすべて文脈に依存します。



    1. IPアドレスに基づいて多数の投稿を地理的に特定します。 (880,000行)

    2. 致命的なエラー:PHP5.4.22およびMySQL5.5をApache2.4.7に接続しているときに、未定義の関数mysqli_connect()を呼び出します...

    3. Python From Scratch:動的なWebサイトを作成する

    4. WithoutRowIDで主キーを使用する