惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
雷峰网
雷峰网
D
Docker
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
MyScale Blog
MyScale Blog
A
About on SuperTechFans
博客园 - 【当耐特】
U
Unit 42
H
Help Net Security
博客园 - 三生石上(FineUI控件)
V2EX - 技术
V2EX - 技术
T
Tor Project blog
博客园 - 叶小钗
G
Google Developers Blog
S
Securelist
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threat Research - Cisco Blogs
aimingoo的专栏
aimingoo的专栏
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
The Register - Security
The Register - Security
Recorded Future
Recorded Future
NISL@THU
NISL@THU
量子位
L
LangChain Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CERT Recently Published Vulnerability Notes
The Hacker News
The Hacker News
D
DataBreaches.Net
小众软件
小众软件
罗磊的独立博客
Forbes - Security
Forbes - Security
The Last Watchdog
The Last Watchdog
Jina AI
Jina AI
I
InfoQ
S
Schneier on Security
Recent Announcements
Recent Announcements
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
Secure Thoughts

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
UUID v4 vs UUID v7: Performance, Security and Real Benchmarks at 100M
Kouadio mathias Kouame · 2026-06-17 · via DEV Community

TL;DR — UUID v7 trie 13× plus vite que v4 en simulation B-tree (1M entrées), expose une empreinte mémoire identique, mais révèle son timestamp d'émission. UUID v4 reste le choix "zéro réflexion" pour les identifiants isolés. Le reste de cet article vous donnera les données pour décider.


Introduction

Les UUIDs sont omniprésents dans les systèmes modernes : clés primaires de bases de données, identifiants de sessions, tokens de traçabilité. Pourtant, le choix de la version impacte directement les performances en écriture et en lecture, la fragmentation des index, et — dans certains contextes — la confidentialité des données.

UUID v4 (RFC 4122, 2005) est aujourd'hui la version par défaut de presque tous les ORM et frameworks. UUID v7 (RFC 9562, 2024) est son successeur moderne, conçu pour corriger son principal défaut : le désordre lexicographique.

Dans cet article, nous allons mettre les deux en face avec des benchmarks réels sur des volumes de 100 000 à 10 millions d'UUIDs, analyser leur structure bit par bit, et vous donner une grille de décision claire.


Structure interne : ce que contiennent ces 128 bits

UUID v4

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx

Bits Contenu
0–47 Aléatoire
48–51 Version (0100 = 4)
52–63 Aléatoire
64–65 Variant (10)
66–127 Aléatoire

122 bits d'entropie pure. Aucune information temporelle. Chaque UUID est statistiquement indépendant des autres.

UUID v7

019ed5c8-2a2f-7974-91f2-6ba1f313dcfa
└──────────────┘
  48 bits = timestamp Unix en millisecondes

Bits Contenu
0–47 Timestamp Unix (ms)
48–51 Version (0111 = 7)
52–63 Aléatoire (sub-ms ou compteur)
64–65 Variant (10)
66–127 Aléatoire

74 bits d'entropie + 48 bits de temps. Naturellement monotone : deux UUIDs générés dans la même milliseconde sont toujours distincts et ordonnés de façon cohérente.

Lecture du timestamp (Python) :

import uuid6

u = uuid6.uuid7()
b = u.bytes
ts_ms = int.from_bytes(b[:6], 'big')
# → 1781703125553  (ms depuis epoch Unix)

Depuis la sortie de nos benchmarks :

[00] 019ed5c8-2a32-7b6a-afd5-…  ts=1781703125554 ms
[01] 019ed5c8-2a33-7e1e-9487-…  ts=1781703125555 ms
[02] 019ed5c8-2a34-73a2-90ab-…  ts=1781703125556 ms

Chaque UUID v7 incrémente de 1 ms — parfaitement ordonné, parfaitement lisible.


Benchmarks réels — méthodologie

Tous les tests ont été réalisés sur :

  • Python 3.12, bibliothèque uuid (stdlib) et uuid6 (pur Python)
  • Environnement isolé pour éviter les interférences de GC
  • Volumes testés : 1 000 → 10 000 000 UUIDs
  • Proxy 100M : extrapolation linéaire validée sur les paliers mesurés

Benchmark 1 : Vitesse de génération

Résultats (moyennés sur 5 runs)

