分布式高效唯一ID生成器(sequence)

简介

高效GUID产生算法(sequence),基于Snowflake实现64位自增ID算法。

Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。

性能测试数据:

Snowflake算法核心

把时间戳,工作机器id,序列号组合在一起。

除了最高位bit标记为不可用以外,其余三组bit占位均可浮动,看具体的业务需求而定。默认情况下41bit的时间戳可以支持该算法使用到2082年,10bit的工作机器id可以支持1023台机器,序列号支持1毫秒产生4095个自增序列id。下文会具体分析。

Snowflake – 时间戳

这里时间戳的细度是毫秒级,具体代码如下,建议使用64位linux系统机器,因为有vdso,gettimeofday()在用户态就可以完成操作,减少了进入内核态的损耗。

Snowflake – 工作机器id

严格意义上来说这个bit段的使用可以是进程级,机器级的话你可以使用MAC地址来唯一标示工作机器,工作进程级可以使用IP+Path来区分工作进程。如果工作机器比较少,可以使用配置文件来设置这个id是一个不错的选择,如果机器过多配置文件的维护是一个灾难性的事情。

Snowflake – 序列号

序列号就是一系列的自增id(多线程建议使用atomic),为了处理在同一毫秒内需要给多条消息分配id,若同一毫秒把序列号用完了,则“等待至下一毫秒”。

获取

cn.izern

sequence

${version}

使用

import cn.izern.sequence.Sequence;

Sequence sequence = new Sequence();

sequence.nextId();

线程安全,生成唯一序列ID

hibernate/jpa 使用Sequence作为ID生成方式

private Long id;

// other

@Id

@GeneratedValue(generator = "idGenerator")

@GenericGenerator(name = "idGenerator", strategy = "cn.izern.hibernate.id.IDSequenceGenerator")

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

java sequence 生成器_分布式高效唯一ID生成器(sequence)相关推荐

  1. java id生成器 分布式_分布式高效唯一ID生成器(sequence)

    分布式高效唯一ID生成器(sequence) 简介 高效GUID产生算法(sequence),基于Snowflake实现64位自增ID算法. Twitter-Snowflake算法产生的背景相当简单, ...

  2. java 唯一id生成算法_分布式全局唯一ID生成方案之snowflake算法

    已有的方案: 可大致分为: 完全依赖关系/非关系型数据库递增的方案 完全不依赖数据源作为生成因子的UUID 半依赖数据源作为生成因子的snowflake 为什么推荐snowflake? 这个问题,可以 ...

  3. 分布式全局唯一 ID生成器(百度UidGenerator)

    文章目录 为什么要使用全局ID生成器? 使用UUID作为主键? 使用数据库主键自增? UidGenerator简介 雪花算法snowflake SpringBoot整合百度UidGenerator 为 ...

  4. 分布式「唯一ID生成器」的几种生成方案

    前言 在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID.退款ID等.那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十 ...

  5. 雪花算法之唯一ID生成器理解

    雪花算法基本情况 雪花算法是一个分布式的唯一ID生成器. 它应该具有高并发,以及高性能优点. 基于时间戳,ID具有有序性,同时分布式下机器间时间差异过大(类似同一台机器时间回拨,一定会重复),会导致重 ...

  6. 唯一ID生成器snowflake

    分布式全局唯一ID生成器 很多场景需要使用全局唯一ID,用来标识唯一一条消息,唯一一笔交易,唯一一个用户,唯一一张图片等等. 传统数据库表的自增主键是很简单的一种实现方式,前提是你没有分库,也没有分表 ...

  7. 百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题

    转载自   百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题 UidGenerator是百度开源的Java语言实现,基于Snowflake算法的唯一ID生成器.而且,它非常适 ...

  8. php id 生产器,Laravel 分布式唯一 ID 生成器运用_PHP开发框架教程

    在运用程序中,常常须要全局唯一的ID作为数据库主键.怎样生成全局唯一ID? 起首,须要肯定全局唯一ID是整型照样字符串?假如是字符串,那末现有的UUID就完整满足需求,不须要分外的事情.瑕玷是字符串作 ...

  9. 百度开源的一款分布式高性能的唯一ID生成器,非常强大!

    来源:https://lilinchao.com/archives/1226.html 一.UidGenerator是什么 UidGenerator是百度开源的一款分布式高性能的唯一ID生成器,是基于 ...

  10. SnowFlake唯一ID生成器

    写在前面 架构是权衡的结果,架构也是一层层的组件拼接起来的,如果没有好用的组件,架构势必会做阉割,架构的理想态是建立在一堆友好.易用.标准化的组件之上的.在我过去的经验中,有两类组件经常会出现在我的架 ...

最新文章

  1. 【设计模式】三大类:创建型模式、结构型模式、行为型模式
  2. IE二级链接无法打开
  3. 从3个科技公司里学到的57条经验(转)
  4. jquery 进行dom操作
  5. docker 之volume
  6. 35岁老半路程序员的Python从0开始之路
  7. 简单的C语言开源软件,自己写的一个简单的数据库...完整开源...
  8. List<T>和List<?>的区别
  9. Java基础篇:加入带自变量的方法
  10. 深掘工业互联网大数据五大维度
  11. 基于Systemview的巴克码识别器设计
  12. 预卷积HDR环境贴图
  13. sd卡驱动分析 linux,linux下SD卡驅動分析(一)
  14. NAT技术及NAT ALG
  15. 单片空间后方交会程序c语言,摄影测量实习报告-单片空间后方交会
  16. windows笔记本查看电池损耗
  17. CTFweb篇——html源代码签到题
  18. 《数据库系统概论》知识整理
  19. webService--java
  20. 好嗨游戏:战火重燃!2019LPL夏季赛精彩看点全盘点! || 附夏季赛赛程表

热门文章

  1. 基于python版本的谷歌GEE云计算平台使用,以DEM数据下载为例(GEE系列1)
  2. SQL server 2017安装教程
  3. 电脑虎牙,虎牙助手主播版电脑版
  4. [算法]PRML学习笔记1.2.3贝叶斯概率论
  5. ktv娱乐收银系统java_美萍餐饮娱乐管理系统(歌厅管理软件,管理软件,收银系统,管理系统,娱乐收银软件)...
  6. 会计计算机学什么软件有哪些,会计一般要学什么软件
  7. 2021大树分享收集的网盘搜索站给兄弟们
  8. 计算思维在计算机科学中的应用,计算思维在离散数学中的应用.pdf
  9. AI电话机器人源码买断 后私有云部署如何上线?
  10. java jpa面试题_jpa面试题解析,java面试题