国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

無分布式鎖的ID生成

這篇具有很好參考價(jià)值的文章主要介紹了無分布式鎖的ID生成。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

起因

TEAM GARDEN 本來ID是自增的,后面發(fā)現(xiàn)自增ID比較麻煩,有問題:

不可控的間隔: 如果你在插入數(shù)據(jù)時(shí),中途刪除了一些行,導(dǎo)致自增的ID出現(xiàn)間隔,那么新插入的行會(huì)填充這些間隔,可能會(huì)導(dǎo)致ID序列不連續(xù),不利于數(shù)據(jù)分析和理解。

不適用于批量插入: 在批量插入數(shù)據(jù)時(shí),自增主鍵可能會(huì)導(dǎo)致性能問題。因?yàn)槊看尾迦攵夹枰i定表,以獲取下一個(gè)自增ID。這可能導(dǎo)致大量的表鎖等待,從而影響性能。

主鍵沖突: 在某些情況下,例如數(shù)據(jù)導(dǎo)入或數(shù)據(jù)同步,可能會(huì)出現(xiàn)主鍵沖突的情況。如果數(shù)據(jù)源中的主鍵與目標(biāo)數(shù)據(jù)庫中的自增ID沖突,就會(huì)導(dǎo)致插入失敗。

難以預(yù)測的ID值: 自增ID的值通常是由數(shù)據(jù)庫管理的,這意味著你不能預(yù)測下一個(gè)ID是什么。在某些情況下,你可能需要對(duì)生成的ID值進(jìn)行控制或預(yù)測。

不支持外部數(shù)據(jù)源: 如果需要將外部數(shù)據(jù)源(例如其他數(shù)據(jù)庫或數(shù)據(jù)文件)與數(shù)據(jù)庫中的表關(guān)聯(lián),自增主鍵可能不太適合。你無法為外部數(shù)據(jù)源生成有效的自增ID。

所以決定自己寫一個(gè)ID生成的工具

代碼


public class SnowflakeIdGenerator {
    private static final long START_TIMESTAMP = 1630435200000L; // 2021-09-01 00:00:00
    private static final long MACHINE_ID_BITS = 5L;
    private static final long SEQUENCE_BITS = 12L;

    private static final long MAX_MACHINE_ID = ~(-1L << MACHINE_ID_BITS);
    private static final long MAX_SEQUENCE = ~(-1L << SEQUENCE_BITS);

    private long machineId;
    private long sequence = 0L;
    private long lastTimestamp = -1L;

    public SnowflakeIdGenerator(long machineId) {
        if (machineId < 0 || machineId > MAX_MACHINE_ID) {
            throw new IllegalArgumentException("Machine ID must be between 0 and " + MAX_MACHINE_ID);
        }
        this.machineId = machineId;
    }

    public synchronized long generateId() {
        long currentTimestamp = System.currentTimeMillis();
        if (currentTimestamp < lastTimestamp) {
            throw new RuntimeException("Clock moved backwards. Refusing to generate ID.");
        }

        if (currentTimestamp == lastTimestamp) {
            sequence = (sequence + 1) & MAX_SEQUENCE;
            if (sequence == 0) {
                currentTimestamp = nextTimestamp(lastTimestamp);
            }
        } else {
            sequence = 0L;
        }

        lastTimestamp = currentTimestamp;

        long id = ((currentTimestamp - START_TIMESTAMP) << (MACHINE_ID_BITS + SEQUENCE_BITS))
                | (machineId << SEQUENCE_BITS)
                | sequence;

        return id;
    }

    private long nextTimestamp(long lastTimestamp) {
        long currentTimestamp = System.currentTimeMillis();
        while (currentTimestamp <= lastTimestamp) {
            currentTimestamp = System.currentTimeMillis();
        }
        return currentTimestamp;
    }
}

使用

 resumeEntity.setId(new SnowflakeIdGenerator(1).generateId());

結(jié)論

這樣生成的ID是有序的、適合大數(shù)據(jù)量的、簡單、可預(yù)測且不依賴外部資源的。文章來源地址http://www.zghlxwxcb.cn/news/detail-670873.html

到了這里,關(guān)于無分布式鎖的ID生成的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 76、分布式id生成方案

    1,當(dāng)前日期和時(shí)間 時(shí)間戳 2,時(shí)鐘序列。 計(jì)數(shù)器 3,全局唯一的IEEE機(jī)器識(shí)別號(hào),如果有網(wǎng)卡,從網(wǎng)卡MAC地址獲得,沒有網(wǎng)卡以其他方式獲得。 優(yōu)點(diǎn): 代碼簡單,性能好(本地生成,沒有網(wǎng)絡(luò)消耗),保證唯一(相對(duì)而言,重復(fù)概率極低可以忽略) 缺點(diǎn): 每次生成的ID都是無序的,

    2024年02月16日
    瀏覽(20)
  • 48 分布式id的生成策略

    48 分布式id的生成策略

    1.UUID UUID由以下幾部分的組合: UUID 是由一組32位數(shù)的16進(jìn)制數(shù)字所構(gòu)成,以連字號(hào)分隔的五組來顯示,形式為 8-4-4-4-12,總共有 36個(gè)字符(即三十二個(gè)英數(shù)字母和四個(gè)連字號(hào))。例如: 如果需求是只保證唯一性,那么UUID也是可以使用的,但是按照上面的分布式id的要求, UU

    2024年01月17日
    瀏覽(20)
  • 分布式ID生成算法——雪花算法

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

    一、分布式ID ID可以唯一標(biāo)識(shí)一條記錄。 對(duì)于單體架構(gòu),我們可以使用自增ID來保證ID的唯一性。但是,在分布式系統(tǒng)中,簡單的使用自增ID就會(huì)導(dǎo)致ID沖突。這也就引出了 分布式ID 問題。分布式ID也要求滿足分布式系統(tǒng)的 高性能、高可用、高并發(fā) 的特點(diǎn)。 二、雪花算法 世界

    2024年02月06日
    瀏覽(26)
  • 分布式主鍵ID生成策略

    分布式主鍵ID生成策略

    小程序 搜索“?源碼輕舟?”后續(xù)將推出算法和面試模塊 堅(jiān)持學(xué)習(xí),好文每日送達(dá)! ? 業(yè)務(wù)系統(tǒng)對(duì)分布式ID的要求 唯一性:在分布式系統(tǒng)中,每個(gè)節(jié)點(diǎn)都需要生成唯一的標(biāo)識(shí)符來確保數(shù)據(jù)的唯一性。傳統(tǒng)的單點(diǎn)生成ID方式無法滿足分布式環(huán)境下的需求,而分布式ID能夠在整個(gè)

    2024年02月12日
    瀏覽(21)
  • 分布式ID生成算法:雪花算法

    雪花算法(Snowflake)是一種分布式ID生成算法,可以生成唯一的、有序的、不重復(fù)的ID號(hào),廣泛應(yīng)用于分布式系統(tǒng)中。其生成的ID號(hào)由64位二進(jìn)制數(shù)組成,可以轉(zhuǎn)換成16進(jìn)制或10進(jìn)制的字符串表示。 雪花算法的核心思想是將一個(gè)64位的二進(jìn)制數(shù)分成四部分,分別表示時(shí)間戳、數(shù)據(jù)

    2024年02月15日
    瀏覽(35)
  • 雪花算法生成分布式主鍵ID

    直接上代碼,復(fù)制即可使用 在這個(gè)示例中,你可以通過 SnowflakeIdGenerator.init(dataCenterId, workerId); 初始化數(shù)據(jù)中心 ID 和工作 ID,然后通過 SnowflakeIdGenerator.generateId(); 靜態(tài)方法生成 Snowflake ID 的字符串形式。

    2024年02月22日
    瀏覽(23)
  • 分布式Id生成之雪花算法(SnowFlake)

    分布式Id生成之雪花算法(SnowFlake)

    目錄 前言 回顧二進(jìn)制 二進(jìn)制概念 運(yùn)算法則 位(Bit) 字節(jié)(Byte) 字符 字符集 二進(jìn)制原碼、反碼、補(bǔ)碼 有符號(hào)數(shù)和無符號(hào)數(shù) 疑問:為什么不是-127 ~ 127 ? 為什么需要分布式全局唯一ID以及分布式ID得業(yè)務(wù)需求? ID生成規(guī)則部分硬性要求 ID生成系統(tǒng)的可用性要求 通用解決方

    2024年02月11日
    瀏覽(25)
  • 【智能排班系統(tǒng)】雪花算法生成分布式ID

    【智能排班系統(tǒng)】雪花算法生成分布式ID

    在復(fù)雜而龐大的分布式系統(tǒng)中,確保數(shù)據(jù)實(shí)體的唯一標(biāo)識(shí)性是一項(xiàng)至關(guān)重要的任務(wù),生成全局唯一且有序的ID生成機(jī)制成為必不可少的環(huán)節(jié)。雪花算法(Snowflake Algorithm)正是為此目的而生,以其簡潔的設(shè)計(jì)、高效的表現(xiàn)與良好的擴(kuò)展性贏得了業(yè)界的廣泛認(rèn)可。 雪花算法最早由

    2024年04月10日
    瀏覽(22)
  • 分布式唯一ID生成算法——雪花算法(SnowFlake)

    分布式唯一ID生成算法——雪花算法(SnowFlake)

    SnowFlake算法 據(jù)國家大氣研究中心的查爾斯·奈特稱,一般的雪花大約由10^19個(gè)水分子組成。在雪花形成過程中,會(huì)形成不同的結(jié)構(gòu)分支,所以說大自然中不存在兩片完全一樣的雪花,每一片雪花都擁有自己漂亮獨(dú)特的形狀。 雪花算法表示生成的id如雪花般獨(dú)一無二。 snowflake是

    2023年04月20日
    瀏覽(26)
  • 分布式id生成方案及springboot進(jìn)行集成

    UUID(Universally Unique Identifier) 即通用唯一識(shí)別碼,是一種由網(wǎng)絡(luò)軟件使用的標(biāo)識(shí)符,它是由IP地址、當(dāng)前時(shí)間戳、隨機(jī)數(shù)、節(jié)點(diǎn)等多個(gè)部分組成,具有唯一性。但是,UUID方案的缺點(diǎn)是,生成的id較長,不便于存儲(chǔ)和使用。 Snowflake算法 它是Twitter公司開源的一個(gè)分布式唯一ID生成器

    2023年04月08日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包