N UUID v4 (ms) UUID v7 (ms) v4 throughput v7 throughput
1 000 4,2 3,2
10 000 24,4 32,7
100 000 287 ± 23 370 ± 6 0,35 M/s 0,27 M/s
1 000 000 3 956 4 952 0,25 M/s 0,20 M/s
10 000 000 39 537 46 604 0,25 M/s 0,21 M/s

Extrapolation 100M : v4 ≈ 395 s / v7 ≈ 466 s (différence ≈ 70 s sur 100M)

Interprétation

UUID v4 génère environ 22% plus vite que v7 en Python pur. Cette différence s'explique par le surcoût d'appel à time.time_ns() et les opérations de masquage de bits dans la construction du timestamp pour v7.

Cependant, ce delta (22%) disparaît presque entièrement dans des implémentations compilées (Rust, Go, Java). En Go, les deux versions atteignent >10M/s avec un écart <5%.

La vitesse de génération ne doit donc pas être le critère principal.


Benchmark 2 : Tri et index B-tree (LE vrai différenciateur)

C'est ici que tout se joue. Les bases de données relationnelles (PostgreSQL, MySQL, SQLite) et les moteurs NoSQL (Cassandra, DynamoDB) utilisent des arbres B+ comme structure d'index. L'ordre lexicographique des clés primaires détermine directement :

  • le nombre de page splits lors des insertions
  • la localité de cache des lectures
  • la performance des scans séquentiels

Résultats — tri d'une liste de chaînes UUID

N Sort v4 (ms) Sort v7 (ms) Gain v7
100 000 33,1 3,3 10,1×
500 000 291,4 25,5 11,4×
1 000 000 632,5 48,3 13,1×
5 000 000 4 311,4 259,9 16,6×

Extrapolation 100M : sort v4 ≈ 86 200 ms / sort v7 ≈ 5 200 ms — soit ~16,6× d'avantage pour v7

Pourquoi cet écart est-il si grand ?

Le tri de chaînes ASCII exploite les comparaisons de préfixe. Les UUID v7 partagent les mêmes 12 premiers caractères hexadécimaux pour tous les UUIDs générés dans la même milliseconde. Le comparateur peut court-circuiter dès les premiers octets.

UUID v4 étant purement aléatoire, chaque comparaison doit parcourir statistiquement 4 à 6 caractères avant de trouver une différence — d'où la croissance super-linéaire du temps de tri.

UUID v4 : 557fd959-f720-4b2a-… vs 36a26e04-7da5-4d07-…
          ^ diverge immédiatement, mais position imprévisible

UUID v7 : 019ed5c8-2a2f-7974-… vs 019ed5c8-2a30-7883-…
          └─────────────┘ préfixe commun → comparaison rapide


Benchmark 3 : Unicité à grande échelle

Version N généré Collisions Temps
UUID v4 10 000 000 0 38 184 ms
UUID v7 10 000 000 0 50 348 ms

Aucune collision sur 10M d'UUIDs pour les deux versions. La probabilité théorique de collision pour v4 reste infinitésimale :

P(collision sur N tirages) ≈ N² / (2 × 2^122)
Pour N = 100M : P ≈ 10^16 / (2 × 5,3×10^36) ≈ 9,4 × 10^-22

UUID v7 réduit cette probabilité encore davantage car le timestamp garantit la séparation temporelle : deux UUIDs générés à des millisecondes différentes ne peuvent jamais collisionner indépendamment des bits aléatoires.


Benchmark 4 : Monotonie et gaps

UUID v4 — gap moyen (10k triés) : 429 472  |  stddev : 429 294
UUID v7 — gap moyen (10k triés) : 0        |  stddev : 0

Les UUID v7 générés en séquence ont un gap stddev de 0 : ils sont parfaitement consécutifs dans le temps. C'est précisément ce que les moteurs de base de données attendent pour minimiser la fragmentation des pages.

UUID v4 exhibe une distribution uniforme (stddev ≈ moyenne), caractéristique d'une distribution aléatoire pure — ce qui est excellent pour la distribution de charge dans un système de sharding, mais catastrophique pour un index B-tree.


Benchmark 5 : Empreinte mémoire

Version 1M UUIDs (Python objects)
UUID v4 ~69,1 MB
UUID v7 ~69,1 MB

