Générateur d'identifiants uniques CUID pour applications
Générez des identifiants uniques résistants aux collisions (CUID) pour les systèmes distribués, les bases de données et les applications web. Cet outil crée des CUID qui sont évolutifs, triables et très peu susceptibles de provoquer des collisions.
Générateur de CUID
Générez un ID résistant aux collisions rapidement et facilement.
Structure du CUID
Horodatage:
Aléatoire:
Documentation
Générateur de CUID
Introduction
Un CUID (Identifiant Unique Résistant aux Collisions) est un identifiant unique conçu pour être résistant aux collisions, évolutif horizontalement et triable séquentiellement. Les CUIDs sont particulièrement utiles dans les systèmes distribués où des identifiants uniques doivent être générés sans coordination entre les nœuds.
Structure des CUIDs
Un CUID se compose généralement des composants suivants :
- Horodatage : Une représentation du temps actuel
- Compteur : Un compteur séquentiel pour garantir l'unicité dans la même milliseconde
- Empreinte du client : Un identifiant unique pour la machine ou le processus générant le CUID
- Composant aléatoire : Données aléatoires supplémentaires pour réduire encore la probabilité de collision
La structure exacte peut varier en fonction de l'implémentation du CUID, mais ces composants travaillent ensemble pour créer un identifiant unique et triable.
Voici une représentation visuelle d'une structure typique de CUID :
Comment les CUIDs sont générés
Les CUIDs sont générés en utilisant une combinaison de composants basés sur le temps et aléatoires. Le processus implique généralement :
- Obtenir l'horodatage actuel
- Incrémenter un compteur (qui se réinitialise périodiquement)
- Générer une empreinte client (généralement effectuée une fois par session ou au démarrage de l'application)
- Ajouter des données aléatoires
- Combiner ces éléments dans un format spécifique
Le CUID résultant est généralement représenté sous forme de chaîne de lettres et de chiffres.
Avantages et cas d'utilisation
Les CUIDs offrent plusieurs avantages par rapport à d'autres systèmes d'identifiants uniques :
- Résistance aux collisions : La combinaison d'horodatage, de compteur et de données aléatoires rend les collisions extrêmement peu probables, même dans des systèmes distribués.
- Évolutivité horizontale : Les CUIDs peuvent être générés indépendamment sur plusieurs machines sans coordination.
- Tri séquentiel : Le composant horodatage permet un tri chronologique des CUIDs.
- Amical pour les URL : Les CUIDs sont généralement composés de caractères sûrs pour les URL.
Les cas d'utilisation courants pour les CUIDs incluent :
- Clés primaires de bases de données
- Systèmes distribués où des IDs uniques doivent être générés sur plusieurs nœuds
- Identifiants de session dans les applications web
- Suivi des événements dans les systèmes d'analyse
- Nommage de fichiers ou de ressources dans les systèmes de stockage cloud
Exemples de code
Voici des exemples de génération de CUIDs dans divers langages de programmation :
1// JavaScript (en utilisant la bibliothèque 'cuid')
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## Python (en utilisant la bibliothèque 'cuid')
2import cuid
3id = cuid.cuid()
4print(id)
5
1## Ruby (en utilisant la gem 'cuid')
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// Java (en utilisant la bibliothèque 'com.github.f4b6a3.cuid')
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# (en utilisant le package NuGet 'Cuid.Net')
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 (en utilisant le package 'endyjasmi/cuid')
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (en utilisant le package 'github.com/lucsky/cuid')
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 (en utilisant le package 'CUID')
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (en utilisant une implémentation personnalisée)
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 (en utilisant une implémentation personnalisée)
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% Utilisation
12id = generateCUID();
13disp(id);
14
1## R (en utilisant une implémentation personnalisée)
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## Utilisation
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (en utilisant une implémentation personnalisée)
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' Utilisation dans une cellule
17'=GenerateCUID()
18
Histoire et développement
Les CUIDs ont été initialement développés par Eric Elliott en 2012 comme une solution au problème de génération d'identifiants uniques dans des systèmes distribués. Le concept a été inspiré par le système d'ID Snowflake de Twitter mais conçu pour être plus facilement implémenté et utilisé sur diverses plateformes.
Le développement des CUIDs a été motivé par le besoin d'un système d'ID simple et résistant aux collisions qui pourrait fonctionner à travers différents langages de programmation et environnements. L'objectif d'Elliott était de créer un système facile à mettre en œuvre, ne nécessitant pas de coordination centrale, et pouvant évoluer horizontalement.
Depuis sa création, le CUID a connu plusieurs itérations et améliorations :
- L'implémentation originale du CUID se concentrait sur la simplicité et la facilité d'utilisation.
- À mesure que l'adoption a augmenté, la communauté a contribué à des implémentations dans divers langages de programmation.
- En 2021, CUID2 a été introduit pour résoudre certaines limitations du CUID original et offrir des performances et une résistance aux collisions encore meilleures.
- CUID2 a amélioré l'original en utilisant un générateur de nombres aléatoires plus sécurisé et en augmentant la longueur globale de l'identifiant.
L'évolution des CUIDs reflète les besoins changeants des systèmes distribués et les efforts continus pour équilibrer simplicité, sécurité et performance dans la génération d'identifiants uniques.
Références
- Dépôt GitHub officiel de CUID
- Spécification de CUID2
- Elliott, Eric. "Génération d'IDs uniques dans un environnement distribué." Medium, 2015.
- "Identifiants résistants aux collisions pour les systèmes distribués." DZone, 2018.
Cet outil générateur de CUID vous permet de générer rapidement des CUIDs pour vos projets. Il vous suffit de cliquer sur le bouton "Générer" pour créer un nouveau CUID, et d'utiliser le bouton "Copier" pour le copier dans votre presse-papiers pour une utilisation facile dans vos applications.
Retour d'information
Cliquez sur le toast de feedback pour commencer à donner des retours sur cet outil
Outils associés
Découvrez plus d'outils qui pourraient être utiles pour votre flux de travail