HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    如何生成唯一id(如何生成唯一編碼)

    發(fā)布時(shí)間:2023-03-22 19:39:49     稿源: 創(chuàng)意嶺    閱讀: 847        問(wèn)大家

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于如何生成唯一id的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。

    開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端

    官網(wǎng):https://ai.de1919.com,如需咨詢相關(guān)業(yè)務(wù)請(qǐng)撥打175-8598-2043,或微信:1454722008

    本文目錄:

    如何生成唯一id(如何生成唯一編碼)

    一、delphi如何生成一個(gè)唯一的ID號(hào)

    1. 取年月日時(shí)分秒,生產(chǎn)ID。

    2. 使用GUID,世界上的任何兩臺(tái)計(jì)算機(jī)都不會(huì)生成重復(fù)的 GUID 值,代碼如下:

    var

    AGuid: TGUID;

    sGUID: string;

    begin

    sGUID := CreateClassID;

    ShowMessage(sGUID); // 兩邊帶大括號(hào)的Guid

    Delete(sGUID, 1, 1);

    Delete(sGUID, Length(sGUID), 1);

    ShowMessage(sGUID); // 去掉大括號(hào)的Guid,占36位中間有減號(hào)

    sGUID:= StringReplace(sGUID, '-', '', [rfReplaceAll]);

    ShowMessage(sGUID); // 去掉減號(hào)的Guid,占32位

    end;

    二、JMeter中如何構(gòu)造一個(gè)唯一ID

    我也是新手,不過(guò)考慮到唯一ID,可以簡(jiǎn)單的使用計(jì)數(shù)器,將計(jì)數(shù)器得到的值組裝成唯一ID ,

    參數(shù)看你怎么配置了。格式的長(zhǎng)度就是產(chǎn)生的長(zhǎng)度是多少。比如這里產(chǎn)生的第一個(gè)就是000000001,

    第二個(gè)線程就是 000000002

    第三個(gè)就是 000000003

    。。。 。。。

    第十個(gè)就是 000000010 注意長(zhǎng)度,你可以在格式里面

    如果格式填入ABCD132333000(如果沒(méi)有后面的000,產(chǎn)生的效果不一樣喲

    如果格式填入ABCD132333000(如果沒(méi)有后面的000,產(chǎn)生的效果不一樣喲。會(huì)在ABCD132333后面直接寫 ABCD1323331,ABCD1323332,ABCD1323333)  那么產(chǎn)生的第一個(gè)就是 ABCD132333001  第一百個(gè)就是 ABCD132333100。 這樣也不會(huì)重復(fù),網(wǎng)上說(shuō)的其他辦法都太復(fù)雜了。希望這種能幫助你。 要使用這個(gè)唯一碼 直接用${jishu}  就可以在一個(gè)線程組 一直使用這個(gè)值了

    三、Rust實(shí)現(xiàn)雪花算法生成唯一ID方案

    發(fā)現(xiàn)一類的網(wǎng)站資源ID很短不知道如何實(shí)現(xiàn)

    如 https://www.jianshu.com/p/4a8939c48cd4

    這個(gè) 12位的

    然后就考慮到雪花法但生成結(jié)果是:6887650413378670482 近20位數(shù)字,就考慮是否有其它處理方式

    主要目的是想把雪花算法生成的值變得更短

    如 6887650413378670482 轉(zhuǎn)換成更短小的格式 16 或12位數(shù)字字符串

    經(jīng)過(guò)多方查找現(xiàn)定使用雪花算法生成ID再轉(zhuǎn)為36進(jìn)制的13位小寫字母加數(shù)字格式

    若有更好的實(shí)現(xiàn)方式,歡迎評(píng)論指導(dǎo)。

    四、如何在高并發(fā)分布式系統(tǒng)中生成全局唯一Id

    我了解的方案如下……………………………………………………………………

    1、 使用數(shù)據(jù)庫(kù)自增Id

    優(yōu)勢(shì):編碼簡(jiǎn)單,無(wú)需考慮記錄唯一標(biāo)識(shí)的問(wèn)題。

    缺陷:

    1) 在大表做水平分表時(shí),就不能使用自增Id,因?yàn)镮nsert的記錄插入到哪個(gè)分表依分表規(guī)則判定決定,若是自增Id,各個(gè)分表中Id就會(huì)重復(fù),在做查詢、刪除時(shí)就會(huì)有異常。

    2) 在對(duì)表進(jìn)行高并發(fā)單記錄插入時(shí)需要加入事物機(jī)制,否則會(huì)出現(xiàn)Id重復(fù)的問(wèn)題。

    3) 在業(yè)務(wù)上操作父、子表(即關(guān)聯(lián)表)插入時(shí),需要在插入數(shù)據(jù)庫(kù)之前獲取max(id)用于標(biāo)識(shí)父表和子表關(guān)系,若存在并發(fā)獲取max(id)的情況,max(id)會(huì)同時(shí)被別的線程獲取到。

    4) 等等。

    結(jié)論:適合小應(yīng)用,無(wú)需分表,沒(méi)有高并發(fā)性能要求。

    2、 單獨(dú)開(kāi)一個(gè)數(shù)據(jù)庫(kù),獲取全局唯一的自增序列號(hào)或各表的MaxId

    1) 使用自增序列號(hào)表

    專門一個(gè)數(shù)據(jù)庫(kù),生成序列號(hào)。開(kāi)啟事物,每次操作插入時(shí),先將數(shù)據(jù)插入到序列表并返回自增序列號(hào)用于做為唯一Id進(jìn)行業(yè)務(wù)數(shù)據(jù)插入。

    注意:需要定期清理序列表的數(shù)據(jù)以保證獲取序列號(hào)的效率;插入序列表記錄時(shí)要開(kāi)啟事物。

    使用此方案的問(wèn)題是:每次的查詢序列號(hào)是一個(gè)性能損耗;如果這個(gè)序列號(hào)列暴了,那就杯具了,你不知道哪個(gè)表使用了哪個(gè)序列,所以就必須換另一種唯一Id方式如GUID。

    2) 使用MaxId表存儲(chǔ)各表的MaxId值

    專門一個(gè)數(shù)據(jù)庫(kù),記錄各個(gè)表的MaxId值,建一個(gè)存儲(chǔ)過(guò)程來(lái)取Id,邏輯大致為:開(kāi)啟事物,對(duì)于在表中不存在記錄,直接返回一個(gè)默認(rèn)值為1的鍵值,同時(shí)插入該條記錄到table_key表中。而對(duì)于已存在的記錄,key值直接在原來(lái)的key基礎(chǔ)上加1更新到MaxId表中并返回key。

    使用此方案的問(wèn)題是:每次的查詢MaxId是一個(gè)性能損耗;不過(guò)不會(huì)像自增序列表那么容易列暴掉,因?yàn)槭菙[表進(jìn)行劃分的。

    詳細(xì)可參考:《使用MaxId表存儲(chǔ)各表的MaxId值,以獲取全局唯一Id》

    我截取此文中的sql語(yǔ)法如下:

    第一步:創(chuàng)建表

    create table table_key

    (

    table_name varchar(50)not null primary key,

    key_value int not null

    )

    第二步:創(chuàng)建存儲(chǔ)過(guò)程來(lái)取自增ID

    create procedure up_get_table_key

    (

    @table_name varchar(50),

    @key_value int output

    )

    as

    begin

    begin tran

    declare @key int

    --initialize the key with 1

    set @key=1

    --whether the specified table is exist

    if not exists(selecttable_name from table_key wheretable_name=@table_name)

    begin

    insert into table_keyvalues(@table_name,@key) --default key vlaue:1

    end

    -- step increase

    else

    begin

    select @key=key_valuefrom table_key with (nolock) where table_name=@table_name

    set @key=@key+1

    --update the key value by table name

    update table_key setkey_value=@key where table_name=@table_name

    end

    --set ouput value

    set @key_value=@key

    --commit tran

    commit tran

    if @@error>0

    rollback tran

    end

    轉(zhuǎn)載僅供參考,版權(quán)屬于原作者。

    以上就是關(guān)于如何生成唯一id相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    如何做宣傳推廣營(yíng)銷(如何做宣傳推廣營(yíng)銷抖音)

    如何打造個(gè)人形象(如何打造個(gè)人形象500字)

    廣告業(yè)務(wù)員如何開(kāi)發(fā)客戶(廣告公司怎么找客戶資源)

    學(xué)工業(yè)設(shè)計(jì)的就業(yè)方向(學(xué)工業(yè)設(shè)計(jì)的就業(yè)方向及前景)

    加盟店排行榜加盟10大品牌(加盟店連鎖加盟)