Identique. Les deux versions sont représentées comme des entiers 128 bits en Python. La différence de structure interne n'a aucun impact sur la consommation mémoire côté application.


Sécurité : le point critique

UUID v4 — opaque par design

UUID v4 ne divulgue aucune information sur le contexte de génération. Impossible d'en inférer :

  • la date/heure de création
  • la relation entre deux identifiants
  • un ordre d'émission

C'est le choix par défaut pour les identifiants exposés dans des URLs publiques, des tokens d'API, ou des liens de partage.

UUID v7 — timestamp extractible

Les 48 premiers bits sont le timestamp Unix en millisecondes. Cela signifie que quiconque possède un UUID v7 peut en extraire la date de création à la milliseconde près.

import uuid6

u = uuid6.uuid7()
b = u.bytes
ts_ms = int.from_bytes(b[:6], 'big')

from datetime import datetime, timezone
dt = datetime.fromtimestamp(ts_ms / 1000, tz=timezone.utc)
# → 2026-06-17 14:32:05.554 UTC

Cas où c'est un problème :

  • Tickets de support : un client peut estimer combien de tickets ont été créés avant/après le sien
  • Factures : révèle la date exacte de création, pas seulement la date affichée
  • Tokens de réinitialisation de mot de passe : si le token est un UUID v7, l'attaquant sait sa durée de vie restante
  • Enumerability partielle : en connaissant la fenêtre temporelle d'émission, un attaquant peut réduire l'espace de recherche brute-force

Cas où c'est acceptable ou neutre :

  • Clés primaires internes jamais exposées à l'utilisateur
  • Logs applicatifs internes
  • Systèmes d'événements où le temps est déjà présent dans le payload
  • Messages de queues (Kafka, SQS)

Tableau de décision sécurité

Scénario UUID v4 UUID v7
ID exposé dans URL publique ✅ Recommandé ⚠️ Acceptable
Token d'authentification / reset pwd ✅ Obligatoire ❌ À éviter
Clé primaire base de données (interne) ✅ OK ✅ Préférable
ID dans un log public ou observable ✅ Recommandé ⚠️ Révèle le timing
Event ID dans un bus de messages ✅ OK ✅ Préférable
ID de transaction financière ✅ Standard ⚠️ Analyse possible

Comparaison RFC : UUID v4 (RFC 4122) vs UUID v7 (RFC 9562)

Critère UUID v4 UUID v7
RFC RFC 4122 (2005) RFC 9562 (2024)
Entropie 122 bits 74 bits
Monotonie Non Oui (ms)
Tri lexicographique Aléatoire ✅ Naturel
Info temporelle Aucune Timestamp ms
Index B-tree Fragmentation élevée Fragmentation minimale
Compatibilité Universelle Croissante (2024+)
Support PostgreSQL ✅ Natif ✅ Natif (v15+)
Support MySQL ✅ Natif Via UDF / 8.0+
Support Java UUID.randomUUID() UUID.randomUUID() n'existe pas → lib externe
Cas idéal Tokens, URLs publiques PKs DB, events, logs

Impact base de données : page splits et fragmentation

Le problème UUID v4 sur PostgreSQL

En mode production, une table avec UUID v4 comme clé primaire subit des page splits quasi-constants :

Insertion de 1M de rows avec UUID v4 :
  - Chaque nouvelle clé se place à un endroit aléatoire dans l'index
  - Provoque un split de page ~50% du temps (page pleine)
  - Result: index ~2× plus volumineux, cache hit rate réduit

Insertion de 1M de rows avec UUID v7 :
  - Les nouvelles clés sont toujours > toutes les clés existantes
  - Appends en queue d'index uniquement
  - Result: index compact, cache-friendly

Mesures typiques (PostgreSQL 16, table de 10M rows) :

Métrique UUID v4 UUID v7 Gain
Taille de l'index ~850 MB ~420 MB
Temps d'insertion batch 1M ~38 s ~12 s 3,2×
Sequential scan 1M rows ~2,1 s ~0,9 s 2,3×
Index bloat après 1M inserts ~45% ~3% 15×

Ces chiffres sont des mesures de référence issues de benchmarks PostgreSQL documentés (2023–2024). Vos résultats varieront selon le hardware et la configuration.


Cas d'usage : qui utilise quoi en production ?

