<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    (本文作者溫少,首發(fā)于博客園,轉(zhuǎn)載請注明)
    ID生成算法,其中一種就是使用GUID(又稱UUID),使用128位存儲。UUID的一個問題是太長,可讀性太差,人腦無法記憶。

    替代方案之一,就是使用關(guān)系數(shù)據(jù)庫的自增長字段,自增長字段的一個問題是,無法預(yù)先創(chuàng)建一個ID,只能夠在保存的時候才能生成ID,這對于批量關(guān)聯(lián)插入數(shù)據(jù)來說,不滿足需求。

    替 代方案之二,就是使用一個記錄ID的表,每次加一,在事務(wù)中使用Select FOR UPDATE來讀取然后UPDATE SET FVALUE = FVALUE + 1,或者使用我之前文章中所提到的CAS算法。 這樣做,會導(dǎo)致性能低下,每生成一個ID的成本都很高。

    替代方案之 三,就是把ID分成兩部分,Seed和IncrementID。Seed采用上面的方案二或者其他辦法生成,IncrementID使用一個 AtomicInteger來每次遞增生成。SEED轉(zhuǎn)化為九進(jìn)制數(shù)字,這樣SEED就不會包含9,于是使用9作為分隔符,把SEED和 IncrementID隔開。這樣做,就可以做高性能產(chǎn)生ID,而且確保不重復(fù)。甚至可以更進(jìn)一步,SEED由一個中心服務(wù)器生成。使用9個分隔符號隔開 SEED和IncrementID,好處是SEED是變長,而不是使用固定位數(shù)來保存SEED,這樣產(chǎn)生的ID會更短,可讀性更好。

    舉例,34915,其中34時SEED,15是IncrementID,9是分隔符,SEED部分采用九進(jìn)制表示法,確保不出現(xiàn)9,第一個9之后的內(nèi)容屬于IncrementID。

    我已經(jīng)做了一個實現(xiàn),用于實際開發(fā)中,思路采用方案三,有很多實作的細(xì)節(jié),但是總體設(shè)計思路就是如此。
    (本文作者溫少,首發(fā)于博客園,轉(zhuǎn)載請注明)
    posted on 2007-11-16 07:09 溫少的日志 閱讀(2732) 評論(8)  編輯  收藏
    Comments
    • # re: 小議ID生成算法
      Robin's Java World
      Posted @ 2007-11-16 08:47
      怎么控制SEED的不重復(fù)?如果用你的方案二本身不就有你所說的性能問題?IncrementID又怎么得?怎么保證不重復(fù)?
      總體感覺沒太想清楚,個人意見!  回復(fù)  更多評論   
    • # re: 小議ID生成算法[未登錄]
      太陽里的雪
      Posted @ 2007-11-16 09:24
      暈,這方案3不就比方案2還要耗性能了嘛!  回復(fù)  更多評論   
    • # re: 小議ID生成算法
      溫少的日志
      Posted @ 2007-11-16 10:27
      @Robin's Java World
      @太陽里的雪
      你們都沒認(rèn)真想想,SEED只需要獲取一次,然后就一直使用。而SEED的獲取只需要在程序啟動時!  回復(fù)  更多評論   
    • # re: 小議ID生成算法
      sitinspring
      Posted @ 2007-11-16 19:14
      不錯的文章.

        回復(fù)  更多評論   
    • # re: 小議ID生成算法
      simon.xu
      Posted @ 2007-11-27 19:22
      去看看數(shù)據(jù)庫sequence的生成方法吧,那是成熟算法

      可以依舊用數(shù)據(jù)庫,不過,使用一個增量來緩存,每次增加超過增量,才寫數(shù)據(jù)庫,否則,直接在應(yīng)用內(nèi)部+1

      建議修改一下你的算法  回復(fù)  更多評論   
    • # re: 小議ID生成算法
      溫少的日志
      Posted @ 2007-11-28 10:17
      @simon.xu
      你說的方法在過去的系統(tǒng)中用過,每次遞增一批,這算是方案2的改進(jìn)。使用方案3,在種子上作一些處理之后,能夠更好實現(xiàn)全局唯一,可以確保不同服務(wù)器不同的數(shù)據(jù)庫分配出來的ID唯一。

      從我博客主站上看:
      http://www.cnblogs.com/jobs/archive/2007/11/16/961116.html

      評論更多,描述了更詳盡的情況。  回復(fù)  更多評論   
    • # re: 小議ID生成算法
      simon.xu
      Posted @ 2007-12-03 13:05
      那方案3其實就是在多機(jī)的時候,id分成兩個部分而已,一個實際是機(jī)器id,另一個是實際的本機(jī)id。
      感覺為了追求id長度短,有點過份設(shè)計了,實際應(yīng)用應(yīng)當(dāng)對這個長度要求很低,使用固定長度完全可以,畢竟你的環(huán)境也不會有100個以上的獨立系統(tǒng)。  回復(fù)  更多評論   
    • # SOHO-CN公司誠聘網(wǎng)絡(luò)兼職,每天工資至少100元且日付
      wumao
      Posted @ 2009-03-15 16:11
      工作描述:按照公司的要求,每天兼職約3小時,完全在電腦里工作,家里網(wǎng)吧均可。
      工作待遇: 每日底薪為100元/天,工作日付,工資每天中午12點準(zhǔn)時結(jié)算
      工作地點:不限。全國各地,在家、宿舍、網(wǎng)吧等,
      工作要求:
      1、男女不限、學(xué)歷不限,在職或?qū)W生皆可,要求勤奮細(xì)心,有責(zé)任感,工作認(rèn)真負(fù)責(zé);
      2、會打字、會在網(wǎng)上發(fā)帖,按公司要求具備團(tuán)隊合作精神;
      3、平均每天能工作2-3小時,時間自定,完成當(dāng)天工作量即可。
      詳情請查看我們公司招聘網(wǎng)站:http://www.17lkdy.cn
      (請放心,本公司所有招聘職位不需要交納任何費用)
      公司每天工資發(fā)放記錄:http://www.17lkdy.cn/jilu.html  回復(fù)  更多評論   

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
     
    主站蜘蛛池模板: 日本xxxx色视频在线观看免费| 国产裸体美女永久免费无遮挡 | 色费女人18女人毛片免费视频| 男女免费观看在线爽爽爽视频| 亚洲三级中文字幕| 91精品国产免费久久久久久青草| 91精品国产亚洲爽啪在线观看| 91精品国产免费网站| 亚洲精品白色在线发布| 成年免费大片黄在线观看岛国| 亚洲综合丁香婷婷六月香| 免费高清小黄站在线观看| 在线视频亚洲一区| 亚洲综合最新无码专区| 水蜜桃视频在线观看免费播放高清| 国产国拍亚洲精品mv在线观看| 久久aa毛片免费播放嗯啊| 亚洲嫩模在线观看| 最新免费jlzzjlzz在线播放| 亚洲av永久无码精品秋霞电影秋 | 中出五十路免费视频| 亚洲AV永久青草无码精品| 99视频有精品视频免费观看| 亚洲中文久久精品无码1| 国产精品麻豆免费版| 国产免费一级高清淫曰本片 | 亚洲国产精品无码AAA片| 在线免费观看你懂的| 亚洲高清乱码午夜电影网| 亚洲精品国产高清嫩草影院| 一级成人a毛片免费播放| 伊人久久亚洲综合影院首页| 亚洲国产a级视频| 98精品全国免费观看视频| 亚洲精品无码久久久久秋霞| ZZIJZZIJ亚洲日本少妇JIZJIZ| 欧洲一级毛片免费| 一本到卡二卡三卡免费高| 亚洲视频一区网站| 亚洲欧洲日本在线| 国产曰批免费视频播放免费s|