KSUID Generator for Unique, Time-Sortable Identifiers
Generuokite K-sortinius unikalius identifikatorius (KSUID) naudoti paskirstytose sistemose, duomenų bazėse ir programose, kurioms reikalingi unikalūs, laiko rūšiuojami raktai. KSUID derina laiko žymą su atsitiktiniais duomenimis, kad sukurtų kolizijoms atsparius, rūšiuojamus identifikatorius.
KSUID generatorius
Dokumentacija
KSUID Generator
Įvadas
KSUID (K-sortable Unique IDentifier) yra unikalus identifikatoriaus formatas, siūlantis kelias pranašumus prieš tradicinius UUID (Universally Unique Identifier) ir kitus identifikatorių sistemas. Šis įrankis leidžia greitai ir lengvai generuoti KSUID.
Kas yra KSUID?
KSUID yra 20 baitų rūšiuojamas identifikatorius, kuris susideda iš:
- 32 bitų laiko žymės (4 baitai)
- 16 baitų atsitiktinumo
Kai KSUID yra atvaizduojamas kaip eilutė, jis koduojamas base62 ir yra 27 simbolių ilgio.
KSUID struktūra
KSUID struktūrą galima suskaidyti taip:
-
Laiko žymė (4 baitai): Tai atspindi sekundžių skaičių nuo Unix epochos (1970 m. sausio 1 d. 00:00 UTC). Laiko žymė leidžia KSUID būti apytiksliai rūšiuojamais pagal generavimo laiką.
-
Atsitiktinė komponentė (16 baitų): Tai yra kriptografiškai saugus atsitiktinis skaičius, užtikrinantis unikalumą, net kai keli KSUID yra generuojami tą pačią sekundę.
-
Base62 kodavimas: Sujungti 20 baitų (laiko žymė + atsitiktinė) tada koduojami naudojant base62 (A-Z, a-z, 0-9), kad būtų gauta galutinė 27 simbolių eilutė.
KSUID formulė
KSUID gali būti matematiškai atvaizduojamas kaip:
Kur:
- yra 32 bitų laiko žymė
- yra 128 bitų atsitiktinė komponentė
- žymi sujungimą
Laiko žymė apskaičiuojama kaip:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
Kur KSUID_epoch yra 1400000000 (2014-05-13T16:53:20Z).
KSUID struktūros diagrama
KSUID naudojimo atvejai
KSUID yra ypač naudingi šiose situacijose:
-
Išskirstytos sistemos: Kai reikia unikalių identifikatorių tarp kelių serverių ar paslaugų be koordinacijos.
-
Laiko rūšiuojami duomenys: Kai norite rūšiuoti duomenis pagal kūrimo laiką, nesaugodami atskiros laiko žymės.
-
Duomenų bazės raktai: Kaip pirminiai raktai duomenų bazėse, ypač išskirstytose duomenų bazėse, kur automatiškai didinami sveikieji skaičiai nėra tinkami.
-
URL saugūs identifikatoriai: Sukuriant trumpus, unikalius, URL saugius identifikatorius ištekliams internetinėse programose.
-
Žurnalo koreliacija: Koreliuoti žurnalo įrašus tarp skirtingų paslaugų mikroservisų architektūroje.
KSUID pranašumai
KSUID siūlo kelis pranašumus prieš kitas identifikatorių sistemas:
-
Rūšiuojamumas: Skirtingai nuo UUID, KSUID gali būti rūšiuojami chronologiškai, kas yra naudinga duomenų bazės indeksavimui ir žurnalo analizei.
-
Koordinacijos nereikia: Skirtingai nuo automatiškai didinamų ID, KSUID gali būti generuojami nepriklausomai skirtingų serverių be rizikos dėl susidūrimų.
-
Kompaktiška reprezentacija: Būdami 27 simbolių, KSUID yra kompaktiškesni nei UUID, kai atvaizduojami kaip eilutės.
-
Laiko žymė įtraukta: Įtraukta laiko žymė leidžia rūšiuoti ir filtruoti pagal laiką be atskiros laiko žymės lauko.
-
URL saugūs: Base62 kodavimas daro KSUID saugius naudoti URL be jokio papildomo kodavimo.
-
Sumažinta susidūrimo tikimybė: 16 baitų atsitiktinė komponentė daro susidūrimus labai neįtikėtinais, net esant dideliems generavimo tempams.
Kaip naudoti šį generatorių
- Įveskite bet kokius papildomus parametrus, jei reikia (pvz., pasirinktine laiko žyme).
- Paspauskite mygtuką "Generuoti KSUID", kad sukurtumėte naują KSUID.
- Sugeneruotas KSUID bus rodomas išvesties lauke.
- Galite generuoti kelis KSUID, pakartodami 1-3 žingsnius.
- Naudokite "Kopijuoti" mygtuką šalia kiekvieno KSUID, kad nukopijuotumėte jį į savo iškarpinę.
- Pasirinktinai naudokite "Eksportuoti" funkciją, kad atsisiųstumėte sugeneruotų KSUID sąrašą.
Atminkite, kad kiekvienas KSUID yra unikalus ir turėtų būti naudojamas tik kartą. Kiekvieną kartą, kai jums reikia unikalaus identifikatoriaus, generuokite naują KSUID.
Kodo pavyzdžiai
Štai pavyzdžiai, kaip generuoti KSUID įvairiose programavimo kalbose:
1## Python
2import ksuid
3
4new_id = ksuid.ksuid()
5print(f"Sukurtas KSUID: {new_id}")
6
1// JavaScript
2const { ksuid } = require('ksuid')
3
4const newId = ksuid()
5console.log(`Sukurtas KSUID: ${newId}`)
6
1// Java
2import com.github.ksuid.KsuidGenerator;
3
4public class KsuidExample {
5 public static void main(String[] args) {
6 String newId = KsuidGenerator.generate();
7 System.out.println("Sukurtas KSUID: " + newId);
8 }
9}
10
1// C++
2#include <iostream>
3#include <ksuid/ksuid.hpp>
4
5int main() {
6 ksuid::Ksuid newId = ksuid::Ksuid::generate();
7 std::cout << "Sukurtas KSUID: " << newId.string() << std::endl;
8 return 0;
9}
10
1## Ruby
2require 'ksuid'
3
4new_id = KSUID.new
5puts "Sukurtas KSUID: #{new_id}"
6
1// PHP
2<?php
3require_once 'vendor/autoload.php';
4
5use Tuupola\KsuidFactory;
6
7$factory = new KsuidFactory();
8$newId = $factory->create();
9echo "Sukurtas KSUID: " . $newId . "\n";
10?>
11
1// Go
2package main
3
4import (
5 "fmt"
6 "github.com/segmentio/ksuid"
7)
8
9func main() {
10 newId := ksuid.New()
11 fmt.Printf("Sukurtas KSUID: %s\n", newId.String())
12}
13
1// Swift
2import KSUID
3
4let newId = KSUID()
5print("Sukurtas KSUID: \(newId)")
6
Nuorodos
- Segmento KSUID GitHub saugykla: https://github.com/segmentio/ksuid
- "Gera unikalių identifikatorių generacija" Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- KSUID specifikacija: https://github.com/segmentio/ksuid/blob/master/README.md
Atsiliepimai
Spauskite atsiliepimų pranešimą, kad pradėtumėte palikti atsiliepimą apie šį įrankį
Susiję įrankiai
Atraskite daugiau įrankių, kurie gali būti naudingi jūsų darbo procesui