UUID v7 en production (2024-2025)

  • Laravel 11+ : UUID v7 devient le défaut recommandé pour les modèles Eloquent
  • Hibernate 6.2+ (Java) : support natif @GeneratedValue(strategy=UUID) avec stratégie v7
  • PostgreSQL 17 : fonction gen_random_uuid() reste v4, mais uuid_generate_v7() disponible via extension
  • Prisma ORM : support UUID v7 via @default(uuid(7))
  • Supabase : recommande UUID v7 pour toutes les nouvelles tables depuis 2024

UUID v4 reste roi pour

  • Tokens opaques (JWTs, reset passwords, API keys)
  • Systèmes legacy avec ORM non mis à jour
  • Identifiants exposés où le timing doit rester confidentiel

Guide de migration v4 → v7

PostgreSQL

-- Créer une nouvelle table avec UUID v7
CREATE TABLE events (
    id UUID PRIMARY KEY DEFAULT gen_uuid_v7(),
    payload JSONB,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Ou via extension uuid-ossp alternative
-- En PostgreSQL 17, la fonction native est disponible

Node.js / TypeScript

import { v7 as uuidv7 } from 'uuid'; // uuid@9.0+

const id = uuidv7();
// → '019ed5c8-2a2f-7974-91f2-6ba1f313dcfa'

// Extraction du timestamp si besoin
function uuidv7ToTimestamp(uuidStr: string): Date {
  const hex = uuidStr.replace(/-/g, '').slice(0, 12);
  const ms = parseInt(hex, 16);
  return new Date(ms);
}

Python

import uuid6

# Génération
uid = uuid6.uuid7()

# Extraction du timestamp
def uuid7_to_datetime(u):
    b = u.bytes
    ts_ms = int.from_bytes(b[:6], 'big')
    from datetime import datetime, timezone
    return datetime.fromtimestamp(ts_ms / 1000, tz=timezone.utc)

print(uuid7_to_datetime(uid))
# → 2026-06-17 14:32:05.554000+00:00

Java / Spring Boot

// Spring Data JPA + Hibernate 6.2+
@Entity
public class Event {
    @Id
    @UuidGenerator(style = UuidGenerator.Style.TIME) // UUID v7
    private UUID id;

    // ...
}

Go

import "github.com/google/uuid"

// UUID v4
idV4 := uuid.New()

// UUID v7
idV7, err := uuid.NewV7()


Résumé visuel : choisir en 30 secondes

Votre ID sera-t-il exposé dans une URL ou comme token ?
    ├── OUI → UUID v4 (sécurité maximale, opaque)
    └── NON → continuez...

Est-ce une clé primaire en base de données ?
    ├── OUI → UUID v7 (index 2× plus compact, inserts 3× plus rapides)
    └── NON → continuez...

Avez-vous besoin d'ordonner par création sans champ créé_at ?
    ├── OUI → UUID v7 (monotone, triable nativement)
    └── NON → UUID v4 (plus simple, plus universel)


Conclusion

UUID v7 n'est pas "meilleur" que UUID v4 dans l'absolu — c'est un outil différent pour des contraintes différentes.

Le verdict des benchmarks est clair : pour tout ce qui touche à un index de base de données, UUID v7 est objectivement supérieur — tri 10 à 16× plus rapide, index 2× plus compact, fragmentation quasi nulle. Ces gains ne sont pas théoriques ; ils se traduisent directement en temps de réponse et en coût infrastructure.

En revanche, UUID v4 reste indispensable dès que l'identifiant est exposé dans un contexte où le timing doit rester opaque.

La bonne pratique en 2025 : UUID v7 pour toutes les clés primaires internes, UUID v4 (ou un HMAC/token dédié) pour tous les identifiants exposés.


Références

  • RFC 9562 — Universally Unique IDentifiers (UUIDs), IETF, 2024
  • RFC 4122 — A Universally Unique IDentifier (UUID) URN Namespace, IETF, 2005
  • PostgreSQL 17 Documentation — UUID Types
  • Percona Blog — "UUID v7 and Database Performance" (2024)
  • uuid6 Python library — https://github.com/oittaa/uuid6-python
  • uuid npm package v9+ — https://github.com/uuidjs/uuid

Mathias Kouadio — Développeur web & mobile | DevToolbox (devstoolsbox.dev)