數據庫自增主鍵可能的問題


單表的情況下數據庫自增id並沒有什么問題,在一張表分布到多個數據庫的情況下,使用表自增將會出現id重復的問題
解決的辦法有兩個方向,一個是在應用層做處理,一個是數據庫上去做處理

 

1.給每個數據庫設置不同的開始id

數據庫1 從  10000.. 開始
數據庫2 從  20000.. 開始
這種辦法不依賴於其他服務實現id唯一性,即時其他數據庫掛了依然能生成id

 

2.使用一個庫專門生成id

id列不設自增,由應用設置id

建立單獨的id生成數據庫,庫中建立多個id生成表,每個表如下

+-------------------+------+
| id | stub |
+-------------------+------+
| 72157623227190423 | a |
+-------------------+------+


每次插入數據時先從該庫的對應id生成表中更新id

REPLACE INTO Tickets64 (stub) VALUES ('a');
SELECT LAST_INSERT_ID();


執行后表內數據id增加1,並返回新id

然后使用該id插入到表中,這種方法的好處是能夠統計每個表的數據量

 

3.使用Redis分批次生成id

redis中存儲一個id的 當前批次值 ,應用每次獲取該值的時候增加1,每個批次的數量是固定的
比如批次10,開始id為  10 x 1000  結束id為  (10 + 1) x 1000 - 1 
id使用完成后再去獲取一個批次id

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM