精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:分庫分表后如何生成全局ID?

數據庫 其他數據庫
數據庫自增 ID 只適用于單機數據庫環境,而對于分庫、分表、數據分片來說,自增 ID 不具備唯一性,所以要要使用雪花 ID 來替代數據庫自增 ID。但雪花算法依然存在一些問題,例如時間回撥的問題。

分庫分表后就不能使用自增 ID 來作為表的主鍵了,因為數據庫自增 ID 只適用于單機環境,但如果是分布式環境,是將數據庫進行分庫、分表或數據庫分片等操作時,那么數據庫自增 ID 就會生成重復 ID,從而導致業務查詢上的問題。所以此時,可以使用 UUID 或雪花 ID 來作為全局主鍵 ID。

1、UUID作為全局ID

UUID(Universally Unique Identifier)是一種全局唯一標識符,它保證在空間和時間上的唯一性。通常由 128 位的數字組成,采用 32 位的十六進制數表示,格式為 8-4-4-4-12 這樣的 36 個字符(32 個字母數字字符和 4 個短橫線),例如 550e8400-e29b-41d4-a716-446655440000。UUID 在 Java 中的實現如下:

import java.util.UUID;

public class UUIDExample {
    public static void main(String[] args) {
        // Generate a random UUID
        UUID uuid = UUID.randomUUID();
        System.out.println("Random UUID: " + uuid);

        // Convert UUID to string
        String uuidString = uuid.toString();
        System.out.println("UUID as string: " + uuidString);

        // Convert string to UUID
        UUID parsedUuid = UUID.fromString(uuidString);
        System.out.println("Parsed UUID: " + parsedUuid);
    }
}

UUID 存在的問題

雖然 UUID 可以保證全局唯一,但并不推薦使用 UUID 來作為分庫分表后的主鍵 ID,因為 UUID 有兩個問題:

  • UUID 太長,且生成效率較低。
  • UUID 沒有任何業務含義,不連續且沒有任何順序可言。

2、雪花ID作為全局ID

雪花 ID(Snowflake ID)是一個用于分布式系統中生成唯一 ID 的算法,由 Twitter 公司提出。它的設計目標是在分布式環境下高效地生成全局唯一的 ID,具有一定的有序性。雪花 ID 的結構如下所示(共 64 位):

這四部分代表的含義:

  • 符號位:最高位是符號位,始終為 0,1 表示負數,0 表示正數,ID 都是正整數,所以固定為 0。
  • 時間戳部分:由 41 位組成,精確到毫秒級。可以使用該 41 位表示的時間戳來表示的時間可以使用 69 年。
  • 節點 ID 部分:由 10 位組成,用于表示機器節點的唯一標識符。在同一毫秒內,不同的節點生成的 ID 會有所不同。
  • 序列號部分:由 12 位組成,用于標識同一毫秒內生成的不同 ID 序列。在同一毫秒內,可以生成 4096 個不同的 ID。

Java 版雪花算法實現

接下來,我們來實現一個 Java 版的雪花算法:

public class SnowflakeIdGenerator {

    // 定義雪花 ID 的各部分位數
    private static final long TIMESTAMP_BITS = 41L;
    private static final long NODE_ID_BITS = 10L;
    private static final long SEQUENCE_BITS = 12L;
    // 定義起始時間戳(可根據實際情況調整)
    private static final long EPOCH = 1609459200000L;
    // 定義最大取值范圍
    private static final long MAX_NODE_ID = (1L << NODE_ID_BITS) - 1;
    private static final long MAX_SEQUENCE = (1L << SEQUENCE_BITS) - 1;
    // 定義偏移量
    private static final long TIMESTAMP_SHIFT = NODE_ID_BITS + SEQUENCE_BITS;
    private static final long NODE_ID_SHIFT = SEQUENCE_BITS;
    private final long nodeId;
    private long lastTimestamp = -1L;
    private long sequence = 0L;
    public SnowflakeIdGenerator(long nodeId) {
        if (nodeId < 0 || nodeId > MAX_NODE_ID) {
            throw new IllegalArgumentException("Invalid node ID");
        }
        this.nodeId = nodeId;
    }
    public synchronized long generateId() {
        long currentTimestamp = timestamp();
        if (currentTimestamp < lastTimestamp) {
            throw new IllegalStateException("Clock moved backwards");
        }
        if (currentTimestamp == lastTimestamp) {
            sequence = (sequence + 1) & MAX_SEQUENCE;
            if (sequence == 0) {
                currentTimestamp = untilNextMillis(lastTimestamp);
            }
        } else {
            sequence = 0L;
        }
        lastTimestamp = currentTimestamp;
        return ((currentTimestamp - EPOCH) << TIMESTAMP_SHIFT) |
        (nodeId << NODE_ID_SHIFT) |
        sequence;
    }
    private long timestamp() {
        return System.currentTimeMillis();
    }
    private long untilNextMillis(long lastTimestamp) {
        long currentTimestamp = timestamp();
        while (currentTimestamp <= lastTimestamp) {
            currentTimestamp = timestamp();
        }
        return currentTimestamp;
    }
}

