V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jaylee4869
V2EX  ›  算法

分布式环境生成 10 位不重复数怎么玩?

  •  
  •   jaylee4869 · 2019-09-27 19:15:02 +08:00 · 4376 次点击
    这是一个创建于 1884 天前的主题,其中的信息可能已经有所发展或是发生改变。

    snowflake 太长了。。。

    8 条回复    2019-10-18 00:17:34 +08:00
    mayx
        1
    mayx  
       2019-09-27 19:17:07 +08:00 via Android
    节点号+随机数
    iPhoneXI
        2
    iPhoneXI  
       2019-09-27 19:22:03 +08:00 via Android
    号段模式
    Raymon111111
        3
    Raymon111111  
       2019-09-27 19:27:43 +08:00
    机器自己注册一个 id (用数据库主键是最简单的), 启动的时候放在本地.

    然后 时间(unixtime 秒级别) + id + 几位随机数(比如三位 000 - 999) 就可以弄出十几位的不重复数

    机器生成的时候把单秒生成的数存在本地(注意做好多线程控制), 保证自己一秒内不生成重复的(重复后重来一个即可)

    风险点有这么几个, 结合自身的业务, 一般下面的限制点都不会成为问题

    1. 机器的 id 位数是固定的, 比如也是限制 3 位, 那么这就不支持超过 1000 台机器同时干这么事, 总之一开始设置的机器 id 位数不能改变

    2. 一秒内单台机器生成的 id 不能特别多 (虽然上限是 1000, 但是太多之后冲突多了也影响效率)

    3. 并不是严格自增的
    oneisall8955
        5
    oneisall8955  
       2019-09-27 19:53:30 +08:00 via Android
    美团团队在雪花算法里面做了优化,没用过,希望有帮助
    WordTian
        6
    WordTian  
       2019-09-27 20:03:22 +08:00 via Android
    时间 一,节点码,自增序号
    jaylee4869
        7
    jaylee4869  
    OP
       2019-10-11 15:53:08 +08:00
    public class RandomIDUtils {

    private static final long LIMIT = 1000000000L;
    private static long last = 0;
    // 集群环境下修改此 workerId(1,2,3 依次递增)
    private static final long workerId = 1;

    /**
    * 生成 10 位不重复数字, 首位为 workerId
    * 线程安全
    * 单调递增
    */
    public static long getID() {
    long id = System.currentTimeMillis() % LIMIT;
    if (id <= last) {
    id = (last + 1) % LIMIT;
    }
    return (last = id) + workerId * LIMIT;
    }
    }
    lxk11153
        8
    lxk11153  
       2019-10-18 00:17:34 +08:00
    Leaf——美团点评分布式 ID 生成系统
    ht 河蟹 tps://tech.meituan.c 河蟹 om/2017/04/21/mt-leaf.html)
    美团点评分布式 ID 生成系统中 Leaf-segment 数据库方案的实现
    ht 河蟹 tps://github.c 河蟹 om/zhuzhong/idleaf
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2639 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 02:46 · PVG 10:46 · LAX 18:46 · JFK 21:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.