亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

分布式ID生成--雪花算法

 

導(dǎo)讀:唯一ID可以標(biāo)識數(shù)據(jù)的唯一性,在分布式系統(tǒng)中生成唯一ID的方案有很多,常見的方式大概有以下三種

  • 依賴數(shù)據(jù)庫,使用如MySQL自增列或Oracle序列等。
  • UUID隨機數(shù)
  • snowflake雪花算法(本文將要討論)

一、數(shù)據(jù)庫和UUID方案的不足之處

采用數(shù)據(jù)庫自增序列:

  • 讀寫分離時,只有主節(jié)點可以進行寫操作,可能有單點故障的風(fēng)險
  • 分表分庫,數(shù)據(jù)遷移合并等比較麻煩

UUID隨機數(shù)

  • 采用無意義字符串,沒有排序
  • UUID使用字符串形式存儲,數(shù)據(jù)量大時查詢效率比較低

二、關(guān)于雪花算法

有這么一種說法,自然界中并不存在兩片完全一樣的雪花的。每一片雪花都擁有自己漂亮獨特的形狀、獨一無二。雪花算法也表示生成的ID如雪花般獨一無仁。

分布式ID生成--雪花算法

 

雪花算法概述

雪花算法生成的ID是純數(shù)字且具有時間順序的。其原始版本是scala版,后面出現(xiàn)了許多其他語言的版本如JAVA、C++等。

組成結(jié)構(gòu)

分布式ID生成--雪花算法

 

大致由:首位無效符、時間戳差值,機器(進程)編碼,序列號四部分組成。

特點(自增、有序、適合分布式場景)

  • 時間位:可以根據(jù)時間進行排序,有助于提高查詢速度。
  • 機器id位:適用于分布式環(huán)境下對多節(jié)點的各個節(jié)點進行標(biāo)識,可以具體根據(jù)節(jié)點數(shù)和部署情況設(shè)計劃分機器位10位長度,如劃分5位表示進程位等。
  • 序列號位:是一系列的自增id,可以支持同一節(jié)點同一毫秒生成多個ID序號,12位的計數(shù)序列號支持每個節(jié)點每毫秒產(chǎn)生4096個ID序號

snowflake算法可以根據(jù)項目情況以及自身需要進行一定的修改。

三、雪花算法的缺點

雪花算法在單機系統(tǒng)上ID是遞增的,但是在分布式系統(tǒng)多節(jié)點的情況下,所有節(jié)點的時鐘并不能保證不完全同步,所以有可能會出現(xiàn)不是全局遞增的情況。

四、總結(jié)

分布式唯一ID的方案有很多,本文主要討論了雪花算法,組成結(jié)構(gòu)大致分為了無效位、時間位、機器位和序列號位。其特點是自增、有序、純數(shù)字組成查詢效率高且不依賴于數(shù)據(jù)庫。適合在分布式的場景中應(yīng)用,可根據(jù)需求調(diào)整具體實現(xiàn)細(xì)節(jié)。

感謝您的閱讀,如果喜歡本文歡迎關(guān)注和轉(zhuǎn)發(fā),本頭條號將持續(xù)分享IT技術(shù)知識。對于文章內(nèi)容有其他想法或意見建議等,歡迎提出共同討論共同進步。

分享到:
標(biāo)簽:算法 雪花
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定