首页
学习
活动
专区
圈层
工具
发布

全局id如何生成?

很多时候我们都需要生成一个全局id用于数据存储的主键,那么如何生成一个全局id呢?有哪些方法?优缺点是啥?...1.数据库自增id 我们需要一个单独的表给我们专门生成自增id,每次到这个专门生成id的表里插入一条数据拿回id,带着这个id去新增自己分表数据; 优点:方便简单,谁都会用; 缺点: 1.单库生成自增...你可以将别的业务字段值跟当前时间拼接起来,组成一个全局唯一的编号,订单编号,时间戳 + 用户id + 业务含义编码 4.snowflake算法 twitter开源的分布式id生成算法,就是把一个64位的...long型的id,1个bit是不用的符号位,剩下的用其中的41 bit作为毫秒数,用10 bit作为工作机器id(5位机房id加五位机器id),12 bit作为序列号,也不是特别复杂,咱们画一下图就知道了...id 64位的long型的id,64位的long -> 二进制 4.1 雪花算法的坑: 1.id的时间戳部分只能表示69年,不过一般一个系统也很难超过这个限制。

2.2K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    常见的全局ID生成方案

    在分布式系统架构中,经常都需要一个全局的ID生成器,来保证系统中某些业务场景中对于主键的要求,当前实现ID生成的方式还是挺多的。本文我们来谈谈常见的ID生成方式。...全局ID该有的特性 唯一性: 确保生成的ID为全网唯一 有序性: 确保ID对于某项业务来说是有序性递增的 时间戳: 可清楚知道ID生成的时间点 高可用性: 确保任何时间都能生成有效ID 常见的ID生成方式...数据库自增 mysql数据库使用auto_increment 字段来辅助为ID自增。 oracle数据库通过创建sequence 来生成ID自增。...全局唯一 三. snowflake snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。....”Leaf具备高可靠、低延迟、全局唯一等特点。

    1.6K20

    Go全局唯一ID选型集合

    com") // id: K7pnGHAp7WLKUSducPeCXq length: 22 fmt.Println("id:", id, "length:", len(id))...length: 19 fmt.Println("id:", id, "length:", len(id)) } 数据库自增ID 这里常规是指数据库主键自增索引。...Zookeeper类似一个文件系统,每个节点都有唯一路径名(Znode),Zxid是个全局事务计数器,每个节点发生变化是都会记录响应的版本(Zxid),这个版本号是全局唯一且顺序递增的。...每个业务分配一个biz_tag、并记录各业务最大id(max_id)、号段跨度(step)等数据。这样每次取号只需要更新biz_tag对应的max_id,就可以拿到step个id。...实现方案 使用Zookeeper顺序增、全局唯一的节点版本号,替换了原有的机器地址。解决了时钟回拨的问题。 前面介绍ZooKeeper的缺点,强依赖ZooKeeper、大流量下的网络瓶颈。

    1.2K20

    snowflake升级版全局id生成

    背景 分布式系统或者微服务架构基本都采用了分库分表的设计,全局唯一id生成的需求变得很迫切。 传统的单体应用,使用单库,数据库中自增id可以很方便实现。...概括下来,那业务系统对ID号的要求有哪些呢? 1.全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。...进阶历程 自从项目从单体应用拆分成微服务架构后,对全局id部分做了些摸索。 2.1 uuid 刚开始拆分业务,id主键都是使用uuid字符串。...2.2 数据库生成 以MySQL举例,利用给字段设置 auto_increment_increment和 auto_increment_offset来保证ID自增,每次业务使用下列SQL读写MySQL得到...总结 这篇文章和大家分享了笔者项目中全局id生成服务的演进过程。

    2K110

    全局唯一 ID 服务的分布式ID生成系统

    此时一个能够生成全局唯一ID的系统是非常必要的。概括下来,那业务系统对ID号的要求有哪些呢? 全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。...ID作为主键时在特定的环境会存在一些问题,比如做DB主键的场景下,UUID就非常不适用: ① MySQL官方有明确的建议主键要尽量越短越好[4],36个字符长度的UUID不符合要求。...数据库生成 以MySQL举例,利用给字段设置auto_increment_increment和auto_increment_offset来保证ID自增,每次业务使用下列SQL读写MySQL得到ID号。...ID发号性能瓶颈限制在单台MySQL的读写性能。 对于MySQL性能问题,可用如下方案解决:在分布式系统中我们可以多部署几台机器,每台机器设置不同的初始值,且步长和机器数相等。比如有两台机器。...如果你的系统要保证100%的数据强一致,可以选择使用“类Paxos算法”实现的强一致MySQL方案,如MySQL 5.7前段时间刚刚GA的MySQL Group Replication。

    4.7K41

    分布式全局ID生成方案

    这种情况根据数据库的自增ID就会产生相同ID的情况,不能保证主键的唯一性。 ? 如上图,如果第一个订单存储在 DB1 上则订单 ID 为1,当一个新订单又入库了存储在 DB2 上订单 ID 也为1。...对MySQL索引不利:如果作为数据库主键,在InnoDB引擎下,UUID的无序性可能会引起数据位置频繁变动,严重影响性能,可以查阅 Mysql 索引原理 B+树的知识。...以MySQL举例,利用给字段设置 auto_increment_increment和 auto_increment_offset来保证ID自增。...还有就是ID发号性能瓶颈限制在单台MySQL的读写性能。...Redis 实现分布式全局唯一ID,它的性能比较高,生成的数据是有序的,对排序业务有利,但是同样它依赖于redis,需要系统引进redis组件,增加了系统的配置复杂性。

    1.8K10

    全局id生成器试用之Leaf

    但是分库分表后,主键id就不能依赖于MySQL,需要从外部去获取id。...目前我们生产环境在用的DBLE作为中分库分表中间件, 其自带了类似snowflake方案的全局id生成器,也可以基于数据库来实现。...但是,在一个大点的公司里面, 全局id 是一个用处很广泛的服务,通常会独立作为一个公共服务对外提供。 这里我们就以美团点评出的 Leaf为例,看下它的效果。...的时候,人为的把MySQL关闭掉,可以看到如下的,可以看到刚开始leaf因为号段+双buffer的存在,可以继续发号,但是当预分配的id都用光后,就会报错了: ?...只要我们的MySQL数据库故障切换的时候不要太久,并且配合设置不同biz_tag以不同大小的step,通不会对对leaf服务造成影响。 下面是双buffer在web界面上的体现: ?

    1.7K50

    Redis实战9-全局唯一ID

    单表限制:随着我们商城规模越来越大,mysql的单表的容量不宜超过500W,数据量过大之后,我们要进行拆库拆表,但拆分表了之后,他们从逻辑上讲他们是同一张表,所以他们的id是不能一样的, 于是乎我们需要保证...id的唯一性。...全局ID生成器全局ID生成器,是一种在分布式系统下用来生成全局唯一的ID工具,一般需要瞒住下列特性:唯一性、高可用、递增性、安全性、高性能全局唯一ID生成策略:UUID、Redis自增长、雪花算法、数据库自增...Redis自增ID策略:1:每天一个key,方便统计订单量;2:ID都在是时间戳+计数器实战:基于Redis拼接其他信息来实现全局唯一ID全局唯一ID使用long类型的,其中时间戳是基于某一个时间点开始的...注意:我们再来看看全局唯一ID的格式。如上图,我们可以看出,共64位,其中符号位是1个,时间戳是31位。序列号是32位,发现什么了吗?如果我们把时间戳向左移动32位(因为序列号是32位。

    1.8K40

    苹果cms全局标签及各页面ID

    苹果cms全局标签及各页面ID ---- {$maccms.site_name} 网站名称 {$maccms.site_url} 网站url {$maccms.site_keywords...网站目录 {$maccms.path_tpl} 当前模板目录 {$maccms.search_hot} 热门搜索词 {$maccms.mid} 模块id...,1视频2文章3专题 {$maccms.aid} 当前系统页面id 首页id:1 地图id:2 rssid:3 留言本id:4 评论id:5 用户中心id:6 自定义页面id:7 视频首页id:10 文章首页...id:20 专题首页id:30 视频分类页id:11 视频分类筛选id:12 视频搜索id:13 视频详情id:14 视频播放id:15 视频下载id:16 文章分类id:21 文章分类筛选id:22...文章搜索id:23 文章详情id:24 专题详情id:31 声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。

    1.6K20

    分布式全局唯一ID生成策略

    此时一个能够生成全局唯一ID的系统是非常必要的。 概括下来,业务系统对ID号的要求有哪些呢? ID生成系统的需求 全局唯一性:不能出现重复的ID,最基本的要求。...(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。...缺点 依赖机器的时钟,如果服务器时钟回拨,会导致重复ID生成。 在分布式环境上,每个服务器的时钟不可能完全同步,有时会出现不是全局递增的情况。...default '', primary key (id), unique key stub (stub)) engine=MyISAM; # 每次业务可以使用以下SQL读写MySQL得到ID...关于分布式全局唯一ID的生成,各个互联网公司有很多实现方案,比如美团点评的Leaf-snowflake,用zookeeper解决了各个服务器时钟回拨的问题,弱依赖zookeeper。

    1.7K20

    分库分表后全局ID生成方案

    若设计一用户系统时,使用自增ID作为用户ID,就可能出现不同库有两个相同ID的用户,这肯定不能接受,那你能咋办呢? 推荐搭建发号器服务,生成全局唯一ID。...当数据库分库分表后,使用自增字段就无法保证 ID 的全局唯一性了吗? 1.使用数据库的自增,设置起始值和步长不一样,不是一样可以实现吗?...ID有序会提升数据的写性能 MySQL InnoDB主键也是一种索引。索引数据在B+树中有序排列。当插入的下一条记录ID递增时,DV只需将其追加到后面。...你可以将别的业务字段值跟当前时间拼接起来,组成一个全局唯一的编号,比如订单编号: 时间戳 + 用户id + 业务含义编码。...业务信息指的是项目中哪个业务模块使用,如用户模块生成的ID,内容模块生成的ID,把它加入进来: 希望不同业务发出来的ID可以不同 因为在出现问题时可以反解ID,知道哪个业务发出的ID 工程化 为业务生成全局唯一

    1.2K20

    框架篇:分布式全局唯一ID

    但在分布式,又该如何实现唯一性的ID 分布式ID的特性 数据库自增的ID Redis分布式ID Zookeeper分布式ID 全局唯一UUID的优缺点 Twitter的雪花算法生成分布式ID github...地址[1],感谢star 分布式ID的特性 全局唯一性,必须性 幂等性,如果是根据某些信息生成,则需要保障幂等性 注意安全性,ID里隐藏一些信息,不能被猜出来,也不能被猜出来 ID 如何生成 趋势递增性...基于Redis INCR 命令生成分布式全局唯一ID 服务向redis获取Id,ID则和数据库解耦,可以解决ID和分表分库的问题,而且redis比数据库性能更快,可以支撑集群服务并发获取ID的需求 redis...//10进制 System.out.println(snowFlake.nextId()); } } } 欢迎指正文中错误 参考文章 常见分布式全局唯一...github.com/cscsss/learnHome [2] 常见分布式全局唯一ID生成策略及算法的对比: https://blog.csdn.net/u010398771/article/details

    1K30

    如何生成全局的分布式ID

    我们很多场景都需要生成全局的ID。比如我们将数据库进行分库分表后,就需要全局的不重复的主键ID。...比如在一些业务中,我们需要给用户生成不重复的编号(这里不是数据库的主键ID),如1000,1001,1002...。那么我们如何生成全局的ID呢?...使用UUID生成 我们可以使用UUID生成全局唯一的ID。但是千万不要用于做数据库(如MySQL)的主键ID,这样会使主键索引的维护更为复杂。...测试代码如下: 测试结果: 7509621c028c40378b7a79c8e85d49a7 使用数据库生成自增的ID 基于数据库的auto_increment自增ID完全可以充当分布式ID,这个是我们常用的方法...先创建一张生成ID的表,每次需要生成ID的时候往ID表里面插入一条数据,获取其主键ID即可。但是这种生成方式在高并发下面并不适用。这里不做细讲。

    1.1K20

    架构实战:全局唯一ID的技术方案

    一、分布式 ID 核心诉求:主流方案对比选型 在开展技术选型前,首先明确生产级分布式全局唯一 ID必须具备的五大核心特性,这也是评判 ID 方案优劣的核心标准,缺一不可: 1....二、雪花算法核心原理 雪花算法是 Twitter 开源的分布式 ID 生成算法,最终生成64 位 Long 类型整型 ID,完美兼容 Java 语言与 MySQL 数据库,索引性能表现优异。...三、整体架构设计 目前网络上多数雪花算法实现采用中心化部署模式,强依赖注册中心或独立 ID 服务,一旦核心节点宕机,会导致全局 ID 生成链路瘫痪,存在严重单点风险。...SpringBoot配置注入 通过配置文件指定节点ID,保证集群全局唯一,适配所有部署环境。...集群节点 ID 重复问题 问题描述:集群内多个服务实例配置相同的workerId和dataCenterId,会造成全局 ID 重复。

    32910

    分布式全局唯一ID的实现

    特点: 全局唯一性(核心):作为唯一标识,不可以出现重复ID 趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能...更重要的是如果存储在数据库中,作为主键建立索引效率低) 适用场景: 不需要考虑空间占用,不需要生成有递增趋势的ID,且不在MySQL中存储。...Flicker 主要思路是涉及单独的库表,利用数据库的自增ID+replace_into,来生成全局ID。...以UUID等方式生成数据的全局唯一标识 简单说,就是终端服务器要发送的数据赋予UUID这样的ID,来确保全局唯一。这样终端服务器就可以和中控服务器保持同样且不冲突的ID了。...附录 参考 阿里P8架构师谈:分布式系统全局唯一ID简介、特点、5种生成方式 分布式ID生成策略 分布式全局唯一ID生成策略

    56110

    分布式全局唯一ID生成方案

    在携程账号数据库迁移MySQL过程中,我们对用户ID的生成方案进行了新的设计,要求能够支撑携程现有的新用户注册体量。...本文通过携程用户ID生成器的实现,希望能够对大家设计分库分表的唯一id有一些新的思路。 二、特性需求 1. 全局唯一 2. 支持高并发 3. 能够体现一定属性 4. 高可靠,容错单点故障 5....3、twitter在把存储系统从MySQL迁移到Cassandra的过程中由于Cassandra没有顺序ID生成机制,于是自己开发了一套全局唯一ID生成服务:Snowflake。...4、Redis生成ID 当使用数据库来生成ID性能不够要求的时候,我们可以尝试使用Redis来生成ID。这主要依赖于Redis是单线程的,所以也可以用生成全局唯一的ID。...Flicker在解决全局ID生成方案里就采用了MySQL自增长ID的机制(auto_increment + replace into + MyISAM)。

    2.4K70
    领券