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.
Luo törmäyksiltä suojattu tunnus nopeasti ja helposti.
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.
CUID koostuu tyypillisesti seuraavista komponenteista:
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:
CUIDit luodaan käyttämällä aikaperusteisia ja satunnaisia komponentteja. Prosessi sisältää tyypillisesti:
Tuloksena oleva CUID esitetään tyypillisesti merkkijonona, joka koostuu kirjaimista ja numeroista.
CUIDit tarjoavat useita etuja muihin ainutlaatuisen tunnistamisen järjestelmiin verrattuna:
Yleisiä käyttötapauksia CUIDeille ovat:
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
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:
CUIDien kehitys heijastaa hajautettujen järjestelmien muuttuvia tarpeita ja jatkuvia pyrkimyksiä tasapainottaa yksinkertaisuus, turvallisuus ja suorituskyky ainutlaatuisten tunnisteiden tuottamisessa.
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.
Löydä lisää työkaluja, jotka saattavat olla hyödyllisiä työnkulullesi