欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL實(shí)現(xiàn)雪花Id函數(shù)

 更新時(shí)間:2023年11月01日 11:11:10   作者:JiaMu?Sun  
相比UUID無(wú)序生成的id而言,雪花算法是有序的,而且都是由數(shù)字組成,本文主要介紹了MySQL實(shí)現(xiàn)雪花Id函數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下

環(huán)境 MySQL5.7

簡(jiǎn)介

snowflake是Twitter開(kāi)源的分布式ID生成算法,結(jié)果是64bit的Long類(lèi)型的ID,有著全局唯一和有序遞增的特點(diǎn)。

show

  • 最高位是符號(hào)位,因?yàn)樯傻?ID 總是正數(shù),始終為0,不可用。
  • 41位的時(shí)間序列,精確到毫秒級(jí),41位的長(zhǎng)度可以使用69年。時(shí)間位還有一個(gè)很重要的作用是可以根據(jù)時(shí)間進(jìn)行排序。
  • 10位的機(jī)器標(biāo)識(shí),10位的長(zhǎng)度最多支持部署1024個(gè)節(jié)點(diǎn)。
  • 12位的計(jì)數(shù)序列號(hào),序列號(hào)即一系列的自增ID,可以支持同一節(jié)點(diǎn)同一毫秒生成多個(gè)ID序號(hào),12位的計(jì)數(shù)序列號(hào)支持每個(gè)節(jié)點(diǎn)每毫秒產(chǎn)生4096個(gè)ID序號(hào)。
  • 缺點(diǎn)也是有的,就是強(qiáng)依賴(lài)機(jī)器時(shí)鐘,如果機(jī)器上時(shí)鐘回?fù)?,有可能?huì)導(dǎo)致主鍵重復(fù)的問(wèn)題。

雪花Id

腳本根據(jù) github:https://github.com/yitter/IdGenerator/tree/master/SQL 的SQL Server 版移植而來(lái)

雪花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

測(cè)試腳本

創(chuàng)建一個(gè)名為T(mén)estSnowId存儲(chǔ)過(guò)程
內(nèi)容:
定義了一個(gè)int變量i默認(rèn)為1;
創(chuàng)建了一個(gè)臨時(shí)表temp_numbers用于存儲(chǔ)生成的SnowId;
循環(huán)5000次,并將SnowId添加到temp_numbers表內(nèi);
查詢temp_numbers表內(nèi)數(shù)據(jù);
刪除臨時(shí)表;

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

使用

調(diào)用語(yǔ)句

SELECT SnowId();

getSnowId

測(cè)試是否重復(fù)

CALL TestSnowId();

test

到此這篇關(guān)于MySQL實(shí)現(xiàn)雪花Id函數(shù)的文章就介紹到這了,更多相關(guān)MySQL 雪花Id內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • mysql多條數(shù)據(jù)合并成一條的3種常見(jiàn)方法

    mysql多條數(shù)據(jù)合并成一條的3種常見(jiàn)方法

    在實(shí)際的應(yīng)用開(kāi)發(fā)中,有時(shí)我們需要將多條數(shù)據(jù)合并成一條數(shù)據(jù),以便更好地進(jìn)行數(shù)據(jù)分析和處理,本文就來(lái)介紹一下mysql多條數(shù)據(jù)合并成一條的方法,具有一定的參考價(jià)值
    2023-10-10
  • MySQL大表中重復(fù)字段的高效率查詢方法

    MySQL大表中重復(fù)字段的高效率查詢方法

    MySQL大表重復(fù)字段應(yīng)該如何查詢到呢?這是很多人都遇到的問(wèn)題,下面就教您一個(gè)MySQL大表重復(fù)字段的查詢方法,供您參考
    2012-12-12
  • MYSQL大表加索引的實(shí)現(xiàn)

    MYSQL大表加索引的實(shí)現(xiàn)

    本文主要介紹了MYSQL大表加索引的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • MySQL 添加、修改、刪除表的列及約束等表的定義

    MySQL 添加、修改、刪除表的列及約束等表的定義

    這篇文章主要介紹了MySQL 添加、修改、刪除表的列及約束等表的定義,需要的朋友可以參考下
    2014-03-03
  • Mysql動(dòng)態(tài)更新數(shù)據(jù)庫(kù)腳本的示例講解

    Mysql動(dòng)態(tài)更新數(shù)據(jù)庫(kù)腳本的示例講解

    今天小編就為大家分享一篇關(guān)于Mysql動(dòng)態(tài)更新數(shù)據(jù)庫(kù)腳本的示例講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • Mysql數(shù)據(jù)庫(kù)主從同步的實(shí)現(xiàn)示例

    Mysql數(shù)據(jù)庫(kù)主從同步的實(shí)現(xiàn)示例

    本文主要介紹了Mysql數(shù)據(jù)庫(kù)主從同步的實(shí)現(xiàn)示例,包括配置文件設(shè)置、賬戶創(chuàng)建、同步命令及錯(cuò)誤處理,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-06-06
  • MySQL無(wú)法存儲(chǔ)emoji表情解決方案分析

    MySQL無(wú)法存儲(chǔ)emoji表情解決方案分析

    這篇文章主要介紹了MySQL無(wú)法存儲(chǔ)emoji表情解決方案,結(jié)合實(shí)例形式分析了Python爬蟲(chóng)爬取文章中emoji表情存入數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法,涉及mysql utf8mb4編碼的修改相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • MySQL 子查詢和分組查詢

    MySQL 子查詢和分組查詢

    這篇文章主要介紹了MySQL 子查詢和分組查詢的相關(guān)資料,幫助大家更好的理解MySQL查詢的相關(guān)知識(shí),感興趣的朋友可以了解下
    2020-11-11
  • 深入SQL Server中char、varchar、text和nchar、nvarchar、ntext的區(qū)別詳解

    深入SQL Server中char、varchar、text和nchar、nvarchar、ntext的區(qū)別詳

    本篇文章是對(duì)char、varchar、text和nchar、nvarchar、ntext的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 探討MySQL?保存日期用哪種數(shù)據(jù)類(lèi)型

    探討MySQL?保存日期用哪種數(shù)據(jù)類(lèi)型

    在設(shè)計(jì)數(shù)據(jù)庫(kù)表時(shí)不可避免的需要用到時(shí)間類(lèi)型,到底選擇那種數(shù)據(jù)類(lèi)型來(lái)表示時(shí)間是一個(gè)值的討論的問(wèn)題,這篇文章主要介紹了MySQL保存日期用哪種數(shù)據(jù)類(lèi)型,需要的朋友可以參考下
    2023-08-08

最新評(píng)論