欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Laravel分布式唯一ID生成器的使用示例

小編給大家分享一下Laravel分布式唯一ID生成器的使用示例,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

成都創(chuàng)新互聯(lián)是專業(yè)的路南網(wǎng)站建設(shè)公司,路南接單;提供成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行路南網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

在應(yīng)用程序中,經(jīng)常需要全局唯一的ID作為數(shù)據(jù)庫主鍵。如何生成全局唯一ID?

首先,需要確定全局唯一ID是整型還是字符串?如果是字符串,那么現(xiàn)有的UUID就完全滿足需求,不需要額外的工作。缺點是字符串作為ID占用空間大,索引效率比整型低。

如果采用整型作為ID,那么首先排除掉32位int類型,因為范圍太小,必須使用64位long型。

采用整型作為ID時,如何生成自增、全局唯一且不重復(fù)的ID?

方案一:利用數(shù)據(jù)庫的自增ID,從1開始,基本可以做到連續(xù)遞增。Oracle可以用SEQUENCE,MySQL可以用主鍵的AUTO_INCREMENT,雖然不能保證全局唯一,但每個表唯一,也基本滿足需求。

數(shù)據(jù)庫自增ID的缺點是數(shù)據(jù)在插入前,無法獲得ID。數(shù)據(jù)在插入后,獲取的ID雖然是唯一的,但一定要等到事務(wù)提交后,ID才算是有效的。有些雙向引用的數(shù)據(jù),不得不插入后再做一次更新,比較麻煩。

第二種方式是采用一個集中式ID生成器,它可以是redis,也可以是ZooKeeper,也可以利用數(shù)據(jù)庫的表記錄最后分配的ID。

這種方式最大的缺點是復(fù)雜性太高,需要嚴重依賴第三方服務(wù),而且代碼配置繁瑣。一般來說,越是復(fù)雜的方案,越不可靠,并且測試越痛苦。

第三種方式是類似Twitter的Snowflake算法,它給每臺機器分配一個唯一標識,然后通過時間戳+標識+自增實現(xiàn)全局唯一ID。這種方式好處在于ID生成算法完全是一個無狀態(tài)機,無網(wǎng)絡(luò)調(diào)用,高效可靠。缺點是如果唯一標識有重復(fù),會造成ID沖突。

Snowflake算法采用41bit毫秒時間戳,加上10bit機器ID,加上12bit序列號,理論上最多支持1024臺機器每秒生成4096000個序列號,對于Twitter的規(guī)模來說夠用了。

但是對于絕大部分普通應(yīng)用程序來說,根本不需要每秒超過400萬的ID,機器數(shù)量也達不到1024臺,所以,我們可以改進一下,使用更短的ID生成方式:

53bitID由32bit秒級時間戳+16bit自增+5bit機器標識組成,累積32臺機器,每秒可以生成6.5萬個序列號,核心代碼:

private static synchronized long nextId(long epochSecond) {
    if (epochSecond < lastEpoch) {
        // warning: clock is turn back:
        logger.warn("clock is back: " + epochSecond + " from previous:" + lastEpoch);
        epochSecond = lastEpoch;
    }
    if (lastEpoch != epochSecond) {
        lastEpoch = epochSecond;
        reset();
    }
    offset++;
    long next = offset & MAX_NEXT;
    if (next == 0) {
        logger.warn("maximum id reached in 1 second in epoch: " + epochSecond);
        return nextId(epochSecond + 1);
    }
    return generateId(epochSecond, next, SHARD_ID);}

時間戳減去一個固定值,此方案最高可支持到2106年。

如果每秒6.5萬個序列號不夠怎么辦?沒關(guān)系,可以繼續(xù)遞增時間戳,向前“借”下一秒的6.5萬個序列號。

同時還解決了時間回撥的問題。

機器標識采用簡單的主機名方案,只要主機名符合host-1,host-2就可以自動提取機器標識,無需配置。

最后,為什么采用最多53位整型,而不是64位整型?這是因為考慮到大部分應(yīng)用程序是Web應(yīng)用,如果要和JavaScript打交道,由于JavaScript支持的最大整型就是53位,超過這個位數(shù),JavaScript將丟失精度。因此,使用53位整數(shù)可以直接由JavaScript讀取,而超過53位時,就必須轉(zhuǎn)換成字符串才能保證JavaScript處理正確,這會給API接口帶來額外的復(fù)雜度。這也是為什么新浪微博的API接口會同時返回ididstr的原因。

看完了這篇文章,相信你對“Laravel分布式唯一ID生成器的使用示例”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當前文章:Laravel分布式唯一ID生成器的使用示例
文章源于:http://aaarwkj.com/article24/ipdhce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷網(wǎng)站制作、域名注冊、外貿(mào)建站、商城網(wǎng)站網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
久久人妻蜜桃一区二区三区| 国产精品1区2区久久久| 日韩免费av在线网站| 日本一本高清免费不卡| 日本熟女俱乐部一区二区| 伊人亚洲一区二区三区| 狠狠综爱五月天的婷婷| 日日夜夜久久国产精品| 青青草免费在线视频蜜臀| 少妇按摩高潮呻吟av| 亚洲熟妇中文字幕五十中出| 亚洲免费一级黄色录像片| 日韩欧美中文字幕一区二区| 欧美午夜视频一区二区福利| 国产偷自一区二区三区| 国产精品国产三级国av麻豆| 亚洲综合激情一区二区| 中文字幕精品一区二区介绍| 亚洲综合av一区二区| 国产手机在线91精品观看| 麻豆国产传媒片在线观看| 日本一区二区三区加勒比| 色婷婷av一区二区三| 91国产精品视频在线| 日韩50岁老女人骚色| 97人妻人人澡人人爽| 亚洲国产日韩欧美视频| 精华国产一区二区三区| 日本免费一区中文字幕| 色婷婷国产精品久久包臀| 未满十八禁止观看免费观看| 精品视频偷拍一区二区三区| 特色特色欧美黄色影院| 天堂av在线资源观看| 日韩经典三级精品自拍| 亚洲男人天堂av电影| 亚洲午夜福利理论片在线| 亚洲另类偷拍校园伦理| 青青草国产精品一区二区| 白白色最新福利视频二| 日本女优中文字幕久久|