調用代碼如下:

public class Main {
    public static void main(String[] args) {
        // 創建一個雪花 ID 生成器實例,傳入節點 ID
        SnowflakeIdGenerator idGenerator = new SnowflakeIdGenerator(1);
        // 生成 ID
        long id = idGenerator.generateId();
        System.out.println(id);
    }
}

其中,nodeId 表示當前節點的唯一標識,可以根據實際情況進行設置。generateId 方法用于生成雪花 ID,采用同步方式確保線程安全。具體的生成邏輯遵循雪花 ID 的位運算規則,結合當前時間戳、節點 ID 和序列號生成唯一的 ID。

需要注意的是,示例中的時間戳獲取方法使用了 System.currentTimeMillis(),根據實際需要可以替換為其他更精確的時間戳獲取方式。同時,需要確保節點 ID 的唯一性,避免不同節點生成的 ID 重復。

雪花ID存在的問題

雖然雪花算法是一種被廣泛采用的分布式唯一 ID 生成算法,但它也存在以下幾個問題:

  • 時間回撥問題:雪花算法生成的 ID 依賴于系統的時間戳,要求系統的時鐘必須是單調遞增的。如果系統的時鐘發生回撥,可能導致生成的 ID 重復。時間回撥是指系統的時鐘在某個時間點之后突然往回走(人為設置),即出現了時間上的逆流情況。
  • 時鐘回撥帶來的可用性和性能問題:由于時間依賴性,當系統時鐘發生回撥時,雪花算法需要進行額外的處理,如等待系統時鐘追上上一次生成 ID 的時間戳或拋出異常。這種處理會對算法的可用性和性能產生一定影響。
  • 節點 ID 依賴問題:雪花算法需要為每個節點分配唯一的節點 ID 來保證生成的 ID 的全局唯一性。節點 ID 的分配需要有一定的管理和調度,特別是在動態擴容或縮容時,節點 ID 的管理可能較為復雜。

如何解決時間回撥問題?

百度 UidGenerator 框架中解決了時間回撥的問題,并且解決方案比較經典,所以咱們這里就來給大家分享一下百度 UidGenerator 是怎么解決時間回撥問題的?

UidGenerator 介紹:UidGenerator 是百度開源的一個分布式唯一 ID 生成器,它是基于 Snowflake 算法的改進版本。與傳統的 Snowflake 算法相比,UidGenerator 在高并發場景下具有更好的性能和可用性。它的實現源碼在:https://github.com/baidu/uid-generator

UidGenerator 是這樣解決時間回撥問題的:UidGenerator 的每個實例中,都維護一個本地時鐘緩存,用于記錄當前時間戳。這個本地時鐘會定期與系統時鐘進行同步,如果檢測到系統時鐘往前走了(出現了時鐘回撥),則將本地時鐘調整為系統時鐘。

小結

數據庫自增 ID 只適用于單機數據庫環境,而對于分庫、分表、數據分片來說,自增 ID 不具備唯一性,所以要要使用雪花 ID 來替代數據庫自增 ID。但雪花算法依然存在一些問題,例如時間回撥的問題,所以此時,可以使用雪花算法的改進框架,如百度的 UidGenerator 來作為全局 ID 的生成方案會比較好。

責任編輯:姜華 來源: Java中文社群
相關推薦

2024-11-22 15:32:19

2025-11-19 01:00:00

2024-07-25 18:20:03

2025-04-09 00:00:00

2025-09-18 09:43:43

2017-07-19 16:25:07

數據庫開發DB分庫主鍵生成策略

2020-11-11 10:05:04

數據庫分庫分表美團面試

2024-10-07 08:52:59

分布式系統分布式 IDID

2015-08-13 10:29:12

面試面試官

2024-02-22 17:02:09

IDUUID雪花算法

2023-02-16 08:10:40

死鎖線程

