美文网首页
软件生成唯一ID号(流水号)那些事

软件生成唯一ID号(流水号)那些事

作者: 青岛大桥_Android到后端 | 来源:发表于2020-01-06 11:52 被阅读0次

1. 历史

从软件发展以来,对某个业务功能生成唯一的流水号(通常是数字或字母混合)就成为一个必要的功能。

无论是一个单片机(MCU), 还是一台嵌入式Linux设备, 或是服务器,服务器集群。

在数据库里,这个ID经常被称为“主键”(Primary Key), 它是海量数据得以不乱掉的根本。

曾几何时,每次开发类似的软件,都要重新造一遍轮子,每个人的想法和算法都不一样,合作起来难免浪费工作量。

2. 原始和朴素的做法

  1. 进化阶段1

对于一台设备,最容易想到的就是根据时间戳来标识了,
比如生成格式为

  • 年月日时分秒

20200107102003 代表2020年1月7日10点20分03秒。

然而,一旦实用起来,发现以下的问题:
1) 如果1秒钟需要2个唯一ID怎么办?这样就重复了
2) 如果有多台设备同时按这个办法产生怎么办? 也难免在1秒钟内不产生多个。

  1. 进化阶段2

要解决1秒钟产生2个以上唯一ID这个问题,引入一个序列号概念,生成格式变成了

  • 年月日时分秒 + 流水号

只要流水号有几位,就够用了,比如5位,在1秒钟业务量不至于产生99999个这么多的ID号需求吧?

  1. 进化阶段3
    要解决多台设备的问题,这么办,再加几位,来代表设备号
  • 年月日时分秒 + 流水号 + 设备号

3. 现实

云服务器日渐流行,它的单机相比,需要更多的配合的交流,没有标准可不行。终于有人按捺不住了,出个标准开放出来,大家都用起来吧。自己的算法也就成标准的了,最先推出的是twitter
,他们还给起了个名字:

分布式自增ID算法——雪花算法 (SnowFlake)

image.png

好象真的没必要多说了,一看就明白了。这已经成为事实上的一个简易标准了。
需要注意的是:
时间是以10ms为单位的,所以更加精确,够用64年的。在座的程序员不用担心退休前软件有bug的,哈哈哈哈。

参考资料:
https://www.sohu.com/a/232008315_453160

相关文章

  • 软件生成唯一ID号(流水号)那些事

    1. 历史 从软件发展以来,对某个业务功能生成唯一的流水号(通常是数字或字母混合)就成为一个必要的功能。 无论是...

  • Spring Boot工程集成全局唯一ID生成器 UidGene

    本文共 823字,阅读大约需要 3分钟 ! 概述 流水号生成器(全局唯一 ID生成器)是服务化系统的基础设施,其在...

  • Spring Boot教你一种方法生成全局唯一ID

    一、概述 流水号生成器(全局唯一 ID生成器)是服务化系统的基础设施,其在保障系统的正确运行和高可用方面发挥着重要...

  • go 实现mysql记录流水号生成

    go 实现mysql记录流水号生成 业务 订单编号的生成:PO+日期+当日流水号;如PO2020120301 实现...

  • 分布式唯一ID实现

    分布式唯一ID实现在业务开发中,大量场景需要用到唯一ID,比如系统流水号,订单号等等。那么,分布式唯一ID有哪些特...

  • JAVA-流水号、日期操作

    流水号实现 AtomicInteger深入理解java流水号生成的几种方式最后发现简单的方法都多少有点纰漏,例如第...

  • 生成流水号

    首先输入事物代码:SNRO 保存 确定 代码调用

  • dubbo微服务之间流水号的隐式传递

    做开发的人都知道流水号这个概念,有业务流水号,交易流水号,请求流水号等等,各种流水号。 无论是啥名字的流水号,目的...

  • Redis 分布式锁

    0. 单机的并发问题 以一个『流水号生成』的场景为例,普通的后台应用通常都是使用时间戳的方式生成流水号,但是在用户...

  • 并发模拟研究

    模拟一个生成流水号的操作 准备工作 z_serial 表 num 字段初始值为 0 ,记录当前流水号。 z_dat...

网友评论

      本文标题:软件生成唯一ID号(流水号)那些事

      本文链接:https://www.haomeiwen.com/subject/blsractx.html