系統唯一id是我們在設計乙個系統的時候常常會遇見的問題,也常常為這個問題而糾結。生成id的方法有很多,適應不同的場景、需求以及效能要求。所以有些比較複雜的系統會有多個id生成的策略。下面就介紹一些常見的id生成策略
1.資料庫自增長序列或字段
最常見的方式。利用資料庫,全資料庫唯一。
優點:1)簡單,**方便,效能可以接受。
2)數字id天然排序,對分頁或者需要排序的結果很有幫助。
缺點:1)不同資料庫語法和實現不同,資料庫遷移的時候或多資料庫版本支援的時候需要處理。
2)在單個資料庫或讀寫分離或一主多從的情況下,只有乙個主庫可以生成。有單點故障的風險。
3)在效能達不到要求的情況下,比較難於擴充套件。
4)如果遇見多個系統需要合併或者涉及到資料遷移會相當痛苦。
5)分表分庫的時候會有麻煩。
優化方案:
1)針對主庫單點,如果有多個master庫,則每個master庫設定的起始數字不一樣,步長一樣,可以是master的個數。比如:master1 生成的是 1,4,7,10,master2生成的是2,5,8,11 master3生成的是 3,6,9,12。這樣就可以有效生成集群中的唯一id,也可以大大降低id生成資料庫操作的負載。
2.uuid
常見的方式。可以利用資料庫也可以利用程式生成,一般來說全球唯一。
主鍵生成策略
一共是13種,其中包括native native 對於 oracle 採用 sequence 方式,對於mysql 和 sql server 採用identity 自增主鍵生成機制 native就是將主鍵的生成工作交由資料庫完成,hibernate不管 很常用 uuid 採用128位的uuid演算法...
主鍵生成策略
原文 generatedvalue,jpa通用策略生成器 jpa提供的四種標準用法為table,sequence,identity,auto.table 使用乙個特定的資料庫 來儲存主鍵。sequence 根據底層資料庫的序列來生成主鍵,條件是資料庫支援序列。id generatedvalue st...
主鍵生成策略
1 自動增長identity 適用於mysql db2 ms sql server,採用資料庫生成的主鍵,用於為long short int型別生成唯一標識 使用sql server 和 mysql 的自增欄位,這個方法不能放到 oracle 中,oracle 不支援自增字段,要設定sequence...