精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美国产日韩免费| 在线观看一区日韩| 久久草.com| 成人黄色三级视频| 伊人久久大香线| 日韩精品电影网| 一区二区三区四区毛片| 国产剧情av在线播放| 欧美激情一区在线观看| 999久久久| 波多野结衣电影在线播放| 91精品综合久久久久久久久久久| 精品国产一区二区精华| 免费观看成人网| 国产理论电影在线| 欧美国产一区二区| 精品在线观看一区二区| 99久久精品国产一区二区成人| 99精品国产在热久久| 丝袜亚洲欧美日韩综合| 国产欧美视频一区| 国产一区高清| 日韩欧美中文字幕在线观看| 亚洲激情一区二区| 四虎精品在线| 成人三级伦理片| 国产日本欧美在线观看| 久久久久99精品成人片我成大片| 在线观看国产精品入口| 一本色道久久综合亚洲精品小说| 无码国产69精品久久久久网站| 日韩成人免费av| 色哦色哦哦色天天综合| 2019日韩中文字幕mv| 超碰在线无需免费| 国产精品热久久久久夜色精品三区 | 久久精品天堂| 午夜精品久久久久久99热| 国产在线一卡二卡| 国产精品99久久| 中文字幕视频在线免费欧美日韩综合在线看 | 欧美成人精品欧美一级乱| 牛牛电影国产一区二区| 亚洲视频一区二区在线观看| 一本一道久久久a久久久精品91 | 成功精品影院| 精品免费99久久| 妖精视频在线观看| 久久综合给合| 精品少妇一区二区三区| 91精产国品一二三| 免费欧美网站| 日韩精品专区在线| 丰满饥渴老女人hd| 九九99久久精品在免费线bt| 欧美一级免费大片| 女人扒开腿免费视频app| 看亚洲a级一级毛片| 91精品国产色综合久久ai换脸| 国产一级片自拍| 97色婷婷成人综合在线观看| 欧美丰满高潮xxxx喷水动漫| av在线网站免费观看| 日韩一区二区三免费高清在线观看| 欧美午夜精品一区二区三区 | 国产伦精品一区二区三区免费| 国产在线观看91精品一区| 91中文字幕在线播放| 国产一区二区不卡在线| 丁香婷婷久久久综合精品国产| 精品人妻一区二区三区麻豆91| 国产成人精品亚洲日本在线桃色| 国产精品福利视频| 青青草在线免费观看| 国产三级一区二区三区| 伊人色综合久久天天五月婷| 黄色av网站在线播放| 亚洲图片欧美一区| 国产xxxxx在线观看| 国产精品久久久久77777丨| 欧美高清性hdvideosex| 折磨小男生性器羞耻的故事| 日韩成人动漫在线观看| 一本一本久久a久久精品综合小说 一本一本久久a久久精品牛牛影视 | 日韩免费看网站| 超碰男人的天堂| 精品国精品国产自在久国产应用| 精品国产一区二区三区久久久| 深夜福利影院在线观看| 国产亚洲精品v| 国产精品嫩草影院一区二区| 国产农村妇女毛片精品| 91一区一区三区| 一区二区精品在线| 国产中文在线播放| 欧美日韩大陆在线| 中文字幕第3页| 日韩在线观看| 97视频网站入口| 国产又粗又长又大视频| 99久久精品免费| 亚洲一区二区三区精品在线观看| 欧美6一10sex性hd| 欧美色精品在线视频| 亚洲熟妇一区二区| 日韩精品中文字幕第1页| 欧美激情中文字幕在线| 中文字幕在线观看欧美| av成人免费在线观看| 伊人色综合久久天天五月婷| 中文字幕乱码中文乱码51精品| 欧美久久高跟鞋激| 性久久久久久久久久| 在线精品国产| 国产精自产拍久久久久久| 天堂网在线中文| 最新国产精品久久精品| 午夜dv内射一区二区| 国产色噜噜噜91在线精品| 日韩中文在线中文网三级| 久久艹免费视频| 高清久久久久久| 这里只有精品66| 不卡一二三区| 日韩av最新在线| 青娱乐91视频| 国产麻豆9l精品三级站| 自拍亚洲欧美老师丝袜| 日韩中文在线播放| 亚洲欧美三级伦理| 五月婷婷激情网| 懂色av噜噜一区二区三区av| 一区二区三区观看| 欧洲成人一区| 亚洲一区www| 亚洲熟女综合色一区二区三区| 国产91富婆露脸刺激对白| 国产精品12p| 国产三级一区| 亚洲日韩中文字幕| 久久国产视频一区| 91美女福利视频| 玩弄中年熟妇正在播放| 精品欧美午夜寂寞影院| 欧美激情一区二区三区久久久| 国产精品久久久国产盗摄| 国产精品久久久久9999吃药| 天天爽人人爽夜夜爽| 成人在线免费视频观看| 国产精品美女免费| 99免在线观看免费视频高清| 欧美体内she精视频| www.99热| 麻豆91精品91久久久的内涵| 黄瓜视频免费观看在线观看www | 欧美videosex性极品hd| 精品国产一区二区三区久久久蜜月| 国产乱国产乱老熟300| 国产乱码精品1区2区3区| 路边理发店露脸熟妇泻火| 国产视频网站一区二区三区| 欧美成人性色生活仑片| 超碰人人人人人人| 天天综合色天天| 亚洲熟妇无码av| 日韩电影在线一区二区三区| 天天人人精品| 国产精品国产亚洲精品| 欧美日本亚洲视频| 无码精品人妻一区二区| 一本大道久久a久久精二百| 永久免费成人代码| 久久er精品视频| 永久免费看av| 日韩精品免费一区二区夜夜嗨| 欧美一区深夜视频| 日本三级在线播放完整版| 日韩一区二区三区在线视频| 国产一级在线视频| 国产日韩欧美精品电影三级在线| 中文字幕第88页| 国产一区日韩欧美| 欧美高清视频一区二区三区在线观看| 欧美影视资讯| 欧美区二区三区| 精品久久久久一区二区三区| 欧美高清www午色夜在线视频| 久热精品在线观看| 久久精品人人做人人爽人人| 不用播放器的免费av| 激情综合久久| 视频一区二区三区免费观看| 麻豆一二三区精品蜜桃| 欧美专区第一页| 高h视频在线观看| 日韩电影免费观看中文字幕| 91成品人影院| 狠狠久久五月精品中文字幕| 三级黄色片在线观看| gogo大胆日本视频一区| 一道本在线免费视频| 一区二区三区国产盗摄| 一区二区三区四区在线视频| 亚州av一区| 3d动漫啪啪精品一区二区免费| 伊人久久综合一区二区| 欧美国产视频日韩| 成人p站proumb入口| 亚洲第一中文字幕| 国产区精品在线| 在线观看国产一区二区| 国产无码精品在线播放| 亚洲日本在线观看| 蜜桃传媒一区二区亚洲| 成人av免费在线观看| 国产探花在线观看视频| 日本午夜精品视频在线观看| av之家在线观看| 欧美fxxxxxx另类| 精品一区二区成人免费视频 | 久久中文字幕在线| 牛牛影视精品影视| 亚洲成av人乱码色午夜| av中文字幕免费| 欧美精品丝袜久久久中文字幕| www毛片com| 精品福利免费观看| 久久久久黄色片| 亚洲欧洲另类国产综合| 国产毛片欧美毛片久久久| 91亚洲精品久久久蜜桃网站| 国产综合内射日韩久| 国产乱码精品一区二区三| 久久婷婷综合色| 日韩国产精品久久久| 免费成人在线视频网站| 亚洲黄色天堂| 亚洲理论电影在线观看| 欧美激情视频一区二区三区免费| 在线观看日韩片| 国产精品久久占久久| 最新不卡av| 2023国产精品久久久精品双| 一区二区冒白浆视频| 成人羞羞网站入口| 欧美三级网色| 国产探花一区二区| 日韩成人av网站| 精品一区二区三区在线| 亚洲精美视频| 成人在线免费观看91| 中文字幕一区二区三区有限公司 | 国产富婆一级全黄大片| 日韩欧美亚洲一区二区| 性生交生活影碟片| 亚洲福利小视频| 亚洲色大成网站www| 亚洲欧美国产精品久久久久久久 | 日本一区二区三级电影在线观看| 精品欧美一区二区久久久| 国产亚洲成年网址在线观看| 日本精品在线观看视频| 国产精品第四页| 日韩三级在线观看视频| 亚洲国产综合91精品麻豆| 日韩欧美三级视频| 欧美中文字幕一区二区三区 | 国产精品一区二区不卡| 涩视频在线观看| 91亚洲精品久久久蜜桃网站| 久久婷婷五月综合| 国产精品成人免费| 久久久一二三区| 日韩欧美高清视频| 自拍偷拍色综合| 日韩欧美一区电影| 天堂中文在线视频| 日韩在线观看网站| 国产美女一区视频| 国产极品精品在线观看| 激情久久免费视频| 国产在线精品一区二区三区| 欧美一区二区三| 激情五月六月婷婷| 久久国产欧美| 欧美视频亚洲图片| 2019国产精品| 久久中文免费视频| 色综合网色综合| 99精品视频免费看| 亚洲欧美国产日韩天堂区| 久久黄色美女电影| 久久久之久亚州精品露出| 日韩在线短视频| 国产精品毛片一区视频| 欧美天天综合| 在线观看av的网址| 日本不卡一区二区三区| 国内精品免费视频| 中文字幕一区免费在线观看| 国产对白videos麻豆高潮| 欧美私人免费视频| 天天干,夜夜操| 欧美另类交人妖| 国产成人精品一区二三区在线观看| 成人女人免费毛片| 日韩在线观看电影完整版高清免费悬疑悬疑| 男女激情免费视频| 狠狠色2019综合网| 亚洲精品国产91| 五月激情综合色| www.香蕉视频| 日韩小视频在线观看| 韩日精品一区二区| 国产高清不卡av| 五月天综合网站| 中文字幕永久视频| 久久先锋影音av鲁色资源网| 久久精品国产亚洲av无码娇色| 在线播放一区二区三区| 大胆av不用播放器在线播放| 97在线观看视频| xxxxxhd亚洲人hd| 精品国产一区二区三区在线| 麻豆精品一二三| 中文字幕被公侵犯的漂亮人妻| 五月婷婷欧美视频| 亚洲精品18在线观看| 美女福利精品视频| 9999在线精品视频| 亚洲第一页在线视频| 蜜臀久久99精品久久久久宅男| 久久精品无码一区| 91黄色免费版| 国产在线一二| 国产成人福利网站| 国产精品欧美在线观看| 国产超级av在线| 2022国产精品视频| 特级毛片www| 亚洲区中文字幕| 日本高清不卡一区二区三区视频| 麻豆亚洲一区| 午夜一级久久| 精品无人区无码乱码毛片国产| 欧美性猛交xxxx富婆| 精品乱码一区二区三四区视频| 国产成+人+综合+亚洲欧洲| 神马影视一区二区| 成人性生生活性生交12| 中文字幕av在线一区二区三区| 波多野结衣理论片| 在线播放国产精品| 成人在线观看免费播放| 亚洲午夜精品一区二区三区| 久久97超碰国产精品超碰| 三上悠亚在线观看视频| 欧美一卡2卡三卡4卡5免费| 三级福利片在线观看| 国产综合 伊人色| 午夜一区不卡| 日韩不卡av在线| 欧美精品在线观看播放| 青青青草视频在线| 精品亚洲一区二区三区四区五区高| 亚洲欧美大片| 欧美性生交大片| 欧美不卡一区二区三区| 小草在线视频免费播放| 日韩精品欧美专区| 韩国理伦片一区二区三区在线播放| 免费在线观看h片| 亚洲国产精品小视频| 性欧美超级视频| 一本二本三本亚洲码| 91在线观看高清| 中文字字幕在线观看| 欧美日韩xxx| 精品一区在线| 亚洲一二区在线观看| 性做久久久久久免费观看| 国产精品毛片一区二区三区四区| 国产中文字幕91| 亚洲国内自拍| 日韩亚洲欧美中文字幕| 日韩av在线不卡| 祥仔av免费一区二区三区四区| 国产免费一区二区视频| 国产午夜精品久久久久久久| 国产乱淫片视频| 人九九综合九九宗合| 一区二区影院| 美女脱光内衣内裤| 日韩视频在线观看一区二区| 欧美亚洲韩国| 成人毛片100部免费看| 国产亚洲制服色| 韩国av免费在线观看| 国产精品一区二区久久久久| 亚洲国内自拍|