Generátor K-sortovatelných unikátních identifikátorů KSUID
Generujte K-sortovatelné unikátní identifikátory (KSUID) pro použití v distribuovaných systémech, databázích a aplikacích vyžadujících unikátní, časově tříděné klíče. KSUID kombinují časovou značku s náhodnými daty, aby vytvořily kolizím odolné, tříděné identifikátory.
Generátor KSUID
Dokumentace
Generátor KSUID
Úvod
KSUID (K-Sortable Unique IDentifier) je formát jedinečného identifikátoru, který nabízí několik výhod oproti tradičnímu UUID (Universally Unique Identifier) a dalším systémům identifikátorů. Tento nástroj vám umožňuje rychle a snadno generovat KSUIDy.
Co je KSUID?
KSUID je 20-bajtový třídící identifikátor, který se skládá z:
- 32-bitového časového razítka (4 bajty)
- 16 bajtů náhodnosti
Při reprezentaci jako řetězec je KSUID kódován v base62 a má délku 27 znaků.
Struktura KSUID
Struktura KSUID může být rozdělena následovně:
-
Časové razítko (4 bajty): Toto představuje počet sekund od Unix epochy (1. ledna 1970, 00:00 UTC). Časové razítko umožňuje, aby byly KSUIDy přibližně tříděny podle času generace.
-
Náhodná složka (16 bajtů): Toto je kryptograficky bezpečné náhodné číslo, které zajišťuje jedinečnost i při generaci více KSUIDů ve stejné sekundě.
-
Base62 kódování: Kombinovaných 20 bajtů (časové razítko + náhodné) je poté kódováno pomocí base62 (A-Z, a-z, 0-9), aby se vytvořil konečný 27-znakový řetězec.
KSUID vzorec
KSUID může být matematicky reprezentováno jako:
Kde:
- je 32-bitové časové razítko
- je 128-bitová náhodná složka
- označuje spojení
Časové razítko se vypočítá jako:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
Kde KSUID_epoch je 1400000000 (2014-05-13T16:53:20Z).
Diagram struktury KSUID
Případy použití KSUID
KSUIDy jsou obzvlášť užitečné v následujících scénářích:
-
Distribuované systémy: Když potřebujete jedinečné identifikátory napříč více servery nebo službami bez koordinace.
-
Třídění podle času: Když chcete třídit data podle času vytvoření bez ukládání samostatného časového razítka.
-
Klíče databáze: Jako primární klíče v databázích, zejména v distribuovaných databázích, kde auto-incrementing celá čísla nejsou vhodná.
-
URL-bezpečné identifikátory: Pro vytváření krátkých, jedinečných, URL-bezpečných identifikátorů pro zdroje v webových aplikacích.
-
Korelace logů: Pro korelování záznamů logů napříč různými službami v architektuře mikroservis.
Výhody KSUID
KSUIDy nabízejí několik výhod oproti jiným systémům identifikátorů:
-
Třídění: Na rozdíl od UUID mohou být KSUIDy chronologicky tříděny, což je užitečné pro indexaci databází a analýzu logů.
-
Není potřeba koordinace: Na rozdíl od auto-incrementing ID mohou být KSUIDy generovány nezávisle různými servery bez rizika kolizí.
-
Kompaktní reprezentace: Při 27 znacích jsou KSUIDy kompaktnější než UUID při reprezentaci jako řetězce.
-
Vložené časové razítko: Vložené časové razítko umožňuje třídění a filtrování na základě času bez potřeby samostatného pole pro časové razítko.
-
URL-bezpečné: Base62 kódování činí KSUIDy bezpečnými pro použití v URL bez dalšího kódování.
-
Snížená pravděpodobnost kolize: 16-bajtová náhodná složka činí kolize extrémně nepravděpodobné, i při vysokých rychlostech generace.
Jak používat tento generátor
- Zadejte jakékoli další parametry, pokud jsou vyžadovány (např. vlastní časové razítko).
- Klikněte na tlačítko "Generovat KSUID" pro vytvoření nového KSUID.
- Vygenerovaný KSUID se zobrazí v poli výstupu.
- Můžete generovat více KSUIDů opakováním kroků 1-3.
- Použijte tlačítko "Kopírovat" vedle každého KSUID pro jeho zkopírování do schránky.
- Volitelně použijte funkci "Export" pro stažení seznamu vygenerovaných KSUIDů.
Pamatujte, že každý KSUID je jedinečný a měl by být použit pouze jednou. Generujte nový KSUID pokaždé, když potřebujete jedinečný identifikátor.
Příklady kódu
Zde jsou příklady generování KSUIDů v různých programovacích jazycích:
1## Python
2import ksuid
3
4new_id = ksuid.ksuid()
5print(f"Vygenerovaný KSUID: {new_id}")
6
1// JavaScript
2const { ksuid } = require('ksuid')
3
4const newId = ksuid()
5console.log(`Vygenerovaný 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("Vygenerovaný 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 << "Vygenerovaný KSUID: " << newId.string() << std::endl;
8 return 0;
9}
10
1## Ruby
2require 'ksuid'
3
4new_id = KSUID.new
5puts "Vygenerovaný 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 "Vygenerovaný 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("Vygenerovaný KSUID: %s\n", newId.String())
12}
13
1// Swift
2import KSUID
3
4let newId = KSUID()
5print("Vygenerovaný KSUID: \(newId)")
6
Odkazy
- GitHub repozitář Segmentu KSUID: https://github.com/segmentio/ksuid
- "Generování dobrých jedinečných identifikátorů" od Petera Bourgona: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- Specifikace KSUID: https://github.com/segmentio/ksuid/blob/master/README.md
Zpětná vazba
Klikněte na toast se zpětnou vazbou a začněte dávat zpětnou vazbu o tomto nástroji
Související nástroje
Objevte další nástroje, které by mohly být užitečné pro váš pracovní postup