Generator K-Sortowalnych Unikalnych Identyfikatorów KSUID
Generuj K-Sortowalne Unikalne Identyfikatory (KSUID) do użycia w systemach rozproszonych, bazach danych i aplikacjach wymagających unikalnych, sortowalnych czasowo kluczy. KSUID łączy znacznik czasu z danymi losowymi, aby stworzyć identyfikatory odporne na kolizje i sortowalne.
Generator KSUID
Dokumentacja
Generator KSUID
Wprowadzenie
KSUID (K-Sortable Unique IDentifier) to format unikalnego identyfikatora, który oferuje kilka zalet w porównaniu do tradycyjnego UUID (Uniwersalny Unikalny Identyfikator) i innych systemów identyfikacji. To narzędzie pozwala na szybkie i łatwe generowanie KSUID.
Czym jest KSUID?
KSUID to 20-bajtowy sortowalny identyfikator, który składa się z:
- 32-bitowego znacznika czasu (4 bajty)
- 16 bajtów losowości
Gdy jest reprezentowany jako ciąg, KSUID jest kodowany w base62 i ma długość 27 znaków.
Struktura KSUID
Strukturę KSUID można podzielić na następujące elementy:
-
Znacznik czasu (4 bajty): Reprezentuje liczbę sekund od epoki Unix (1 stycznia 1970 roku, godzina 00:00 UTC). Znacznik czasu pozwala na w miarę sortowanie KSUID według czasu generacji.
-
Składnik losowy (16 bajtów): To kryptograficznie bezpieczna liczba losowa, która zapewnia unikalność, nawet gdy wiele KSUID jest generowanych w tej samej sekundzie.
-
Kodowanie Base62: Połączone 20 bajtów (znacznik czasu + losowy) są następnie kodowane za pomocą base62 (A-Z, a-z, 0-9), aby uzyskać ostateczny 27-znakowy ciąg.
Wzór KSUID
KSUID można matematycznie przedstawić jako:
Gdzie:
- to 32-bitowy znacznik czasu
- to 128-bitowy składnik losowy
- oznacza konkatenację
Znacznik czasu jest obliczany jako:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
Gdzie KSUID_epoch to 1400000000 (2014-05-13T16:53:20Z).
Diagram struktury KSUID
Przypadki użycia KSUID
KSUID są szczególnie przydatne w następujących scenariuszach:
-
Systemy rozproszone: Gdy potrzebujesz unikalnych identyfikatorów w wielu serwerach lub usługach bez koordynacji.
-
Dane sortowalne według czasu: Gdy chcesz sortować dane według czasu utworzenia bez przechowywania osobnego znacznika czasu.
-
Klucze bazy danych: Jako klucze główne w bazach danych, szczególnie w rozproszonych bazach danych, gdzie autoinkrementujące się liczby całkowite nie są odpowiednie.
-
Bezpieczne identyfikatory URL: Do tworzenia krótkich, unikalnych, bezpiecznych identyfikatorów URL dla zasobów w aplikacjach internetowych.
-
Korelacja logów: Aby skorelować wpisy logów w różnych usługach w architekturze mikroserwisów.
Zalety KSUID
KSUID oferują kilka zalet w porównaniu do innych systemów identyfikacji:
-
Sortowalność: W przeciwieństwie do UUID, KSUID mogą być sortowane chronologicznie, co jest przydatne do indeksowania bazy danych i analizy logów.
-
Brak konieczności koordynacji: W przeciwieństwie do identyfikatorów autoinkrementujących, KSUID mogą być generowane niezależnie przez różne serwery bez ryzyka kolizji.
-
Kompaktowa reprezentacja: Przy długości 27 znaków, KSUID są bardziej kompaktowe niż UUID, gdy są reprezentowane jako ciągi.
-
Wbudowany znacznik czasu: Wbudowany znacznik czasu pozwala na sortowanie i filtrowanie oparte na czasie bez potrzeby przechowywania osobnego pola znaczników czasu.
-
Bezpieczne dla URL: Kodowanie base62 sprawia, że KSUID są bezpieczne do użycia w URL bez dodatkowego kodowania.
-
Zmniejszone prawdopodobieństwo kolizji: 16-bajtowy składnik losowy sprawia, że kolizje są niezwykle mało prawdopodobne, nawet przy wysokich wskaźnikach generacji.
Jak korzystać z tego generatora
- Wprowadź dodatkowe parametry, jeśli to konieczne (np. niestandardowy znacznik czasu).
- Kliknij przycisk "Generuj KSUID", aby utworzyć nowy KSUID.
- Wygenerowany KSUID zostanie wyświetlony w polu wyjściowym.
- Możesz wygenerować wiele KSUID, powtarzając kroki 1-3.
- Użyj przycisku "Kopiuj" obok każdego KSUID, aby skopiować go do schowka.
- Opcjonalnie, użyj funkcji "Eksportuj", aby pobrać listę wygenerowanych KSUID.
Pamiętaj, że każdy KSUID jest unikalny i powinien być używany tylko raz. Generuj nowy KSUID za każdym razem, gdy potrzebujesz unikalnego identyfikatora.
Przykłady kodu
Oto przykłady generowania KSUID w różnych językach programowania:
1## Python
2import ksuid
3
4new_id = ksuid.ksuid()
5print(f"Wygenerowany KSUID: {new_id}")
6
1// JavaScript
2const { ksuid } = require('ksuid')
3
4const newId = ksuid()
5console.log(`Wygenerowany 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("Wygenerowany 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 << "Wygenerowany KSUID: " << newId.string() << std::endl;
8 return 0;
9}
10
1## Ruby
2require 'ksuid'
3
4new_id = KSUID.new
5puts "Wygenerowany 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 "Wygenerowany 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("Wygenerowany KSUID: %s\n", newId.String())
12}
13
1// Swift
2import KSUID
3
4let newId = KSUID()
5print("Wygenerowany KSUID: \(newId)")
6
Referencje
- Repozytorium KSUID na GitHubie Segment: https://github.com/segmentio/ksuid
- "Generowanie dobrych unikalnych identyfikatorów" autorstwa Petera Bourgona: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- Specyfikacja KSUID: https://github.com/segmentio/ksuid/blob/master/README.md
Opinie
Kliknij powiadomienie o opinii, aby rozpocząć przesyłanie opinii o tym narzędziu
Powiązane narzędzia
Odkryj więcej narzędzi, które mogą być przydatne w Twoim przepływie pracy