主鍵衝突的解決方案

2021-08-27 08:42:57 字數 552 閱讀 8615

現象:

高併發場景下,入庫時出現主鍵衝突,此主鍵並非自增主鍵,而是由三個字段組成的聯合主鍵。

業務邏輯:

新來的資料提取的主鍵在資料庫裡沒有,就直接插入,即執行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衝突 無論再怎麼變化,輸入空間和輸出空間都是一定的,只要輸入的空間一大...