Genereer K-sortable unieke identificatoren met KSUID
Genereer K-sortable unieke identificatoren (KSUID's) voor gebruik in gedistribueerde systemen, databases en applicaties die unieke, tijd-sortable sleutels vereisen. KSUID's combineren een tijdstempel met willekeurige gegevens om botsingsbestendige, sorteerbare identificatoren te creëren.
KSUID-generator
Documentatie
KSUID Generator
Inleiding
KSUID (K-Sortable Unique IDentifier) is een uniek identificatieformaat dat verschillende voordelen biedt ten opzichte van traditionele UUID (Universally Unique Identifier) en andere identificatiesystemen. Deze tool stelt je in staat om snel en eenvoudig KSUIDs te genereren.
Wat is een KSUID?
Een KSUID is een 20-byte sorteervriendelijke identificatie die bestaat uit:
- Een 32-bits tijdstempel (4 bytes)
- 16 bytes willekeurigheid
Wanneer weergegeven als een tekenreeks, wordt een KSUID gecodeerd in base62 en is het 27 tekens lang.
Structuur van een KSUID
De structuur van een KSUID kan als volgt worden onderverdeeld:
-
Tijdstempel (4 bytes): Dit vertegenwoordigt het aantal seconden sinds de Unix-epoch (1 januari 1970, om 00:00 UTC). De tijdstempel maakt het mogelijk om KSUIDs ruwweg op generatie tijd te sorteren.
-
Willekeurige Component (16 bytes): Dit is een cryptografisch veilige willekeurige getal dat uniciteit garandeert, zelfs wanneer meerdere KSUIDs in dezelfde seconde worden gegenereerd.
-
Base62 Codering: De gecombineerde 20 bytes (tijdstempel + willekeurig) worden vervolgens gecodeerd met behulp van base62 (A-Z, a-z, 0-9) om de uiteindelijke 27-teken lange tekenreeks te produceren.
KSUID Formule
Een KSUID kan wiskundig worden weergegeven als:
Waarbij:
- de 32-bits tijdstempel is
- de 128-bits willekeurige component is
- staat voor concatenatie
De tijdstempel wordt berekend als:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
Waar KSUID_epoch 1400000000 is (2014-05-13T16:53:20Z).
KSUID Structuur Diagram
Toepassingen voor KSUIDs
KSUIDs zijn bijzonder nuttig in de volgende scenario's:
-
Gedistribueerde Systemen: Wanneer je unieke identificaties nodig hebt over meerdere servers of diensten zonder coördinatie.
-
Tijd-Sorteerbare Gegevens: Wanneer je gegevens wilt sorteren op basis van creatietijd zonder een aparte tijdstempel op te slaan.
-
Database Sleutels: Als primaire sleutels in databases, vooral in gedistribueerde databases waar auto-incrementerende gehele getallen niet geschikt zijn.
-
URL-Veilige Identificaties: Voor het creëren van korte, unieke, URL-veilige identificaties voor bronnen in webapplicaties.
-
Logcorrelatie: Om logvermeldingen te correleren over verschillende diensten in een microservices-architectuur.
Voordelen van KSUIDs
KSUIDs bieden verschillende voordelen ten opzichte van andere identificatiesystemen:
-
Sorteerbaarheid: In tegenstelling tot UUIDs kunnen KSUIDs chronologisch worden gesorteerd, wat nuttig is voor database-indexering en loganalyse.
-
Geen Coördinatie Vereist: In tegenstelling tot auto-incrementerende ID's kunnen KSUIDs onafhankelijk door verschillende servers worden gegenereerd zonder het risico op botsingen.
-
Compacte Representatie: Met 27 tekens zijn KSUIDs compacter dan UUIDs wanneer ze als tekenreeksen worden weergegeven.
-
Tijdstempel Ingebed: De ingebedde tijdstempel maakt tijdgebaseerde sortering en filtering mogelijk zonder dat een apart tijdstempelveld nodig is.
-
URL-Veilig: De base62-codering maakt KSUIDs veilig voor gebruik in URL's zonder aanvullende codering.
-
Verminderde Botsingskans: De 16-byte willekeurige component maakt botsingen extreem onwaarschijnlijk, zelfs bij hoge generatie snelheden.
Hoe deze Generator te Gebruiken
- Voer eventuele aanvullende parameters in indien nodig (bijv. aangepaste tijdstempel).
- Klik op de knop "Genereer KSUID" om een nieuwe KSUID te maken.
- De gegenereerde KSUID wordt weergegeven in het uitvoerveld.
- Je kunt meerdere KSUIDs genereren door stappen 1-3 te herhalen.
- Gebruik de knop "Kopiëren" naast elke KSUID om deze naar je klembord te kopiëren.
- Optioneel kun je de functie "Exporteren" gebruiken om een lijst van gegenereerde KSUIDs te downloaden.
Vergeet niet dat elke KSUID uniek is en slechts één keer mag worden gebruikt. Genereer elke keer dat je een unieke identificatie nodig hebt een nieuwe KSUID.
Code Voorbeelden
Hier zijn voorbeelden van het genereren van KSUIDs in verschillende programmeertalen:
1## Python
2import ksuid
3
4new_id = ksuid.ksuid()
5print(f"Gegenereerde KSUID: {new_id}")
6
1// JavaScript
2const { ksuid } = require('ksuid')
3
4const newId = ksuid()
5console.log(`Gegenereerde 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("Gegenereerde 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 << "Gegenereerde KSUID: " << newId.string() << std::endl;
8 return 0;
9}
10
1## Ruby
2require 'ksuid'
3
4new_id = KSUID.new
5puts "Gegenereerde 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 "Gegenereerde 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("Gegenereerde KSUID: %s\n", newId.String())
12}
13
1// Swift
2import KSUID
3
4let newId = KSUID()
5print("Gegenereerde KSUID: \(newId)")
6
Referenties
- Segment's KSUID GitHub Repository: https://github.com/segmentio/ksuid
- "Generating good unique identifiers" door Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- KSUID Specificatie: https://github.com/segmentio/ksuid/blob/master/README.md
Feedback
Klik op de feedback toast om feedback te geven over deze tool
Gerelateerde Tools
Ontdek meer tools die nuttig kunnen zijn voor jouw workflow