CUID-generaattori: Ainutlaatuisten tunnisteiden luominen
Tuota törmäyksiltä suojattuja ainutlaatuisia tunnisteita (CUID) hajautetuissa järjestelmissä, tietokannoissa ja verkkosovelluksissa. Tämä työkalu luo CUID:ita, jotka ovat skaalautuvia, lajittelukelpoisia ja erittäin epätodennäköisiä törmäämään.
CUID-generaattori
Luo törmäyksiltä suojattu tunnus nopeasti ja helposti.
CUID-rakenne
Aikaleima:
Satunnainen:
Dokumentaatio
CUID-generaattori
Johdanto
CUID (Collision-resistant Unique IDentifier) on ainutlaatuinen tunniste, joka on suunniteltu olemaan törmäyksiltä suojattu, vaakasuunnassa skaalautuva ja järjestettävissä aikajärjestykseen. CUIDit ovat erityisen hyödyllisiä hajautetuissa järjestelmissä, joissa ainutlaatuisia tunnisteita on tuotettava ilman solmujen välistä koordinointia.
CUIDien rakenne
CUID koostuu tyypillisesti seuraavista komponenteista:
- Aikaleima: Nykyisen ajan esitys
- Laskuri: Jatkuva laskuri, joka varmistaa ainutlaatuisuuden saman millisekunnin sisällä
- Asiakasjälki: Ainutlaatuinen tunniste koneelle tai prosessille, joka tuottaa CUIDin
- Satunnainen komponentti: Lisäsatunnaista dataa, joka vähentää törmäysmahdollisuuksia
Tarkka rakenne voi vaihdella CUID-toteutuksen mukaan, mutta nämä komponentit toimivat yhdessä luodakseen ainutlaatuisen ja järjestettävän tunnisteen.
Tässä on visuaalinen esitys tyypillisestä CUID-rakenteesta:
Kuinka CUIDit luodaan
CUIDit luodaan käyttämällä aikaperusteisia ja satunnaisia komponentteja. Prosessi sisältää tyypillisesti:
- Nykyisen aikaleiman saamisen
- Laskurin lisäämisen (joka nollataan säännöllisesti)
- Asiakasjäljen tuottamisen (yleensä kerran istunnon tai sovelluksen aloituksen yhteydessä)
- Satunnaisen datan lisäämisen
- Näiden elementtien yhdistämisen tietyssä muodossa
Tuloksena oleva CUID esitetään tyypillisesti merkkijonona, joka koostuu kirjaimista ja numeroista.
Edut ja käyttötapaukset
CUIDit tarjoavat useita etuja muihin ainutlaatuisen tunnistamisen järjestelmiin verrattuna:
- Törmäyksiltä suojattu: Aikaleiman, laskurin ja satunnaisen datan yhdistelmä tekee törmäyksistä erittäin epätodennäköisiä, jopa hajautetuissa järjestelmissä.
- Vaakasuuntainen skaalautuvuus: CUIDit voidaan luoda itsenäisesti useilla koneilla ilman koordinointia.
- Aikajärjestykseen järjestäminen: Aikaleimakomponentti mahdollistaa CUIDien aikajärjestyksessä järjestämisen.
- URL-ystävällinen: CUIDit koostuvat tyypillisesti URL-turvallisista merkeistä.
Yleisiä käyttötapauksia CUIDeille ovat:
- Tietokannan ensisijaiset avaimet
- Hajautetut järjestelmät, joissa ainutlaatuisia ID:itä on tuotettava useilla solmuilla
- Istuntotunnukset verkkosovelluksissa
- Tapahtumien seuranta analytiikkajärjestelmissä
- Tiedostojen tai resurssien nimeäminen pilvitallennusjärjestelmissä
Koodiesimerkit
Tässä on esimerkkejä CUIDien tuottamisesta eri ohjelmointikielillä:
1// JavaScript (käyttäen 'cuid'-kirjastoa)
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (käyttäen 'cuid'-kirjastoa)
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (käyttäen 'cuid'-gemmiä)
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (käyttäen 'com.github.f4b6a3.cuid'-kirjastoa)
2import com.github.f4b6a3.cuid.Cuid;
3
4public class CuidExample {
5 public static void main(String[] args) {
6 String id = Cuid.createCuid();
7 System.out.println(id);
8 }
9}
10
1// C# (käyttäen 'Cuid.Net'-NuGet-pakettia)
2using Cuid;
3
4class Program
5{
6 static void Main(string[] args)
7 {
8 string id = CuidGenerator.Generate();
9 Console.WriteLine(id);
10 }
11}
12
1// PHP (käyttäen 'endyjasmi/cuid'-pakettia)
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (käyttäen 'github.com/lucsky/cuid'-pakettia)
2package main
3
4import (
5 "fmt"
6 "github.com/lucsky/cuid"
7)
8
9func main() {
10 id := cuid.New()
11 fmt.Println(id)
12}
13
1// Swift (käyttäen 'CUID'-pakettia)
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (käyttäen mukautettua toteutusta)
2#include <iostream>
3#include <chrono>
4#include <random>
5#include <sstream>
6#include <iomanip>
7
8std::string generateCUID() {
9 auto now = std::chrono::system_clock::now();
10 auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
11 auto value = now_ms.time_since_epoch();
12 long duration = value.count();
13
14 std::random_device rd;
15 std::mt19937 gen(rd());
16 std::uniform_int_distribution<> dis(0, 35);
17
18 std::stringstream ss;
19 ss << 'c';
20 ss << std::hex << std::setfill('0') << std::setw(8) << duration;
21 for (int i = 0; i < 8; i++) {
22 int r = dis(gen);
23 ss << (char)(r < 10 ? '0' + r : 'a' + r - 10);
24 }
25 return ss.str();
26}
27
28int main() {
29 std::string id = generateCUID();
30 std::cout << id << std::endl;
31 return 0;
32}
33
1% MATLAB (käyttäen mukautettua toteutusta)
2function id = generateCUID()
3 timestamp = dec2hex(round(posixtime(datetime('now'))*1000), 8);
4 random = '';
5 for i = 1:8
6 random = [random char(randi([48 57 97 122]))];
7 end
8 id = ['c' timestamp random];
9end
10
11% Käyttö
12id = generateCUID();
13disp(id);
14
1## R (käyttäen mukautettua toteutusta)
2library(lubridate)
3
4generate_cuid <- function() {
5 timestamp <- format(as.numeric(now()) * 1000, scientific = FALSE)
6 timestamp <- substr(timestamp, 1, 8)
7 random <- paste0(sample(c(0:9, letters[1:6]), 8, replace = TRUE), collapse = "")
8 paste0("c", timestamp, random)
9}
10
11## Käyttö
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (käyttäen mukautettua toteutusta)
2Function GenerateCUID() As String
3 Dim timestamp As String
4 Dim random As String
5 Dim i As Integer
6
7 timestamp = Right("00000000" & Hex(CLng(CDbl(Now()) * 86400000)), 8)
8
9 For i = 1 To 8
10 random = random & Mid("0123456789abcdef", Int(Rnd() * 16) + 1, 1)
11 Next i
12
13 GenerateCUID = "c" & timestamp & random
14End Function
15
16' Käyttö solussa
17'=GenerateCUID()
18
Historia ja kehitys
CUIDit kehitti alun perin Eric Elliott vuonna 2012 ratkaisuksi ainutlaatuisten tunnisteiden tuottamiseen hajautetuissa järjestelmissä. Konsepti sai inspiraationsa Twitterin Snowflake-ID-järjestelmästä, mutta se suunniteltiin helpommin toteutettavaksi ja käytettäväksi eri alustoilla.
CUIDien kehitys johtui tarpeesta yksinkertaiseen, törmäyksiltä suojattuun ID-järjestelmään, joka voisi toimia eri ohjelmointikielissä ja ympäristöissä. Elliottin tavoite oli luoda järjestelmä, jota oli helppo toteuttaa, joka ei vaatinut keskitettyä koordinointia ja joka voisi skaalautua vaakasuunnassa.
Sen jälkeen, kun CUIDit oli kehitetty, ne ovat käyneet läpi useita iteraatioita ja parannuksia:
- Alkuperäinen CUID-toteutus keskittyi yksinkertaisuuteen ja käytettävyyteen.
- Käytön kasvaessa yhteisö on tuottanut toteutuksia eri ohjelmointikielillä.
- Vuonna 2021 esiteltiin CUID2, joka käsitteli alkuperäisen CUIDin rajoituksia ja tarjosi vielä paremman suorituskyvyn ja törmäyksiltä suojan.
- CUID2 paransi alkuperäistä käyttämällä turvallisempaa satunnaislukugeneraattoria ja lisäämällä tunnisteen kokonaispituutta.
CUIDien kehitys heijastaa hajautettujen järjestelmien muuttuvia tarpeita ja jatkuvia pyrkimyksiä tasapainottaa yksinkertaisuus, turvallisuus ja suorituskyky ainutlaatuisten tunnisteiden tuottamisessa.
Viitteet
- Virallinen CUID GitHub-repositorio
- CUID2-määrittely
- Elliott, Eric. "Ainutlaatuisten ID:iden generointi hajautetussa ympäristössä." Medium, 2015.
- "Törmäyksiltä suojatut ID:t hajautetuissa järjestelmissä." DZone, 2018.
Tämä CUID-generaattorityökalu mahdollistaa CUIDien nopean tuottamisen projekteihisi. Napsauta vain "Generoi"-painiketta luodaksesi uuden CUIDin, ja käytä "Kopioi"-painiketta kopioidaksesi sen leikepöydälle helppoa käyttöä varten sovelluksissasi.
Palaute
Napsauta palautetoimintoa aloittaaksesi palautteen antamisen tästä työkalusta
Liittyvät työkalut
Löydä lisää työkaluja, jotka voivat olla hyödyllisiä työnkulussasi