現象:
高併發場景下,入庫時出現主鍵衝突,此主鍵並非自增主鍵,而是由三個字段組成的聯合主鍵。
業務邏輯:
新來的資料提取的主鍵在資料庫裡沒有,就直接插入,即執行insert;如果資料庫中存在相同主鍵,則用新的資料更新資料庫中已有的資料,即執行update。
場景:多伺服器,多執行緒
目標:實現乙個類似upsert功能,因為我用的postgresql9.3,其不支援這麼高階的語法。
參考文獻
1、本文很好的再現了我遇到的情況,並得出乙個建議:應對此種場景,需要資料庫層面入手。
2、樂觀鎖、悲觀鎖了解一下
3、這篇文件提出了postgresql 9.5 及以上版本的 upsert 用法示例和9.5版本以下的變通思路。
4、這篇文章提出的使用rule方法替代upsert的方式值得借鑑,我採用了這個辦法。
5、但在日誌裡還是有主鍵衝突,此時你可以在結合rule方法和第一篇參考文章思考下,其實還是不是很完美。解決思路,捕獲主鍵衝突異常,當捕捉到異常時,不是丟擲,而是去執行update操作。
總結:這是乙個曲線救國的過程。
git pull 衝突 解決方案
step1.在本地倉庫中,更新並合併 git fetch origin git rebase origin 3d planningstep2.依據提示分別開啟衝突的檔案,逐一修改衝突 step3.所有衝突都修改完畢後,提交修改的 git add u git rebase continuestep4....
MySQL中資料插入與主鍵衝突解決方案
在插入資料的時候,有時候會遇到主鍵 唯一鍵 衝突的情況。下面講述兩種解決辦法。insert into 表名 字段列表 包含主鍵 values 值列表 on duplicate key update 字段 新值。示例如下 insert into p user id name age values 1 ...
雜湊衝突的解決方案
雜湊表 將輸入的資料存放在其經過雜湊函式後得到的位置上 雜湊函式 就是乙個數學變化,將輸入的值經過某種變化後變成另乙個數 hash 翻譯為 雜湊 就是把任意長度的輸入,通過雜湊演算法,變成固定長度的輸出,該輸出就是雜湊值。hash衝突 無論再怎麼變化,輸入空間和輸出空間都是一定的,只要輸入的空間一大...