分布式id問題

分布式id生成

分布式id問題來源于分庫分表,一張表可能多庫中存在多表,所以傳統(tǒng)自增的主鍵會出現(xiàn)重復(fù);需要利用分布式來解決,分配主鍵不重復(fù)。
分布式id在分布式的前提下,有以下幾點需求:
唯一、高性能、高可用、簡單、利于數(shù)據(jù)庫存儲查找等
介紹以下幾種方式

UUID

UUID生成簡單,一行代碼,而且本地生成不需要資源;生成直接可用
缺點:過長,純字符,無規(guī)則,不適合數(shù)據(jù)庫主鍵,影響性能以及數(shù)據(jù)變動需要改變位置

數(shù)據(jù)庫自增id

維護一張表,向表中插入數(shù)據(jù)返回自增id;
缺點:數(shù)據(jù)庫會成為分布式高并發(fā)的瓶頸,且單機不能保證高可用

數(shù)據(jù)庫集群生成id

幾個庫一起生成id,通過起點、步長不一致保證唯一
缺點:不利于擴容,需要改動所有機器規(guī)則;還不能滿足高并發(fā)

數(shù)據(jù)庫號段模式

維護一張表,max_id,step,version基本元素,每次取一段數(shù)值(id取值)到內(nèi)存中使用,使用后更新表中max_id值,更新version保證并發(fā)正確性

redis

利用redis數(shù)字型原子自增(incr),需要注意redis持久化問題

雪花算法

1數(shù)字位 41時間戳 10機器位 12序列號
數(shù)據(jù)位取0為整數(shù),時間戳建議當前-一個固定值可以取更多數(shù)據(jù),機器位 機房+機器

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容