热搜词:

用ULID替代 UUID 的最佳实践

鍦� C# 寮€鍙戜腑锛孶UID锛堥€氱敤鍞�竴鏍囪瘑绗︼級鏄�竴绉嶅父瑙佺殑鏍囪瘑绗︼紝鐢ㄤ簬鐢熸垚鍏ㄥ眬鍞�竴鐨� ID銆傜劧鑰岋紝闅忕潃鍒嗗竷寮忕郴缁熷拰楂樻€ц兘搴旂敤鐨勯渶姹傚�鍔狅紝UUID 鐨勪竴浜涚己鐐归€愭笎鏄剧幇銆備负浜嗚В鍐宠繖浜涢棶棰橈紝ULID锛圲niversally Unique Lexicographically Sortable Identifier锛変綔涓轰竴绉嶆浛浠f柟妗堬紝姝e湪琚�秺鏉ヨ秺澶氱殑寮€鍙戣€呴噰鐢ㄣ€�

鐐瑰嚮涓嬪浘鏌ョ湅锛� C# 涓� GUID 鐨勫叏闈㈣В鏋愶細鐢熸垚銆佹牸寮忓寲涓�搴旂敤鍦烘櫙锛孨et9鐗堟湰涓嬬殑GUID V7鐗堟湰浣跨敤

1. 浠€涔堟槸 UUID锛�

UUID锛圲niversally Unique Identifier锛夋槸涓€绉� 128 浣嶇殑鏍囪瘑绗︼紝閫氬父鐢ㄤ簬鏍囪瘑鏁版嵁搴撹�褰曘€佸垎甯冨紡绯荤粺涓�殑瀵硅薄绛夈€俇UID 鐨勪富瑕佺壒鐐规槸锛�

  • 鈥� 鍏ㄥ眬鍞�竴鎬�锛氱悊璁轰笂锛孶UID 鐨勯噸澶嶆�鐜囨瀬浣庛€�

  • 鈥� 鍥哄畾闀垮害锛歎UID 鐨勯暱搴︿负 128 浣嶏紙16 瀛楄妭锛夈€�

鈥� 鍏ㄥ眬鍞�竴鎬�锛氱悊璁轰笂锛孶UID 鐨勯噸澶嶆�鐜囨瀬浣庛€�

鈥� 鍥哄畾闀垮害锛歎UID 鐨勯暱搴︿负 128 浣嶏紙16 瀛楄妭锛夈€�

灏界� UUID 鍦ㄨ�澶氬満鏅�腑琛ㄧ幇鑹�ソ锛屼絾瀹冧篃瀛樺湪涓€浜涘眬闄愭€с€�

