Whiz Tools

KSUID Generator

KSUID Generator

Увод

KSUID (K-Sortable Unique IDentifier) је формат јединственог идентификатора који нуди неколико предности у односу на традиционалне UUID (Universally Unique Identifier) и друге системе идентификатора. Овај алат вам омогућава да брзо и лако генеришете KSUID-ове.

Шта је KSUID?

KSUID је идентификатор дужине 20 бајтова који се састоји од:

  1. 32-битног временског жига (4 бајта)
  2. 16 бајтова случајности

Када се представи као низ, KSUID је кодирана у base62 и дуга је 27 карактера.

Структура KSUID-а

Структура KSUID-а може се разложити на следећи начин:

  1. Временски жиг (4 бајта): Ово представља број секунди од Unix епохе (1. јануар 1970. у 00:00 UTC). Временски жиг омогућава KSUID-овима да буду приближно сортирани по времену генерисања.

  2. Случајна компонента (16 бајтова): Ово је криптографски сигурна случајна бројка која осигурава јединственост чак и када се више KSUID-ова генерише у истој секунди.

  3. Base62 кодирање: Комбинованих 20 бајтова (временски жиг + случајна компонента) се затим кодира користећи base62 (A-Z, a-z, 0-9) да би се произвео коначни низ од 27 карактера.

KSUID формула

KSUID се може математички представити као:

KSUID=Base62(TR)KSUID = Base62(T || R)

Где:

  • TT је 32-битни временски жиг
  • RR је 128-битна случајна компонента
  • || означава конкатенацију

Временски жиг TT се израчунава као:

T = \text{floor}(\text{current_time} - \text{KSUID_epoch})

Где је KSUID_epoch 1400000000 (2014-05-13T16:53:20Z).

Дијаграм структуре KSUID-а

Временски жиг (4 бајта) Случајна компонента (16 бајтова)

Користи KSUID-ова

KSUID-ови су посебно корисни у следећим сценаријима:

  1. Дистрибуирани системи: Када вам су потребни јединствени идентификатори преко више сервера или услуга без координације.

  2. Времено-сортирани подаци: Када желите да сортирате податке по времену креирања без чувања одвојеног временског жига.

  3. Кључеви базе података: Као примарни кључеви у базама података, посебно у дистрибуираним базама података где аутоматски инкрементални цели бројеви нису прикладни.

  4. Идентификатори безбедни за URL: За креирање кратких, јединствених, идентификатора безбедних за URL за ресурсе у веб апликацијама.

  5. Корелација логова: Да се корелишу лог записи преко различитих услуга у архитектури микросервиса.

Предности KSUID-ова

KSUID-ови нуде неколико предности у односу на друге системе идентификатора:

  1. Сортирање: За разлику од UUID-ова, KSUID-ови могу бити хронолошки сортирани, што је корисно за индексирање база података и анализу логова.

  2. Нема потребе за координацијом: За разлику од аутоматски инкременталних ID-ова, KSUID-ови се могу генерисати независно од различитих сервера без ризика од колизије.

  3. Компактна репрезентација: На 27 карактера, KSUID-ови су компактнији од UUID-ова када се представљају као низови.

  4. Уграђени временски жиг: Уграђени временски жиг омогућава сортирање и филтрирање на основу времена без потребе за одвојеним временским жигом.

  5. Безбедно за URL: Base62 кодирање чини KSUID-ове безбедним за употребу у URL-овима без додатног кодирања.

  6. Смањена вероватноћа колизије: 16-битна случајна компонента чини колизије изузетно маловероватним, чак и при високим стопама генерације.

Како користити овај генератор

  1. Унесите било које додатне параметре ако је потребно (нпр. прилагођени временски жиг).
  2. Кликните на дугме "Генериши KSUID" да бисте креирали нови KSUID.
  3. Генерисани KSUID ће бити приказан у излазном пољу.
  4. Можете генерисати више KSUID-ова понављањем корака 1-3.
  5. Користите дугме "Копирај" поред сваког KSUID-а да бисте га копирали у ваш клипборд.
  6. Опционално, користите функцију "Извези" да бисте преузели списак генерисаних KSUID-ова.

Запамтите да је сваки KSUID јединствен и да се треба користити само једном. Генеришите нови KSUID сваки пут када вам је потребан јединствени идентификатор.

Примери кода

Ево примера генерисања KSUID-ова на различитим програмским језицима:

## Python
import ksuid

new_id = ksuid.ksuid()
print(f"Генерисани KSUID: {new_id}")
// JavaScript
const { ksuid } = require('ksuid')

const newId = ksuid()
console.log(`Генерисани KSUID: ${newId}`)
// Java
import com.github.ksuid.KsuidGenerator;

public class KsuidExample {
    public static void main(String[] args) {
        String newId = KsuidGenerator.generate();
        System.out.println("Генерисани KSUID: " + newId);
    }
}
// C++
#include <iostream>
#include <ksuid/ksuid.hpp>

int main() {
    ksuid::Ksuid newId = ksuid::Ksuid::generate();
    std::cout << "Генерисани KSUID: " << newId.string() << std::endl;
    return 0;
}
## Ruby
require 'ksuid'

new_id = KSUID.new
puts "Генерисани KSUID: #{new_id}"
// PHP
<?php
require_once 'vendor/autoload.php';

use Tuupola\KsuidFactory;

$factory = new KsuidFactory();
$newId = $factory->create();
echo "Генерисани KSUID: " . $newId . "\n";
?>
// Go
package main

import (
    "fmt"
    "github.com/segmentio/ksuid"
)

func main() {
    newId := ksuid.New()
    fmt.Printf("Генерисани KSUID: %s\n", newId.String())
}
// Swift
import KSUID

let newId = KSUID()
print("Генерисани KSUID: \(newId)")

Референце

  1. Segment-ова KSUID GitHub репозиторија: https://github.com/segmentio/ksuid
  2. "Генерисање добрих јединствених идентификатора" од Питера Боргона: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
  3. KSUID спецификација: https://github.com/segmentio/ksuid/blob/master/README.md
Повратне информације