亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么排查與解決python編程項目中線上問題

發布時間:2021-11-01 13:37:01 來源:億速云 閱讀:117 作者:iii 欄目:開發技術

這篇文章主要講解了“怎么排查與解決python編程項目中線上問題”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么排查與解決python編程項目中線上問題”吧!

問題描述

最近因為公司業務需要,產品設計了一套業務系統,據說會有很多內部和外部人員使用,拿到系統說明我們研發部門拼命加班趕時間,經歷了兩個月的后終于把系統上線運行。

剛開始用的人少,并沒有出現什么問題,感覺系統還是很穩定,隨著后來用的人越來越多,系統就開始出現一些莫名其妙的問題,其中就有某些業務信息在更新的時候總是報錯,查日志就發現是表記錄被鎖定導致更新失敗。

找到錯誤問題后我們就開始一遍遍的翻日志,各種分析查找到底是什么原因導致了表記錄被鎖。最后發現這個表的狀態字段,存在多個接口方法同時更新的情況,而且經常是同時操作的。也就是數據庫中存在多個會話同時操作同一表中同一行記錄,從而導致表記錄被鎖。

問題分析

那定位到問題,要如何解決呢?這里我們先了解兩個名詞:

悲觀鎖(Pessimistic Lock):簡單解釋就是很悲觀,每次去拿數據的時候都認為別人會修改,所以每次在修改數據的時候都會上鎖,這樣別人想修改這個數據就會等待一直到它能拿到鎖。

樂觀鎖(Optimistic Lock):這個正好相反,就是很樂觀,每次去修改數據的時候都認為別人不會修改,所以不會上鎖,但是在提交更新的時候會判斷一下在此期間別人有沒有去更新這個數據。樂觀鎖適用于讀多寫少的應用場景,這樣可以提高吞吐量。

通過這兩種方式就能解決問題,不過選哪種比較好,我們來簡單分析下:

  • 悲觀鎖 通過 “select …… for update” 實現,就是在更新表前先對這條記錄進行上鎖,然后下面再執行更新語句。不過這種方式有些太重,畢竟加鎖還是需要很大時間成本的,不符合業務的需要,直接pass掉。

  • 樂觀鎖 相對就要輕量很多,它的主要實現就是通過在表中多增加一個記錄版本的字段,比如 version 。然后每次查詢記錄要更新時,where 后面都要加上 version=? ,這樣當你查詢拿到 version 后,如果有其他會話更新了這個字段,那這個 version 就會和你現在拿的不一樣,從而會使你這次的更新失效,需要重新獲取最新 version 后再次執行 update 語句。

問題解決

好了,經過以上分析,已經有了比較清晰的解決思路,剩下就是碼代碼了:

/**
     * 樂觀鎖更新
     * @param id
     * @return
     */
    public boolean update(int id){
        int cnt = 0;
        while (cnt == 0) {
            USER user = query("SELECT * FROM table_user WHERE id = #{id}", id);
            cnt = update("UPDATE table_user SET version=version + 1, status = 2 WHERE id=#{id} AND version=#{version}", id, user.version());
            if(cnt > 0){
               // 返回更新成功
                return true;
            }
        }
        return false;
    }

感謝各位的閱讀,以上就是“怎么排查與解決python編程項目中線上問題”的內容了,經過本文的學習后,相信大家對怎么排查與解決python編程項目中線上問題這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

济阳县| 临漳县| 调兵山市| 昭通市| 建平县| 扬中市| 定西市| 新田县| 耿马| 阜城县| 稻城县| 抚宁县| 莱州市| 大悟县| 思南县| 亚东县| 酒泉市| 岳池县| 仁怀市| 孝昌县| 固始县| 嘉兴市| 武邑县| 屏东县| 周至县| 马山县| 河北省| 琼结县| 云和县| 类乌齐县| 确山县| 轮台县| 增城市| 肃南| 同德县| 枣庄市| 贞丰县| 龙胜| 嵊泗县| 南宁市| 象州县|