MySQL 雪花Id函数

这篇具有很好参考价值的文章主要介绍了MySQL 雪花Id函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境 MySQL5.7

简介

snowflake是Twitter开源的分布式ID生成算法,结果是64bit的Long类型的ID,有着全局唯一和有序递增的特点。

mysql雪花算法id,mysql,数据库,性能优化,安全

  • 最高位是符号位,因为生成的 ID 总是正数,始终为0,不可用。
  • 41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。
  • 10位的机器标识,10位的长度最多支持部署1024个节点。
  • 12位的计数序列号,序列号即一系列的自增ID,可以支持同一节点同一毫秒生成多个ID序号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号。
    缺点也是有的,就是强依赖机器时钟,如果机器上时钟回拨,有可能会导致主键重复的问题。

雪花Id

脚本根据 github:https://github.com/yitter/IdGenerator/tree/master/SQL 的SQL Server 版移植而来

雪花Id脚本

CREATE FUNCTION `SnowId`() RETURNS bigint(20)
BEGIN
	
	DECLARE b_current_time BIGINT;
	DECLARE b_time_tick BIGINT;
	DECLARE i_work_id INT;
	DECLARE i_work_id_big_length INT;
	DECLARE i_seq_big_length INT;
	DECLARE f_random FLOAT;
	
	DECLARE b_res BIGINT;
	
	SET i_work_id = 1;
	SET i_work_id_big_length = 4;
	SET i_seq_big_length = 8;
	SET b_current_time = (REPLACE(UNIX_TIMESTAMP(CURRENT_TIMESTAMP(3)),'.','')) + 0;
	SET b_time_tick = b_current_time - 1582136402000;
	SET f_random = RAND();
	
	SET b_res = b_time_tick * POWER(2, i_work_id_big_length + i_seq_big_length) + i_work_id * POWER(2, i_seq_big_length) + (5 + round((POWER(2, i_seq_big_length)-1) * f_random, 0));
	
	RETURN b_res;
END

测试脚本

创建一个名为TestSnowId存储过程
内容:
定义了一个int变量i默认为1;
创建了一个临时表temp_numbers用于存储生成的SnowId;
循环5000次,并将SnowId添加到temp_numbers表内;
查询temp_numbers表内数据;
删除临时表;

CREATE PROCEDURE `TestSnowId` () 
BEGIN
	DECLARE i INT DEFAULT 1;
	CREATE TEMPORARY TABLE IF NOT EXISTS temp_numbers ( number BIGINT );
	WHILE i <= 5000 DO
	    INSERT INTO temp_numbers ( number ) VALUES (SnowId ());
		SET i = i + 1;
	END WHILE;
	SELECT * FROM temp_numbers;
	DROP TEMPORARY TABLE IF EXISTS temp_numbers;
END

使用

调用语句

SELECT SnowId();

mysql雪花算法id,mysql,数据库,性能优化,安全

测试是否重复

CALL TestSnowId();

mysql雪花算法id,mysql,数据库,性能优化,安全文章来源地址https://www.toymoban.com/news/detail-745333.html

到了这里,关于MySQL 雪花Id函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 雪花算法生成唯一数字id

    2024年02月02日
    浏览(47)
  • 分布式ID生成算法——雪花算法

    一、分布式ID ID可以唯一标识一条记录。 对于单体架构,我们可以使用自增ID来保证ID的唯一性。但是,在分布式系统中,简单的使用自增ID就会导致ID冲突。这也就引出了 分布式ID 问题。分布式ID也要求满足分布式系统的 高性能、高可用、高并发 的特点。 二、雪花算法 世界

    2024年02月06日
    浏览(47)
  • 分布式ID生成算法:雪花算法

    雪花算法(Snowflake)是一种分布式ID生成算法,可以生成唯一的、有序的、不重复的ID号,广泛应用于分布式系统中。其生成的ID号由64位二进制数组成,可以转换成16进制或10进制的字符串表示。 雪花算法的核心思想是将一个64位的二进制数分成四部分,分别表示时间戳、数据

    2024年02月15日
    浏览(37)
  • spring boot中使用雪花算法生成雪花ID

    目录 1、什么是雪花算法 2、雪花算法的优缺点 3、spring boot项目中使用雪花算法使用 雪花算法(Snowflake)是一种生成全局唯一ID的算法,由Twitter公司开发。它可以在分布式系统中生成全局唯一的ID,解决分布式系统中的数据合并和分片等问题。 雪花算法生成的ID是一个64位的长

    2024年02月02日
    浏览(32)
  • 分布式—雪花算法生成ID

    由64个Bit(比特)位组成的long类型的数字 0 | 0000000000 0000000000 0000000000 000000000 | 00000 | 00000 | 000000000000 1个bit:符号位,始终为0。 41个bit:时间戳,精确到毫秒级别,可以使用69年。 10个bit:工作机器ID,可以部署在1024个节点上。 12个bit:序列号,每个节点每毫秒内最多可以生成

    2024年02月11日
    浏览(42)
  • 分布式唯一ID 雪花算法

           📝个人主页:五敷有你        🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 雪花算法是 64 位 的二进制,一共包含了四部分: 1位是符号位,也就是最高位,始终是0,没有任何意义,因为要是唯一计算机二进制补码中就是负数,0才是正数。 41位是时间戳

    2024年04月10日
    浏览(45)
  • 雪花算法ID生成器工具类

    可以通过配置bean添加到容器,注入使用

    2024年02月15日
    浏览(47)
  • 分布式id解决方法--雪花算法

    uuid,jdk自带,但是数据库性能差,32位呀。 mysql数据库主键越短越好,B+tree产生节点分裂,大大降低数据库性能,所以uuid不建议。 redis的自增,但是要配置维护redis集群,就为了一个id,还要引入一套redis。费事,成本高。 如果有序自增别人就知道你的业务量多少了。 分布式

    2024年02月04日
    浏览(42)
  • 雪花算法生成分布式主键ID

    直接上代码,复制即可使用 在这个示例中,你可以通过 SnowflakeIdGenerator.init(dataCenterId, workerId); 初始化数据中心 ID 和工作 ID,然后通过 SnowflakeIdGenerator.generateId(); 静态方法生成 Snowflake ID 的字符串形式。

    2024年02月22日
    浏览(48)
  • 线上使用雪花算法生成id重复问题

    项目中使用的是hutool工具类库提供的雪花算法生成id方式,版本使用的是5.3.1 雪花算法生成id方式提供了getSnowflake(workerId,datacenterId)获取单例的Snowflake对象,并对生成id的方法nextId()进行了synchronized加锁处理。 IdUtil Snowflake 项目中使用雪花算法 IdUtils 举例controller UserController 线上

    2023年04月23日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包