優點:簡單;唯一;遞增;增幅固定
缺點:寫效能決定每秒生成數量上限,擴充套件差;分布式資料庫,主節點掛掉,備節點上時可能有問題(主節點寫入成功,日誌未同步到備節點,導致id重複)
備註:可有乙個寫庫變成多個庫同時寫,如1、2、3三個庫同時寫,初始id分別為1、2、3,自增幅度都為3。這種方式可保證id不重複。但導致id不是絕對遞增,而是整體趨勢上遞增;其次是寫入的壓力仍然很大,mysql容易成為效能瓶頸。
優點:效率高;降低資料庫壓力
缺點:需考慮安全性問題,防止取到重複id;如果業務需求是每次只生成乙個id,效能有問題
備註:利用資料庫,初始化一行資料,初始值為1,取10個id,就給該值加10,呼叫端取返回id值的前10個數值。以上即為批量生成id思路。
優點:本地生成;效率高
缺點:uuid字串過長,且無實際意義;無法保證遞增趨勢;建立的索引查詢效率低
優點:本地生成;延時低;索引效能高
缺點:1秒內請求過1000後id肯定重複,微秒同理
利用zookeeper增加版本號的方式是其中一種。建立節點,每次使節點版本加1。
優點:利用zk集群解決單點問題
缺點:效能不高;id有上限,提供32位id;需要zk服務
備註:具體**見
twitter開源分布式生成id演算法。
優點:基本解決了所有問題
缺點:每個節點時間可能不同,生成id是整體趨勢遞增的
備註:具體**見
各種全域性主鍵生成策略對比
優點 簡單 唯一 遞增 增幅固定 缺點 寫效能決定每秒生成數量上限,擴充套件差 分布式資料庫,主節點掛掉,備節點上時可能有問題 主節點寫入成功,日誌未同步到備節點,導致id重複 備註 可有乙個寫庫變成多個庫同時寫,如1 2 3三個庫同時寫,初始id分別為1 2 3,自增幅度都為3。這種方式可保證id...
Hibernate 各種主鍵生成策略
是由資料庫自己生成的,但這個主鍵必須設定為自增長,使用identity的前提條件是底層資料庫支援自動增長字段型別 特點 只能用在支援自動增長的字段資料庫中使用,如mysql。特點 跨資料庫,不適合多程序併發更新資料庫,適合單一程序訪問資料庫,不能用於群集環境。1 為了保證物件識別符號的唯一性與不可變...
主鍵生成策略
一共是13種,其中包括native native 對於 oracle 採用 sequence 方式,對於mysql 和 sql server 採用identity 自增主鍵生成機制 native就是將主鍵的生成工作交由資料庫完成,hibernate不管 很常用 uuid 採用128位的uuid演算法...