Whiz Tools

Mwanzo wa CUID

Tengeneza kitambulisho kisichoweza kugongana kwa haraka na kwa urahisi.

Muundo wa CUID

Wakati:

Bila mpangilio:

CUID Generator

Utangulizi

CUID (Collision-resistant Unique IDentifier) ni kitambulisho cha kipekee kilichoundwa ili kuwa na upinzani wa mgongano, kupanuka kwa usawa, na kupangwa kwa mpangilio. CUIDs ni muhimu sana katika mifumo iliyosambazwa ambapo vitambulisho vya kipekee vinahitaji kuundwa bila uratibu kati ya nodi.

Muundo wa CUIDs

CUID kwa kawaida ina sehemu zifuatazo:

  1. Wakati: Uwakilishi wa wakati wa sasa
  2. Hesabu: Hesabu inayopanda ili kuhakikisha kipekee ndani ya milisekunde moja
  3. Alama ya mteja: Kitambulisho cha kipekee kwa mashine au mchakato unaounda CUID
  4. Sehemu ya nasibu: Takwimu za nasibu za ziada ili kupunguza zaidi uwezekano wa mgongano

Muundo halisi unaweza kutofautiana kulingana na utekelezaji wa CUID, lakini sehemu hizi zinafanya kazi pamoja ili kuunda kitambulisho kipekee na kinachoweza kupangwa.

Hapa kuna uwakilishi wa picha wa muundo wa kawaida wa CUID:

Wakati Hesabu Alama Nasibu

Jinsi CUIDs Zinavyoundwa

CUIDs zinaundwa kwa kutumia mchanganyiko wa sehemu za msingi wa wakati na za nasibu. Mchakato kwa kawaida unajumuisha:

  1. Kupata wakati wa sasa
  2. Kuongeza hesabu (ambayo inarejea mara kwa mara)
  3. Kuunda alama ya mteja (kawaida hufanywa mara moja kwa kila kikao au kuanzisha programu)
  4. Kuongeza takwimu za nasibu
  5. Kuunganisha vipengele hivi katika muundo maalum

CUID inayotokana kwa kawaida inawakilishwa kama mfuatano wa herufi na nambari.

Faida na Matumizi

CUIDs hutoa faida kadhaa ikilinganishwa na mifumo mingine ya kitambulisho kipekee:

  1. Upinzani wa mgongano: Mchanganyiko wa wakati, hesabu, na takwimu za nasibu unafanya mgongano kuwa wa chini sana, hata katika mifumo iliyosambazwa.
  2. Upanuzi wa usawa: CUIDs zinaweza kuundwa kwa uhuru kwenye mashine nyingi bila uratibu.
  3. Upangaji wa mpangilio: Sehemu ya wakati inaruhusu kupanga CUIDs kwa muda.
  4. Rafiki wa URL: CUIDs kwa kawaida zinaundwa kwa herufi zinazofaa kwa URL.

Matumizi ya kawaida ya CUIDs ni pamoja na:

  • Funguo kuu za hifadhidata
  • Mifumo iliyosambazwa ambapo ID za kipekee zinahitaji kuundwa kwenye nodi nyingi
  • ID za kikao katika programu za wavuti
  • Kufuatilia matukio katika mifumo ya uchanganuzi
  • Kuitwa kwa faili au rasilimali katika mifumo ya uhifadhi wa wingu

Mifano ya Kanuni

Hapa kuna mifano ya kuunda CUIDs katika lugha mbalimbali za programu:

// JavaScript (ukitumia maktaba ya 'cuid')
const cuid = require('cuid');
const id = cuid();
console.log(id);
## Python (ukitumia maktaba ya 'cuid')
import cuid
id = cuid.cuid()
print(id)
## Ruby (ukitumia gem ya 'cuid')
require 'cuid'
id = Cuid::generate
puts id
// Java (ukitumia maktaba ya 'com.github.f4b6a3.cuid')
import com.github.f4b6a3.cuid.Cuid;

public class CuidExample {
    public static void main(String[] args) {
        String id = Cuid.createCuid();
        System.out.println(id);
    }
}
// C# (ukitumia pakiti ya 'Cuid.Net' ya NuGet)
using Cuid;

class Program
{
    static void Main(string[] args)
    {
        string id = CuidGenerator.Generate();
        Console.WriteLine(id);
    }
}
// PHP (ukitumia pakiti ya 'endyjasmi/cuid')
<?php
require 'vendor/autoload.php';
use Endyjasmi\Cuid\Cuid;

$id = Cuid::make();
echo $id;
// Go (ukitumia pakiti ya 'github.com/lucsky/cuid')
package main

import (
    "fmt"
    "github.com/lucsky/cuid"
)

