Generador de KSUIDs: Identificadors Únics Ordenables per Temps
Genera identificadors únics ordenables per temps (KSUID) per a l'ús en sistemes distribuïts, bases de dades i aplicacions que requereixen claus úniques i ordenables per temps. Els KSUID combinen una marca de temps amb dades aleatòries per crear identificadors resistents a les colisions i ordenables.
Generador de KSUID
Documentació
Generador de KSUID
Introducció
KSUID (Identificador Únic K-Sortable) és un format d'identificador únic que ofereix diversos avantatges sobre el UUID (Identificador Únic Universal) i altres sistemes d'identificació. Aquesta eina et permet generar KSUIDs ràpidament i fàcilment.
Què és un KSUID?
Un KSUID és un identificador sortable de 20 bytes que consisteix en:
- Un timestamp de 32 bits (4 bytes)
- 16 bytes de aleatorietat
Quan es representa com una cadena, un KSUID s'codifica en base62 i té una longitud de 27 caràcters.
Estructura d'un KSUID
L'estructura d'un KSUID es pot desglossar com segueix:
-
Timestamp (4 bytes): Això representa el nombre de segons des de l'època Unix (1 de gener de 1970, a les 00:00 UTC). El timestamp permet que els KSUIDs siguin aproximadament sortables per temps de generació.
-
Component aleatori (16 bytes): Aquest és un número aleatori criptogràficament segur que garanteix la unicitat fins i tot quan es generen múltiples KSUIDs al mateix segon.
-
Codificació Base62: Els 20 bytes combinats (timestamp + aleatori) es codifiquen utilitzant base62 (A-Z, a-z, 0-9) per produir la cadena final de 27 caràcters.
Fórmula KSUID
Un KSUID es pot representar matemàticament com:
On:
- és el timestamp de 32 bits
- és el component aleatori de 128 bits
- denota concatenació
El timestamp es calcula com:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
On KSUID_epoch és 1400000000 (2014-05-13T16:53:20Z).
Diagrama de l'estructura d'un KSUID
Casos d'ús per a KSUIDs
Els KSUIDs són particularment útils en els següents escenaris:
-
Sistemes distribuïts: Quan necessites identificadors únics a través de múltiples servidors o serveis sense coordinació.
-
Dades sortable per temps: Quan vols ordenar dades per temps de creació sense emmagatzemar un timestamp separat.
-
Claus de base de dades: Com a claus primàries en bases de dades, especialment en bases de dades distribuïdes on els enters d'auto-increment no són adequats.
-
Identificadors segurs per a URL: Per crear identificadors curts, únics i segurs per a URL per a recursos en aplicacions web.
-
Correlació de registres: Per correlacionar entrades de registre a través de diferents serveis en una arquitectura de microserveis.
Avantatges dels KSUIDs
Els KSUIDs ofereixen diversos avantatges sobre altres sistemes d'identificació:
-
Sortabilitat: A diferència dels UUIDs, els KSUIDs es poden ordenar cronològicament, cosa que és útil per a la indexació de bases de dades i l'anàlisi de registres.
-
No es requereix coordinació: A diferència dels IDs d'auto-increment, els KSUIDs es poden generar de manera independent per diferents servidors sense risc de col·lisions.
-
Representació compacta: Amb 27 caràcters, els KSUIDs són més compactes que els UUIDs quan es representen com a cadenes.
-
Timestamp incrustat: El timestamp incrustat permet l'ordenació i filtratge basats en el temps sense necessitat d'un camp de timestamp separat.
-
Segur per a URL: La codificació base62 fa que els KSUIDs siguin segurs per a l'ús en URLs sense cap codificació addicional.
-
Probabilitat de col·lisió reduïda: El component aleatori de 16 bytes fa que les col·lisions siguin extremadament poc probables, fins i tot a altes taxes de generació.
Com utilitzar aquest generador
- Introdueix qualsevol paràmetre addicional si cal (per exemple, timestamp personalitzat).
- Fes clic al botó "Generar KSUID" per crear un nou KSUID.
- El KSUID generat es mostrarà al camp de sortida.
- Pots generar múltiples KSUIDs repetint els passos 1-3.
- Utilitza el botó "Copia" al costat de cada KSUID per copiar-lo al teu porta-retalls.
- Opcionalment, utilitza la funció "Exportar" per descarregar una llista de KSUIDs generats.
Recorda que cada KSUID és únic i s'ha d'utilitzar només una vegada. Genera un nou KSUID cada vegada que necessitis un identificador únic.
Exemple de codi
Aquí hi ha exemples de generació de KSUIDs en diversos llenguatges de programació:
1## Python
2import ksuid
3
4new_id = ksuid.ksuid()
5print(f"KSUID generat: {new_id}")
6
1// JavaScript
2const { ksuid } = require('ksuid')
3
4const newId = ksuid()
5console.log(`KSUID generat: ${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("KSUID generat: " + 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 << "KSUID generat: " << newId.string() << std::endl;
8 return 0;
9}
10
1## Ruby
2require 'ksuid'
3
4new_id = KSUID.new
5puts "KSUID generat: #{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 "KSUID generat: " . $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("KSUID generat: %s\n", newId.String())
12}
13
1// Swift
2import KSUID
3
4let newId = KSUID()
5print("KSUID generat: \(newId)")
6
Referències
- Repositori de KSUID de Segment: https://github.com/segmentio/ksuid
- "Generant bons identificadors únics" per Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- Especificació KSUID: https://github.com/segmentio/ksuid/blob/master/README.md
Comentaris
Fes clic a la notificació de comentaris per començar a donar comentaris sobre aquesta eina
Eines relacionades
Descobreix més eines que podrien ser útils per al teu flux de treball