首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

全局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年,不过一般一个系统也很难超过这个限制。

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

    常见的全局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.2K20

    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、大流量下的网络瓶颈。

    60420

    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生成服务的演进过程。

    1.7K110

    全局唯一 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。

    3.5K41

    全局id生成器试用之Leaf

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

    1.4K50

    分布式全局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.2K10

    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.3K40

    苹果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.1K20

    分布式全局唯一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.2K20

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

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

    61320

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

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

    69230

    如何生成全局的分布式ID

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

    68720

    分布式全局唯一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.1K70

    全局唯一ID发号器的几个思路

    这就引出了记录标识生成(也就是上文提到的三个XXX-id)的两大核心需求: 全局唯一 趋势有序 这也是本文要讨论的核心问题:如何高效生成趋势有序的全局唯一ID。...二、常见方法、不足与优化 方法一:使用数据库的 auto_increment 来生成全局唯一递增ID 优点: 简单,使用数据库已有的功能 能够保证唯一性 能够保证递增性 步长固定 缺点: 可用性难以保证...方法二:单点批量ID生成服务 分布式系统之所以难,很重要的原因之一是“没有一个全局时钟,难以保证绝对的时序”,要想保证绝对的时序,还是只能使用单点服务,用本地时钟保证“绝对时序”。...,保证生成的ID是趋势递增的 缺点: 由于“没有一个全局时钟”,每台服务器分配的ID是绝对递增的,但从全局看,生成的ID只是趋势递增的(有些服务器的时间早,有些服务器的时间晚) 思路比方案重要,顺手帮转哟...而基于数据库生成,一般包含以下几种: MySQL(5.6) AUTO_INCREMENT 特性 Postgres(REL 9.6 Stable) SEQUENCE 特性 Oracle 数据库的 SEQUENCE

    89320

    MySQL 定义变量 – 局部 – 全局

    本页目录 定义一个局部变量(会这个就够了) 定义全局变量(了解即可) 定义一个局部变量(会这个就够了) 方式:set @变量名 注意哦:这个局部变量是Session回话级别的,关闭本次回话,也就是在你Navicat...where charid = @charId; 定义全局变量(了解即可) 注意哦:全局变量变量名不允许随便设置。...必须是MySQL系统能够识别的变量名称才可以,比如:slow_query_log。...还有一点,设置的内容,重启MySQL后,就会恢复成配置文件的设置内容,如果要永久生效,记得在MySQL配置文件中设置哦!!!...写法2 推荐 -- 设置系统全局慢日志开启 set global slow_query_log = 'ON'; -- 查看系统全局慢日志相关字段信息 show variables like 'slow_query

    2.5K40
    领券