精品欧美一区二区三区在线观看 _久久久久国色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-01-17 14:42:24

分庫分表數據庫數據分片

2017-07-19 16:25:07

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

2025-11-19 01:00:00

2020-11-10 07:44:18

分庫分表生成

2020-07-28 09:04:09

NewSQL分庫分表

2020-07-30 17:59:34

分庫分表SQL數據庫

2024-04-18 09:24:32

分布式ID分庫分表

2022-07-11 08:16:47

NewSQL關系數據庫系統

2022-09-26 08:28:22

分庫分表數據

2019-11-12 09:54:20

分庫分表數據

2020-01-07 09:40:25

數據庫MySQLRedis

2018-03-14 09:49:35

數據庫遷移

2025-07-03 08:21:16

2021-08-31 20:21:11

VitessMySQL分庫

2023-08-11 08:59:49

分庫分表數據數據庫

2020-11-18 09:39:02

MySQL數據庫SQL

2020-10-29 09:10:06

MySQL

2021-01-26 05:37:08

分庫分表內存

2024-07-26 00:16:11

2025-04-01 08:45:00

點贊
收藏

51CTO技術棧公眾號

亚洲网站免费观看| 欧美精品成人网| 亚洲av无码一区二区三区dv| 99视频在线精品国自产拍免费观看| 免费在线观看精品| 中文字幕国产亚洲| 九九热视频免费| 福利影院在线看| 久久综合九色欧美综合狠狠| 国产在线观看不卡| 四虎884aa成人精品| 国产精品久av福利在线观看| 一本久道久久综合中文字幕| 91精品国产吴梦梦| 精品99又大又爽又硬少妇毛片| 精品一二三四在线| 人体精品一二三区| 玖玖爱免费视频| 日本欧美国产| 精品欧美一区二区在线观看| 91在线视频观看免费| 黑人精品视频| 亚洲人成网站精品片在线观看| 久久久久久一区| av网站免费播放| 美女视频网站黄色亚洲| 97精品国产97久久久久久| 午夜成人亚洲理伦片在线观看| 久久动漫网址| 日韩色视频在线观看| 欧美一级裸体视频| 在线手机中文字幕| 一区二区久久久| 一区二区三区在线视频111| 日本天堂在线| 99国产精品久| 国产精品美女久久久久av福利| 夜夜嗨av禁果av粉嫩avhd| 亚洲女人av| 欧美激情一区二区三级高清视频| 黄色录像一级片| 四虎8848精品成人免费网站| 国产香蕉一区二区三区在线视频| 中文字幕无码人妻少妇免费| 一区二区精彩视频| 91精品国产综合久久久蜜臀粉嫩| 99热手机在线| 亚洲精品国产嫩草在线观看| 精品久久久久久久久久| r级无码视频在线观看| 羞羞视频在线观看免费| 亚洲精品日日夜夜| 国产内射老熟女aaaa| 搞黄网站在线观看| 亚洲乱码中文字幕| 黄黄视频在线观看| 五月花成人网| 亚洲一级二级三级在线免费观看| 996这里只有精品| 日本aa在线| 亚洲国产cao| 成年人午夜免费视频| av在线小说| 欧美日韩国产丝袜另类| 国产亚洲天堂网| 国产精欧美一区二区三区蓝颜男同| 精品高清美女精品国产区| 美女日批免费视频| 中文字幕在线高清| 欧美性大战久久| 中文字幕22页| 亚洲视频国产精品| 亚洲国产精品yw在线观看| 国产呦小j女精品视频| 国产亚洲精品美女久久久久久久久久| 一区二区日韩精品| 天海翼在线视频| 影音先锋久久| 国产成人精品一区二区| 中文av免费观看| 国产乱码精品一区二区三区av| 国产成人精品一区二区三区福利 | 在线观看麻豆| 亚洲色图在线看| 东北少妇不带套对白| 中文在线а√天堂| 欧美日韩国产天堂| 精品无码av一区二区三区| 午夜a一级毛片亚洲欧洲| 永久免费毛片在线播放不卡 | 色猫av在线| 国产精品久久久久久久午夜片| www.-级毛片线天内射视视| 97蜜桃久久| 欧美日本免费一区二区三区| 国产香蕉精品视频| 精品国产91乱码一区二区三区四区| 日韩视频免费大全中文字幕| 国产91av视频| 蜜桃久久av一区| 精选一区二区三区四区五区| av大全在线免费看| 亚洲h在线观看| 亚洲一区二区三区观看| 欧美五码在线| 九九视频直播综合网| 国产熟妇一区二区三区四区| 国产一区二区不卡老阿姨| 久久精品日产第一区二区三区精品版| 天堂аⅴ在线地址8| 亚洲精品乱码久久久久久久久 | 懂色av一区二区三区免费看| 欧美一区二区三区在线免费观看 | 亚洲在线视频网站| 国产三级三级三级看三级| eeuss鲁片一区二区三区| 中文字幕精品视频| 国产一级18片视频| 国产91丝袜在线播放0| 亚洲高清在线播放| 韩国久久久久久| 亚洲第一区在线| 男人操女人的视频网站| 日本在线播放一区二区三区| 精品乱码一区二区三区| 91高清在线观看视频| 欧美三片在线视频观看| 男男做爰猛烈叫床爽爽小说 | 免费大片在线观看| 国产一区福利| 久久久久久久久久av| 国产精品久久久久久在线| 国产日韩欧美高清在线| 毛片在线视频观看| 成人影院网站ww555久久精品| 亚洲片在线资源| 亚洲第一在线播放| 99精品视频一区二区| 成人免费性视频| 日韩影片在线观看| 欧美国产高跟鞋裸体秀xxxhd| 一区二区三区精| 国产精品久久久久影院色老大| 日韩免费高清在线| 欧美日韩123| 日本不卡免费高清视频| 日韩亚洲视频在线观看| 精品久久久久久亚洲精品| 日本五十肥熟交尾| 亚洲精品视频啊美女在线直播| 国产精华一区| 大菠萝精品导航| 日韩av在线免费看| 日本一区二区免费视频| 永久91嫩草亚洲精品人人| 成人激情视频网| 免费不卡视频| 欧美一级xxx| 久久精品国产亚洲av香蕉| 国产高清精品久久久久| 日韩欧美猛交xxxxx无码| eeuss鲁片一区二区三区| 欧美激情精品久久久久久久变态 | 中文字幕亚洲色图| 亚洲天堂视频在线| 日韩美女视频一区| gogo亚洲国模私拍人体| 在线 亚洲欧美在线综合一区| 国产乱人伦精品一区二区| 国内精彩免费自拍视频在线观看网址 | 黑色丝袜福利片av久久| 日本精品久久久| 阿v免费在线观看| 91精品国产综合久久福利软件| 好吊色视频在线观看| 不卡一区二区中文字幕| aaa毛片在线观看| 91综合视频| 成人在线免费网站| 芒果视频成人app| www.国产精品一二区| 亚洲第一天堂网| 色哟哟国产精品免费观看| 刘亦菲国产毛片bd| 成人性色生活片| 8x8x最新地址| 欧美成人国产| 欧美一区少妇| 国产亚洲久久| 国产成人精品视| 手机在线免费观看av| 亚洲欧美日韩久久久久久| 国产一区二区麻豆| 精品国产31久久久久久| 香蕉成人在线视频| 99久久99精品久久久久久| jizz欧美性11| 99在线观看免费视频精品观看| 亚洲一区二区免费视频软件合集| 在线中文字幕-区二区三区四区| 亚洲国产高清福利视频| 中文在线最新版天堂| 一区二区免费看| 免费看一级黄色| 91麻豆蜜桃一区二区三区| 色18美女社区| 日日摸夜夜添夜夜添精品视频| 天天做天天躁天天躁| 欧美日韩老妇| 国产在线精品日韩| 美女日韩一区| 国产精品丝袜一区二区三区| xxx.xxx欧美| 精品日产免费二区日产免费二区| 国产mv免费观看入口亚洲| 成人午夜在线影视| 亚洲欧美日韩国产成人| 成人黄色免费视频| 欧美午夜精品久久久| 五月天婷婷丁香| 亚洲欧洲性图库| 久久久久亚洲av无码专区桃色| 国产精品一区二区免费不卡| 成人午夜激情av| 麻豆久久精品| 日日碰狠狠添天天爽超碰97| 欧美另类专区| 强伦女教师2:伦理在线观看| 精品国产网站| 欧美一区二区三区四区夜夜大片| 欧美顶级毛片在线播放| av色综合网| 国产一区二区三区免费在线 | 久久sese| 57pao国产成人免费| 久久免费电影| 欧美乱大交xxxxx| 成人影院在线看| 欧美另类极品videosbest最新版本 | 国内精品伊人久久| 四季久久免费一区二区三区四区| 另类视频在线观看| 黄色网页在线观看| 久久久精品视频成人| 里番在线观看网站| 久久国产一区二区三区| 激情影院在线观看| 久久久精品久久久| 在线视频中文字幕第一页| av黄色免费在线观看| 另类ts人妖一区二区三区| 成人做爽爽免费视频| 日本一区二区三区中文字幕 | 亚洲成人短视频| 日本电影亚洲天堂| 成人日韩在线| 国产精品视频一区二区高潮| 精品自拍视频| 亚洲tv在线观看| 这里视频有精品| 精品久久蜜桃| 精品久久久久久久| 一区二区视频在线观看| 亚洲欧美色图| 全黄性性激高免费视频| 免费看的黄色欧美网站| 日本999视频| 激情欧美日韩一区二区| 97免费公开视频| av午夜一区麻豆| 亚洲久久久久久久| 国产精品久久久久久久浪潮网站 | 午夜视频在线观看国产| 91尤物视频在线观看| 亚洲一区二区三区日韩| 中文字幕一区二区三区av| 欧美人妻精品一区二区免费看| 亚洲一区二区三区精品在线| www亚洲视频| 欧美日韩精品一区二区三区四区 | 国产69精品久久| 99久久自偷自偷国产精品不卡| 欧美久久香蕉| 中日韩在线视频| 亚洲第一区色| 亚洲 国产 图片| 成人精品国产一区二区4080| 亚洲av无码一区二区三区人| 一区二区三区在线视频免费观看| 日本在线观看视频网站| 在线观看免费一区| 亚洲精品无amm毛片| 亚洲色图美腿丝袜| 91麻豆一二三四在线| 茄子视频成人在线| 精品视频在线观看免费观看| 久久精品日韩精品| 66视频精品| 成人黄色一区二区| 国产成人高清视频| 欧美日韩国产黄色| 天天爽夜夜爽夜夜爽精品视频| 伊人精品在线视频| 日韩成人在线视频观看| 麻豆传媒免费在线观看| 国产成人精品999| 国产成人tv| 日韩中文在线字幕| 日韩中文字幕一区二区三区| 最新国产精品自拍| 亚洲欧美在线视频| 国产伦精品一区二区三区视频网站| 日韩亚洲欧美在线观看| 国产在线小视频| 91精品国产免费久久久久久| 精品一区二区三区中文字幕| 性欧美大战久久久久久久免费观看| 亚洲久久一区二区| 久久精品国产99久久99久久久| 国产日韩欧美一区二区三区乱码 | 一本色道久久综合亚洲精品婷婷| 亚洲精品欧洲| 中国免费黄色片| 一级特黄大欧美久久久| 在线视频1卡二卡三卡| 亚洲人午夜精品免费| 日韩伦理在线| 国产在线观看一区| 黄色日韩精品| 一区二区在线免费观看视频| 中文字幕视频一区二区三区久| 特级西西444www高清大视频| 亚洲欧美激情四射在线日| 97人人在线视频| 狠狠爱一区二区三区| 亚洲国产高清一区二区三区| 农村末发育av片一区二区| 亚洲女女做受ⅹxx高潮| 91一区二区视频| 精品国产依人香蕉在线精品| 日韩在线激情| 亚洲午夜精品久久久久久浪潮| 秋霞午夜av一区二区三区| 无码少妇一区二区| 色老头久久综合| 免费a在线观看| 国产精品video| 欧美日韩一区二区三区视频播放| 在线视频日韩一区 | 成人在线观看小视频| 欧美日韩精品一区二区三区四区| 在线观看麻豆| 亚洲伊人一本大道中文字幕| 在线精品视频在线观看高清| 亚洲一二三不卡| 亚洲激情图片qvod| 东京干手机福利视频| 久久露脸国产精品| 欧美绝顶高潮抽搐喷水合集| 国产91美女视频| 国产午夜亚洲精品午夜鲁丝片| 午夜精品久久久久久久蜜桃| 一区二区福利视频| 高清不卡一区| 六月婷婷在线视频| 久久久精品综合| 91精品国产乱码久久| 久久综合久久美利坚合众国| 伊色综合久久之综合久久| 免费一级特黄特色毛片久久看| 久久欧美一区二区| 一区两区小视频| 久久久久久久国产| 婷婷精品在线| 色婷婷.com| 亚洲v中文字幕| 国产youjizz在线| 91在线观看免费高清| 在线播放亚洲| 少妇的滋味中文字幕bd| 欧美一区二区三区视频免费播放| av在线网页| 亚洲一二三区精品| 国产成人亚洲综合a∨婷婷| 日韩欧美亚洲一区二区三区| 国产午夜精品视频免费不卡69堂| 国产日本亚洲| 男女激情无遮挡| 最新热久久免费视频| 高清一区二区三区四区| 国产91在线播放精品91| 一本一道久久a久久精品蜜桃| 国产不卡一二三| 欧美日韩国产三级| av中文在线资源库| 一区二区精品在线| 99免费精品在线| 国产视频第二页| 国产91精品久久久久久| 久久久久亚洲|