各種全局主鍵生成策略對比

1.數據庫自增主鍵

優點:簡單;唯一;遞增;增幅固定

缺點:寫性能決定每秒生成數量上限,擴展差;分佈式數據庫,主節點掛掉,備節點上時可能有問題(主節點寫入成功,日誌未同步到備節點,導致id重複)

備註:可有一個寫庫變成多個庫同時寫,如1、2、3三個庫同時寫,初始id分別爲1、2、3,自增幅度都爲3。這種方式可保證id不重複。但導致id不是絕對遞增,而是整體趨勢上遞增;其次是寫入的壓力仍然很大,mysql容易成爲性能瓶頸。


2.數據庫批量生成id

優點:效率高;降低數據庫壓力

缺點:需考慮安全性問題,防止取到重複id;如果業務需求是每次只生成一個id,性能有問題

備註:利用數據庫,初始化一行數據,初始值爲1,取10個id,就給該值加10,調用端取返回id值的前10個數值。以上即爲批量生成id思路。


3.UUID

優點:本地生成;效率高

缺點:UUID字符串過長,且無實際意義;無法保證遞增趨勢;建立的索引查詢效率低


4.當前時間毫秒與微秒

優點:本地生成;延時低;索引性能高

缺點:1秒內請求過1000後id肯定重複,微秒同理


5.zookeeper生成id

利用zookeeper增加版本號的方式是其中一種。建立節點,每次使節點版本加1。

優點:利用zk集羣解決單點問題

缺點:性能不高;id有上限,提供32位id;需要zk服務

備註:具體代碼見 http://blog.csdn.net/gongzi2311/article/details/58144091


6.snowflake算法

twitter開源分佈式生成id算法。

優點:基本解決了所有問題

缺點:每個節點時間可能不同,生成id是整體趨勢遞增的

備註:具體代碼見 http://blog.csdn.net/gongzi2311/article/details/58189306

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章