2018-03-14 09:49:35

數據庫遷移

2024-02-20 14:10:55

系統緩存冗余

2024-03-18 14:06:00

停機Spring服務器

2024-09-11 22:51:19

線程通訊Object

2025-03-17 00:00:00

2024-04-03 00:00:00

Redis集群代碼

2021-07-06 07:08:18

管控數據數倉

2010-08-12 16:28:35

面試官

2023-11-20 10:09:59

點贊
收藏

51CTO技術棧公眾號

伊人一区二区三区久久精品| 91国产精品一区| 人人玩人人添人人澡欧美| 国产清纯美女被跳蛋高潮一区二区久久w| 美女av一区二区三区 | 青青热久免费精品视频在线18| 国产一区二区三区四区五区入口| 精品夜色国产国偷在线| 久久久久久久中文| 巨骚激情综合| 亚洲欧美中文日韩在线v日本| 欧美另类暴力丝袜| 精品国产aⅴ一区二区三区东京热| 色婷婷av在线| 337p粉嫩大胆色噜噜噜噜亚洲| 国产999在线观看| 欧美夫妻性视频| 日韩大尺度视频| 少妇淫片在线影院| 国产欧美一区二区三区在线老狼| 国产视频在线观看视频| 99久久婷婷国产综合精品青牛牛 | 久久无码精品丰满人妻| 色yeye免费人成网站在线观看| 高清久久久久久| 欧美精品videofree1080p| av2014天堂网| 中文.日本.精品| 亚洲精品伦理在线| 在线观看欧美日本| 欧美在线视频一区二区三区| 国产精品爽爽久久| 午夜在线视频观看日韩17c| 中文亚洲视频在线| 在线观看一区二区三区四区| 波多野结衣在线播放| 国产亚洲美州欧州综合国| 欧美在线免费视屏| 久久久久成人网| 亚洲图片另类小说| 久久伊人国产| 欧美日韩免费观看中文| 国产精品jizz在线观看老狼| 你懂的视频在线免费| 亚洲精品久久久久久久久久久久久久| 欧美亚洲免费| 九九久久综合网站| 99久久精品免费视频| a级日韩大片| 91精品视频网| 少妇一级淫免费放| 最近高清中文在线字幕在线观看1| 99精品国产高清一区二区麻豆| 樱桃成人精品视频在线播放| 亚洲图片欧美日产| 成人做爰69片免费| 久久天堂影院| 欧美在线免费观看亚洲| 日韩少妇内射免费播放18禁裸乳| 免费在线观看av电影| 亚洲三级在线免费| 尤物国产精品| 日本v片在线免费观看| 不卡欧美aaaaa| 精品伦精品一区二区三区视频密桃| 欧美性高潮床叫视频| 久久不卡国产精品一区二区| 国产精品永久久久久久久久久| 久久久精品午夜少妇| 乱色精品无码一区二区国产盗| 特级西西444www大精品视频| 欧美大胆一级视频| 成人av网址在线| 色哟哟欧美精品| 日韩福利视频| 91av资源在线| 亚洲三级视频在线观看| 警花观音坐莲激情销魂小说 | 欧美一区二区精美| 天天看片天天操| 国语精品免费视频| 中日韩美女免费视频网站在线观看 | 亚洲国产美女精品久久久久∴| 精品一区二区三区影院在线午夜| 蜜臀久久精品| 国产精品久久久久久久久久久久久久久久 | 无码人妻熟妇av又粗又大| 粉嫩小泬无遮挡久久久久久| 国产成人亚洲精品狼色在线 | 四虎4hu永久免费入口| www在线免费观看视频| 亚洲一二三区在线观看| 欧美国产亚洲一区| 国产第一亚洲| 精品国产一区a| 婷婷色一区二区三区| 91精品亚洲| 欧美影院在线播放| 99久久亚洲精品日本无码| 成人精品小蝌蚪| 天天好比中文综合网| 日本aa在线| 色狠狠综合天天综合综合| 色91精品久久久久久久久| 丰满的少妇愉情hd高清果冻传媒| 韩国av中文字幕| 久久久久国产精品午夜一区| 成人中文字幕在线观看| 亚洲 精品 综合 精品 自拍| 国产精品三级视频| 亚洲 欧美 日韩 国产综合 在线| 欧美美女日韩| 精品国产网站在线观看| 亚洲欧美综合7777色婷婷| 亚洲色诱最新| 99久久精品免费看国产四区 | 国产综合精品视频| 精品一二线国产| 久久综合九色欧美狠狠| 成人无遮挡免费网站视频在线观看| 日韩欧美一区二区三区| 俺要去色综合狠狠| 欧美激情2020午夜免费观看| 自拍偷拍精品视频| 97aⅴ精品视频一二三区| 一区二区三区四区欧美| 卡通欧美亚洲| 亚洲第一网站免费视频| 日韩激情小视频| 日韩中文字幕不卡| 久久青青草原一区二区| 啪啪免费视频一区| 欧美一区二区精品| 卡通动漫亚洲综合| 蜜臀av性久久久久蜜臀av麻豆 | 婷婷亚洲精品| 久久全国免费视频| 丁香六月色婷婷| 亚洲精品一卡二卡| 午夜一区二区视频| 久久美女视频| 国产精品日日摸夜夜添夜夜av| 特级丰满少妇一级aaaa爱毛片| 亚洲精品videosex极品| 午夜激情视频网| 久久国产精品亚洲人一区二区三区 | 欧美精品一区二区在线播放| 欧美人禽zoz0强交| 国产一区不卡在线| 日韩国产精品毛片| 亚洲视频资源| 久久精品99久久久久久久久| 亚洲视频一区二区三区四区| 欧美国产日韩a欧美在线观看| 午夜激情福利在线| 精品久久久中文字幕| 国产精国产精品| 国产在线观看黄| 日本韩国欧美在线| 国产又黄又粗又猛又爽的| 另类专区欧美蜜桃臀第一页| 亚洲一区二区三区欧美| 一级欧美视频| 精品国产一区二区三区在线观看 | 中文字幕黄色片| 国产亚洲综合性久久久影院| av网站在线不卡| 99精品电影| 91黄色国产视频| a√中文在线观看| 亚洲乱码一区av黑人高潮 | 狠狠躁少妇一区二区三区| 亚洲白拍色综合图区| 成人免费看片98欧美| 国产日韩欧美精品综合| www.色就是色.com| 国一区二区在线观看| 久久久久久久久久久久久久久久av| 毛片免费看不卡网站| 色777狠狠综合秋免鲁丝| 国产又色又爽又黄又免费| 亚洲综合免费观看高清完整版| 亚洲色图欧美日韩| 石原莉奈在线亚洲二区| 自拍偷拍视频在线| 成午夜精品一区二区三区软件| 国产91成人在在线播放| 无遮挡动作视频在线观看免费入口| 91精品国产综合久久精品性色| 国产主播在线观看| 国产欧美精品国产国产专区| 亚洲午夜精品在线观看| 久久国产高清| 91精品国产毛片武则天| 综合干狼人综合首页| 亚洲www视频| 亚洲女色av| 欧美大成色www永久网站婷| 天堂视频中文在线| 91精品国产综合久久久久久久| 免费看日韩毛片| 日韩美女视频一区二区| 男生草女生视频| 国产69精品久久久久毛片| 亚洲成色www.777999| 欧美二区不卡| 亚洲一区高清| 亚洲美女久久| 国产精品免费一区二区三区| 久久久免费人体| 欧美中文字幕第一页| 日韩三级免费| 久久精品国产成人精品| 黄色在线小视频| 亚洲精品电影久久久| 国产高潮在线观看| 91.成人天堂一区| 波多野结衣一二区| 亚洲一二三级电影| 蜜桃视频最新网址| 成人午夜在线免费| 日本高清一区二区视频| 国产精品一二| 精品丰满人妻无套内射| 天天影视天天精品| 日韩欧美亚洲v片| 美女少妇全过程你懂的久久 | 99草草国产熟女视频在线| 国产主播精品| 中文有码久久| 91亚洲精品视频在线观看| 成人黄色av网站| 欧美亚洲大片| 4k岛国日韩精品**专区| 久久夜色电影| 精品视频在线导航| 一级片在线观看视频| 波多野结衣欧美| 国产剧情久久久久久| 九九色在线视频| 中文字幕国产精品| 无码精品一区二区三区在线| 精品区一区二区| 欧洲精品在线一区| 伊人久久大香伊蕉在人线观看热v| 亚洲精品在线不卡| 国产精品自产拍在线观| 国产精品拍拍拍| 国产一级片免费| 国产99re66在线视频| 欧美激情日韩| 亚洲精品国产视频| 欧美巨乳美女视频| 波多野结衣 作品| 日本在线视频免费观看| 超碰97免费在线| 久久一区二区三区四区五区| 欧美亚洲精品一区| 成人xxxxx色| 亚洲av成人精品一区二区三区| 日韩一级在线播放| 日韩精品久久久久久久电影99爱| 国产精品久久久久永久免费观看 | 亚洲电影二区| 国产91在线|亚洲| 精品一区二区三区三区| 亚洲精品第一区二区三区| 亚洲xxxx3d动漫| 亚洲欧美韩国| 国产成人综合在线观看| 亚洲人av在线影院| 亚洲欧美丝袜| 日韩污视频在线观看| 久久69av| 久久精品日韩一区二区三区| 欧美激情免费在线| 在线观看国产一级片| 天堂在线视频观看| 天天综合国产| 欧美日韩电影在线| 欧美一区二区三区在线免费观看| 欧美成人三级在线观看| 在线日韩影院| 99久久久国产精品| 久久久免费精品视频| av在线免费看片| 国产小视频在线观看| 一本色道88久久加勒比精品| 3751色影院一区二区三区| 精品伊人久久大线蕉色首页| 欧美黑人精品一区二区不卡| 外国成人毛片| 国产精品午夜在线观看| 国产精品久久久久久av下载红粉| 国产xxxxxxxxx| 少妇又紧又色又爽又刺激视频| 九九久久婷婷| 欧美无砖砖区免费| 国产精品无码乱伦| 亚洲在线精品视频| 日韩av在线中文字幕| 色综合久久久久| 亚洲va韩国va欧美va精四季| 男人天堂2024| 日本成人小视频| 日韩欧美国产麻豆| 国产精品沙发午睡系列| jzzjzzjzz亚洲成熟少妇| 蜜桃视频一区| 中文亚洲视频在线| wwwxxx色| 亚洲高清黄色| 国产精品久久久一区麻豆最新章节| 国产精品网站视频| 久久老司机精品视频| 国产精品密蕾丝视频下载| 欧美一a一片一级一片| 免费观看亚洲视频| 日韩成人黄色| 国产一区在线观看麻豆| 992tv成人免费视频| 综合 欧美 亚洲日本| 亚洲91网站| 欧美少妇bbb| 日韩精品在线中文字幕| av播放在线观看| jlzzjlzz亚洲日本少妇| 国产在线观看精品| 日韩精品一区不卡| 亚洲午夜伦理| 亚洲新中文字幕| yy6080午夜| 亚洲精品高潮| 8v天堂国产在线一区二区| 伊人成色综合网| 超碰在线97国产| 亚洲制服丝袜一区| 亚洲一区二区三区免费观看| 国产视频二区在线观看| 国产精品911| 欧亚精品中文字幕| 奇米影视第四色777| 国产精品v日韩精品v欧美精品网站| 亚洲香蕉在线观看| 日韩欧美色视频| 成人国产精品| 欧美裸体bbwbbwbbw| av中文字幕网址| 伊人久久一区| 日韩精品在线看片z| 精品伦一区二区三区| 国产调教精品| 日韩av资源在线播放| 一起草在线视频| 欧美一级三级| 在线日韩第一页| 国产人与禽zoz0性伦| 国产精品久久久久无码av| 久久国产精品久久久| 国产精品国产三级国产传播| 中文字幕一区二区av| 久久天天躁日日躁| 99免费在线观看| 久久国产毛片| 亚洲va欧美va国产综合久久| 欧美熟女一区二区| 久久久不卡网国产精品一区| 亚洲欧美丝袜| 涩涩涩视频在线观看| 欧日韩精品视频| 69亚洲乱人伦| av中文一区| 欧美激情视频一区二区| 69av视频在线观看| 国产很黄免费观看久久| 日本视频一区二区不卡| av毛片在线| 欧美日韩性视频| 韩国一区二区三区四区| 亚洲国产合集| 午夜精品视频在线| 国产露脸国语对白在线| 99久久精品国产观看| 亚洲高清资源综合久久精品| 好看的中文字幕在线播放| 欧美一区二区三区四区五区| 成年人免费观看视频网站| 日韩图片一区| 亚洲自拍偷拍区| 国产在线看片| 欧美在线免费观看亚洲| 爱爱的免费视频| 夜夜爽av福利精品导航| 3d动漫啪啪精品一区二区免费 | 国产日本欧美一区二区三区| 手机看片国产1024| 亚洲午夜久久久久| 国产高潮失禁喷水爽到抽搐 | 欧美mv日韩mv国产| 麻豆精品一区二区三区视频|