資料庫主鍵自增序列 分布式資料庫唯一ID生成方式

2021-10-14 21:41:48 字數 786 閱讀 3299

分布式系統中我們會對一些資料量大的業務進行分拆,如:使用者表,訂單表。因為資料量巨大一張表無法承接,就會對其進行分庫分表。

什麼是趨勢遞增?如:在一段時間內,生成的id是遞增的趨勢。如:再一段時間內生成的id在【0,1000】之間,過段時間生成的id在【1000,2000】之間。但在【0-1000】區間內的時候,id生成有可能第一次是12,第二次是10,第三次是14。

新建乙個公共庫,庫裡面新建乙個序列表,主鍵id自增,每次請求增加資料都往這個表中插入資料,然後獲取到id,然後使用即可。

優點:方便簡單

缺點:單庫生成自增id,高併發下,會有瓶頸

適用場景:

併發很低,幾百/s,不會出現效能瓶頸

優點:本地生成,不基於任何第三方

缺點: 適用場景:

隨機生成檔名、編號,生成token等。

例如:當前時間戳 + 使用者id + 業務含義編碼,併發高的時候,會有重複,此時就不行了,不建議使用。

redis是單執行緒的,所以也可以用生成全域性唯一的id。可以用redis的原子操作 incr和incrby來實現。

優點: 缺點:

twitter開源的分布式id生成演算法,把乙個64位的long型的id,1個bit是不用的,用其中的41 bit作為毫秒數,用10 bit作為工作機器id,12 bit作為序列號,理論上最多支援1024臺機器每秒生成4096000個序列號。

缺點:優點:

分布式資料庫如何實現主鍵全域性自增?

就能實現,但是在資料庫集群中,這個需求卻變複雜了,因為存在多個資料庫例項 各自都是主鍵自增,合在一起就不是主鍵自增了。通過本地檔案實現 通過資料庫實現 通過本地時間戳實現 通過分布式 zk id 生成器實現 通過 zk 遞增方式實現 table.minid 某執行緒當前區間內最小值 table.ma...

分布式資料庫

網路選課系統中分布式資料庫設計 何翠雙王巧雲張麗麗 摘要 關鍵字 選課 分布式 資料庫 distributed system of on line course choosing abstract key words course choosing distributed database 隨著學校...

分布式資料庫

1 背景 我們知道資料是乙個公司的命脈,隨著業務越做越大,資料量也會越來越大,計算也會越來越複雜,效能,可靠性,可擴充套件性的需求就會越來越強烈,這個時候乙個集中式的資料庫顯然已經滿足不了需求了。對於技術決策者來說有兩條路可以走,第一 按照現有的大型資料庫的解決方案,比如sql server clu...