func main() {
    id := cuid.New()
    fmt.Println(id)
}
// Swift (ukitumia pakiti ya 'CUID')
import CUID

let id = CUID()
print(id)
// C++ (ukitumia utekelezaji wa kawaida)
#include <iostream>
#include <chrono>
#include <random>
#include <sstream>
#include <iomanip>

std::string generateCUID() {
    auto now = std::chrono::system_clock::now();
    auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
    auto value = now_ms.time_since_epoch();
    long duration = value.count();

    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(0, 35);

    std::stringstream ss;
    ss << 'c';
    ss << std::hex << std::setfill('0') << std::setw(8) << duration;
    for (int i = 0; i < 8; i++) {
        int r = dis(gen);
        ss << (char)(r < 10 ? '0' + r : 'a' + r - 10);
    }
    return ss.str();
}

int main() {
    std::string id = generateCUID();
    std::cout << id << std::endl;
    return 0;
}
% MATLAB (ukitumia utekelezaji wa kawaida)
function id = generateCUID()
    timestamp = dec2hex(round(posixtime(datetime('now'))*1000), 8);
    random = '';
    for i = 1:8
        random = [random char(randi([48 57 97 122]))];
    end
    id = ['c' timestamp random];
end

% Matumizi
id = generateCUID();
disp(id);
## R (ukitumia utekelezaji wa kawaida)
library(lubridate)

generate_cuid <- function() {
  timestamp <- format(as.numeric(now()) * 1000, scientific = FALSE)
  timestamp <- substr(timestamp, 1, 8)
  random <- paste0(sample(c(0:9, letters[1:6]), 8, replace = TRUE), collapse = "")
  paste0("c", timestamp, random)
}

## Matumizi
id <- generate_cuid()
print(id)
' Excel VBA (ukitumia utekelezaji wa kawaida)
Function GenerateCUID() As String
    Dim timestamp As String
    Dim random As String
    Dim i As Integer
    
    timestamp = Right("00000000" & Hex(CLng(CDbl(Now()) * 86400000)), 8)
    
    For i = 1 To 8
        random = random & Mid("0123456789abcdef", Int(Rnd() * 16) + 1, 1)
    Next i
    
    GenerateCUID = "c" & timestamp & random
End Function

' Matumizi katika seli
'=GenerateCUID()

Historia na Maendeleo

CUIDs zilianzishwa na Eric Elliott mwaka 2012 kama suluhisho la tatizo la kuunda vitambulisho vya kipekee katika mifumo iliyosambazwa. Wazo hili lilichochewa na mfumo wa ID wa Twitter wa Snowflake lakini ulitengenezwa ili uweze kutekelezwa kwa urahisi na kutumika katika majukwaa mbalimbali.

Maendeleo ya CUIDs yalichochewa na hitaji la mfumo wa kitambulisho wa rahisi, unaopingana na mgongano ambao unaweza kufanya kazi katika lugha tofauti za programu na mazingira. Lengo la Elliott lilikuwa kuunda mfumo ambao ni rahisi kutekeleza, hauhitaji uratibu wa kati, na unaweza kupanuka kwa usawa.

Tangu kuanzishwa kwake, CUID imepita katika hatua kadhaa za maboresho:

  1. Utekelezaji wa awali wa CUID ulilenga urahisi na urahisi wa matumizi.
  2. Kadri matumizi yalivyokua, jamii ilichangia utekelezaji katika lugha mbalimbali za programu.
  3. Mwaka 2021, CUID2 ilianzishwa ili kushughulikia baadhi ya mipaka ya CUID ya awali na kutoa utendaji bora zaidi na upinzani wa mgongano.
  4. CUID2 iliboresha ile ya awali kwa kutumia jenereta ya nambari za nasibu yenye usalama zaidi na kuongeza urefu wa jumla wa kitambulisho.

Mabadiliko ya CUIDs yanaakisi mahitaji yanayobadilika ya mifumo iliyosambazwa na juhudi endelevu za kulinganisha urahisi, usalama, na utendaji katika kuunda vitambulisho vya kipekee.

Marejeleo

  1. Hifadhi rasmi ya CUID GitHub
  2. Mspecification ya CUID2
  3. Elliott, Eric. "Kuunda ID za Kipekee katika Mazingira ya Kusambazwa." Medium, 2015.
  4. "Vitambulisho vya kupinga mgongano kwa Mifumo ya Kusambazwa." DZone, 2018.

Zana hii ya kizazi cha CUID inakuwezesha kuunda haraka CUIDs kwa miradi yako. Bonyeza tu kitufe cha "Unda" ili kuunda CUID mpya, na tumia kitufe cha "Nakili" ili kukinakili kwenye clipboard yako kwa matumizi rahisi katika programu zako.

Feedback