Whiz Tools

Generator KSUID

Generator KSUID

Introducere

KSUID (K-Sortable Unique IDentifier) este un format de identificator unic care oferă mai multe avantaje în comparație cu UUID (Identificator Unic Universal) și alte sisteme de identificare. Acest instrument vă permite să generați rapid și ușor KSUID-uri.

Ce este un KSUID?

Un KSUID este un identificator sortabil de 20 de bytes care constă din:

  1. Un timestamp de 32 de biți (4 bytes)
  2. 16 bytes de aleatoriu

Când este reprezentat ca un șir, un KSUID este codificat în base62 și are o lungime de 27 de caractere.

Structura unui KSUID

Structura unui KSUID poate fi descompusă astfel:

  1. Timestamp (4 bytes): Acesta reprezintă numărul de secunde de la epoca Unix (1 ianuarie 1970, la 00:00 UTC). Timestamp-ul permite ca KSUID-urile să fie aproximativ sortabile în funcție de timpul de generare.

  2. Componenta aleatorie (16 bytes): Acesta este un număr aleatoriu criptografic securizat care asigură unicitatea chiar și atunci când mai multe KSUID-uri sunt generate în aceeași secundă.

  3. Codificare Base62: Cele 20 de bytes combinate (timestamp + aleatoriu) sunt apoi codificate folosind base62 (A-Z, a-z, 0-9) pentru a produce șirul final de 27 de caractere.

Formula KSUID

Un KSUID poate fi reprezentat matematic ca:

KSUID=Base62(TR)KSUID = Base62(T || R)

Unde:

  • TT este timestamp-ul de 32 de biți
  • RR este componenta aleatorie de 128 de biți
  • || denotă concatenarea

Timestamp-ul TT este calculat ca:

T = \text{floor}(\text{current_time} - \text{KSUID_epoch})

Unde KSUID_epoch este 1400000000 (2014-05-13T16:53:20Z).

Diagrama Structurii KSUID

Timestamp (4 bytes) Componenta Aleatorie (16 bytes)

Cazuri de Utilizare pentru KSUID-uri

KSUID-urile sunt deosebit de utile în următoarele scenarii:

  1. Sisteme Distribuite: Când aveți nevoie de identificatori unici pe mai multe servere sau servicii fără coordonare.

  2. Date Sortabile în Timp: Când doriți să sortați datele după timpul de creare fără a stoca un timestamp separat.

  3. Chei de Bază în Baze de Date: Ca chei primare în baze de date, în special în baze de date distribuite unde numerele întregi auto-incrementale nu sunt potrivite.

  4. Identificatori Siguri pentru URL: Pentru a crea identificatori scurți, unici și siguri pentru URL pentru resurse în aplicații web.

  5. Corelarea Jurnalelor: Pentru a corela înregistrările de jurnal între diferite servicii într-o arhitectură de microservicii.

Avantajele KSUID-urilor

KSUID-urile oferă mai multe avantaje în comparație cu alte sisteme de identificare:

  1. Sortabilitate: Spre deosebire de UUID-uri, KSUID-urile pot fi sortate cronologic, ceea ce este util pentru indexarea bazelor de date și analiza jurnalelor.

  2. Fără Necesitate de Coordonare: Spre deosebire de ID-urile auto-incrementale, KSUID-urile pot fi generate independent de diferite servere fără a risca coliziunile.

  3. Reprezentare Compactă: La 27 de caractere, KSUID-urile sunt mai compacte decât UUID-urile atunci când sunt reprezentate ca șiruri.

  4. Timestamp Încorporat: Timestamp-ul încorporat permite sortarea și filtrarea bazate pe timp fără a necesita un câmp de timestamp separat.

  5. Sigur pentru URL: Codificarea base62 face ca KSUID-urile să fie sigure pentru utilizare în URL-uri fără codificare suplimentară.

  6. Probabilitate Redusă de Coliziune: Componenta aleatorie de 16 bytes face ca coliziunile să fie extrem de puțin probabile, chiar și la rate mari de generare.

Cum să Folosiți Acest Generator

  1. Introduceți orice parametri suplimentari dacă este necesar (de exemplu, timestamp personalizat).
  2. Faceți clic pe butonul "Generați KSUID" pentru a crea un nou KSUID.
  3. KSUID-ul generat va fi afișat în câmpul de ieșire.
  4. Puteți genera mai multe KSUID-uri repetând pașii 1-3.
  5. Utilizați butonul "Copiați" de lângă fiecare KSUID pentru a-l copia în clipboard.
  6. Opțional, utilizați funcția "Export" pentru a descărca o listă de KSUID-uri generate.

Amintiți-vă că fiecare KSUID este unic și ar trebui utilizat o singură dată. Generați un nou KSUID de fiecare dată când aveți nevoie de un identificator unic.

Exemple de Cod

Iată exemple de generare a KSUID-urilor în diferite limbaje de programare:

## Python
import ksuid

new_id = ksuid.ksuid()
print(f"KSUID generat: {new_id}")
// JavaScript
const { ksuid } = require('ksuid')

const newId = ksuid()
console.log(`KSUID generat: ${newId}`)
// Java
import com.github.ksuid.KsuidGenerator;

public class KsuidExample {
    public static void main(String[] args) {
        String newId = KsuidGenerator.generate();
        System.out.println("KSUID generat: " + newId);
    }
}
// C++
#include <iostream>
#include <ksuid/ksuid.hpp>

int main() {
    ksuid::Ksuid newId = ksuid::Ksuid::generate();
    std::cout << "KSUID generat: " << newId.string() << std::endl;
    return 0;
}
## Ruby
require 'ksuid'

new_id = KSUID.new
puts "KSUID generat: #{new_id}"
// PHP
<?php
require_once 'vendor/autoload.php';

use Tuupola\KsuidFactory;

$factory = new KsuidFactory();
$newId = $factory->create();
echo "KSUID generat: " . $newId . "\n";
?>
// Go
package main

import (
    "fmt"
    "github.com/segmentio/ksuid"
)

func main() {
    newId := ksuid.New()
    fmt.Printf("KSUID generat: %s\n", newId.String())
}
// Swift
import KSUID

let newId = KSUID()
print("KSUID generat: \(newId)")

Referințe

  1. Repozitoriul GitHub KSUID al Segment: https://github.com/segmentio/ksuid
  2. "Generarea unor identificatori unici buni" de Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
  3. Specificația KSUID: https://github.com/segmentio/ksuid/blob/master/README.md
Feedback