2. UUID 鐨勫眬闄愭€�

  • 1. 鎺掑簭闂��

    UUID 鏄�殢鏈虹敓鎴愮殑锛屾棤娉曟寜鏃堕棿椤哄簭鎺掑簭銆傝繖鍦ㄩ渶瑕佹寜鏃堕棿椤哄簭瀛樺偍鎴栨煡璇㈡暟鎹�殑鍦烘櫙涓�細瀵艰嚧鎬ц兘闂��銆�

  • 2. 鍙��鎬у樊

  • 3. 瀛樺偍鏁堢巼浣�

    UUID 閫氬父浠ュ瓧绗︿覆褰㈠紡瀛樺偍锛屽崰鐢ㄨ緝澶氱殑瀛樺偍绌洪棿锛�36 涓�瓧绗︼級銆�

  • 4. 绱㈠紩鎬ц兘闂��

    鍦ㄦ暟鎹�簱涓�紝UUID 鐨勯殢鏈烘€т細瀵艰嚧绱㈠紩鍒嗗竷涓嶅潎鍖€锛屼粠鑰岄檷浣庢煡璇㈡€ц兘銆�

  • 1. 鎺掑簭闂��

    UUID 鏄�殢鏈虹敓鎴愮殑锛屾棤娉曟寜鏃堕棿椤哄簭鎺掑簭銆傝繖鍦ㄩ渶瑕佹寜鏃堕棿椤哄簭瀛樺偍鎴栨煡璇㈡暟鎹�殑鍦烘櫙涓�細瀵艰嚧鎬ц兘闂��銆�

    2. 鍙��鎬у樊

    3. 瀛樺偍鏁堢巼浣�

    UUID 閫氬父浠ュ瓧绗︿覆褰㈠紡瀛樺偍锛屽崰鐢ㄨ緝澶氱殑瀛樺偍绌洪棿锛�36 涓�瓧绗︼級銆�

    4. 绱㈠紩鎬ц兘闂��

    鍦ㄦ暟鎹�簱涓�紝UUID 鐨勯殢鏈烘€т細瀵艰嚧绱㈠紩鍒嗗竷涓嶅潎鍖€锛屼粠鑰岄檷浣庢煡璇㈡€ц兘銆�

    ULID锛圲niversally Unique Lexicographically Sortable Identifier锛夋槸涓€绉� 128 浣嶇殑鍞�竴鏍囪瘑绗︼紝涓� UUID 绫讳技锛屼絾瀹冭В鍐充簡 UUID 鐨勪竴浜涘眬闄愭€с€俇LID 鐨勪富瑕佺壒鐐瑰寘鎷�細

  • 1. 鎸夋椂闂存帓搴�

    ULID 鐨勫墠 48 浣嶅熀浜庢椂闂存埑锛堟�绉掔骇锛夛紝鍚� 80 浣嶄负闅忔満鏁般€傝繖浣垮緱 ULID 鍙�互鎸夋椂闂撮『搴忔帓搴忥紝闈炲父閫傚悎闇€瑕佹椂闂存帓搴忕殑鍦烘櫙銆�

  • 2. 鍙��鎬ф洿楂�

    ULID 浣跨敤 Base32 缂栫爜锛岀敓鎴愮殑瀛楃�涓叉洿鐭�笖鏇存槗璇汇€備緥濡傦細01H3Z5VJ8XK4Y5F3G7T9Q2W1A6

  • 3. 瀛樺偍鏁堢巼鏇撮珮

    ULID 鐨勫瓧绗︿覆闀垮害涓� 26 涓�瓧绗︼紝姣� UUID 鐨� 36 涓�瓧绗︽洿鐭�紝鍗犵敤鏇村皯鐨勫瓨鍌ㄧ┖闂淬€�

  • 4. 璺ㄨ�瑷€鏀�寔

    ULID 鏄�竴绉嶆爣鍑嗘牸寮忥紝鏀�寔澶氱�缂栫▼璇�█锛屽寘鎷� C#銆�

  • 1. 鎸夋椂闂存帓搴�

    ULID 鐨勫墠 48 浣嶅熀浜庢椂闂存埑锛堟�绉掔骇锛夛紝鍚� 80 浣嶄负闅忔満鏁般€傝繖浣垮緱 ULID 鍙�互鎸夋椂闂撮『搴忔帓搴忥紝闈炲父閫傚悎闇€瑕佹椂闂存帓搴忕殑鍦烘櫙銆�

    2. 鍙��鎬ф洿楂�

    ULID 浣跨敤 Base32 缂栫爜锛岀敓鎴愮殑瀛楃�涓叉洿鐭�笖鏇存槗璇汇€備緥濡傦細01H3Z5VJ8XK4Y5F3G7T9Q2W1A6

    3. 瀛樺偍鏁堢巼鏇撮珮

    ULID 鐨勫瓧绗︿覆闀垮害涓� 26 涓�瓧绗︼紝姣� UUID 鐨� 36 涓�瓧绗︽洿鐭�紝鍗犵敤鏇村皯鐨勫瓨鍌ㄧ┖闂淬€�

    4. 璺ㄨ�瑷€鏀�寔

    ULID 鏄�竴绉嶆爣鍑嗘牸寮忥紝鏀�寔澶氱�缂栫▼璇�█锛屽寘鎷� C#銆�

    • 鈥� 鏇村ソ鐨勫彲璇绘€�

      ULID 鐨� Base32 缂栫爜浣垮叾鏇寸煭銆佹洿鏄撹�锛屼究浜庡湪鏃ュ織銆佽皟璇曚俊鎭�垨鐢ㄦ埛鐣岄潰涓�樉绀恒€�

    • 鈥� 鏇撮珮鐨勫瓨鍌ㄦ晥鐜�

      ULID 鐨勫瓧绗︿覆闀垮害涓� 26 涓�瓧绗︼紝姣� UUID 鐨� 36 涓�瓧绗︾煭绾� 28%锛屽湪澶ц�妯″瓨鍌ㄥ満鏅�腑鍙�互鑺傜渷澶ч噺绌洪棿銆�

    • 鈥� 鏇村ソ鐨勭储寮曟€ц兘

      鐢变簬 ULID 鐨勬椂闂存埑閮ㄥ垎鏄�€掑�鐨勶紝瀹冨湪鏁版嵁搴撲腑鎻掑叆鏃朵細淇濇寔绱㈠紩鐨勯『搴忔€э紝浠庤€屾彁楂樻煡璇㈡€ц兘銆�

    鈥� 鏇村ソ鐨勫彲璇绘€�

    ULID 鐨� Base32 缂栫爜浣垮叾鏇寸煭銆佹洿鏄撹�锛屼究浜庡湪鏃ュ織銆佽皟璇曚俊鎭�垨鐢ㄦ埛鐣岄潰涓�樉绀恒€�

    鈥� 鏇撮珮鐨勫瓨鍌ㄦ晥鐜�

    ULID 鐨勫瓧绗︿覆闀垮害涓� 26 涓�瓧绗︼紝姣� UUID 鐨� 36 涓�瓧绗︾煭绾� 28%锛屽湪澶ц�妯″瓨鍌ㄥ満鏅�腑鍙�互鑺傜渷澶ч噺绌洪棿銆�

    鈥� 鏇村ソ鐨勭储寮曟€ц兘

    鐢变簬 ULID 鐨勬椂闂存埑閮ㄥ垎鏄�€掑�鐨勶紝瀹冨湪鏁版嵁搴撲腑鎻掑叆鏃朵細淇濇寔绱㈠紩鐨勯『搴忔€э紝浠庤€屾彁楂樻煡璇㈡€ц兘銆�

    浣跨敤寮€婧愬簱 Ulid鏉ョ敓鎴愬拰鎿嶄綔 ULID銆�

    5.1 瀹夎� NuGet 鍖�

    閫氳繃 NuGet 瀹夎� NUlid搴擄細

    dotnet add package NUlid5.2 鐢熸垚 ULID

    浣跨敤 Ulid.NewUlid鏂规硶鐢熸垚涓€涓�柊鐨� ULID锛�

    usingNUlid;

    varulid = Ulid.NewUlid;

    Console.WriteLine("鐢熸垚鐨� ULID: " ulid);

    //鐢熸垚鐨� ULID: 01JRS29BZ18KWK6TDPSKMB93ZY5.3 浠庢椂闂存埑鐢熸垚 ULID

    鍩轰簬鎸囧畾鐨勬椂闂寸敓鎴� ULID锛�

    var timestamp = DateTimeOffset.UtcNow;

    var ulid = Ulid.NewUlid(timestamp);

    Console.WriteLine("鍩轰簬鏃堕棿鐢熸垚鐨� ULID: " ulid);

    // 鍩轰簬鏃堕棿鐢熸垚鐨� ULID: 01JRS2APB4C2JG7Y2X6D89XRDZ5.4 瑙f瀽 ULID

    ULID 鍙�互瑙f瀽鍑烘椂闂存埑閮ㄥ垎锛�

    usingNUlid;

    varulid = Ulid.NewUlid;

    Console.WriteLine("ULID: " ulid);

    Console.WriteLine("鏃堕棿鎴�: " ulid.Time.ToString("o"));

    //ULID: 01JRS2BPS42D6VX1AYQZJFMQZQ

  • 1. 鏃ュ織绯荤粺

    浣跨敤 ULID 浣滀负鏃ュ織鐨勫敮涓€鏍囪瘑绗︼紝渚夸簬鎸夋椂闂撮『搴忓瓨鍌ㄥ拰鏌ヨ�銆�

  • 2. 鍒嗗竷寮忕郴缁�

    鍦ㄥ垎甯冨紡绯荤粺涓�紝ULID 鍙�互浣滀负鍏ㄥ眬鍞�竴鐨勬爣璇嗙�锛屽悓鏃舵敮鎸佹椂闂存帓搴忋€�

  • 3. 鏁版嵁搴撲富閿�

    浣跨敤 ULID 鏇夸唬 UUID 浣滀负涓婚敭锛屼紭鍖栫储寮曟€ц兘骞惰妭鐪佸瓨鍌ㄧ┖闂淬€�

  • 4. 浜嬩欢娴佸�鐞�

    鍦ㄤ簨浠堕┍鍔ㄦ灦鏋勪腑锛孶LID 鍙�互纭�繚浜嬩欢鎸夋椂闂撮『搴忓�鐞嗐€�

  • 1. 鏃ュ織绯荤粺

    浣跨敤 ULID 浣滀负鏃ュ織鐨勫敮涓€鏍囪瘑绗︼紝渚夸簬鎸夋椂闂撮『搴忓瓨鍌ㄥ拰鏌ヨ�銆�

    2. 鍒嗗竷寮忕郴缁�

    鍦ㄥ垎甯冨紡绯荤粺涓�紝ULID 鍙�互浣滀负鍏ㄥ眬鍞�竴鐨勬爣璇嗙�锛屽悓鏃舵敮鎸佹椂闂存帓搴忋€�

    3. 鏁版嵁搴撲富閿�

    浣跨敤 ULID 鏇夸唬 UUID 浣滀负涓婚敭锛屼紭鍖栫储寮曟€ц兘骞惰妭鐪佸瓨鍌ㄧ┖闂淬€�

    4. 浜嬩欢娴佸�鐞�

    鍦ㄤ簨浠堕┍鍔ㄦ灦鏋勪腑锛孶LID 鍙�互纭�繚浜嬩欢鎸夋椂闂撮『搴忓�鐞嗐€�

    ULID 鏄� UUID 鐨勪竴绉嶄紭绉€鏇夸唬鏂规�锛岀壒鍒�€傚悎闇€瑕佹椂闂存帓搴忋€侀珮鎬ц兘绱㈠紩鍜屾洿楂樺彲璇绘€х殑鍦烘櫙銆傚湪 C# 涓�紝浣跨敤 ULID 鍙�互鏄捐憲鎻愬崌绯荤粺鐨勬€ц兘鍜屽彲缁存姢鎬с€� 閫氳繃鍚堢悊浣跨敤 ULID锛屽紑鍙戣€呭彲浠ユ瀯寤烘洿楂樻晥銆佹洿鍙�潬鐨勫垎甯冨紡绯荤粺鍜屽簲鐢ㄧ▼搴忋€