In a world of distributed systems and massive databases, creating identifiers that are unique across all systems without coordination is a significant challenge. UUIDs solve this elegantly. Let's explore how they work and when to use them.
What Is a UUID?
A UUID (Universally Unique Identifier) is a 128-bit number used to identify information. The standard format displays it as 32 hexadecimal digits in five groups:
550e8400-e29b-41d4-a716-446655440000
The key property: UUIDs generated by different systems at different times are virtually guaranteed to be unique. No central authority required.
How Unique Are UUIDs Really?
There are 2^122 possible UUID v4 values (some bits are reserved for version info). To put this in perspective:
- You could generate 1 billion UUIDs every second for 100 years
- The probability of a single duplicate would still be about 50%
- In practical applications, collisions are essentially impossible
Generate your own with our UUID generator.
UUID Versions
Version 1: Timestamp + MAC Address
Combines the current timestamp with the network card's MAC address. Guarantees uniqueness but reveals when and where it was created—a potential privacy concern.
Version 4: Random
122 bits of random data. The most commonly used version. No information about creation time or location. Requires good random number generation.
Version 5: Name-Based (SHA-1)
Generated by hashing a namespace identifier and name. Same inputs always produce the same UUID. Useful for consistent generation from known values.
Version 7: Timestamp + Random (New)
A recent addition that combines sortable timestamps with randomness. Better for database indexing while maintaining uniqueness.
UUIDs vs. Auto-Increment IDs
Traditional databases use auto-incrementing integers (1, 2, 3...). How do UUIDs compare?
Advantages of UUIDs
- Distributed generation: Create IDs anywhere without database access
- Merge without conflicts: Combine databases without ID collisions
- Security through obscurity: Can't guess other record IDs
- API-friendly: Generate IDs client-side before server submission
Disadvantages of UUIDs
- Larger storage: 16 bytes vs. 4 bytes for integers
- Index performance: Random UUIDs scatter across B-tree indexes
- Readability: Harder for humans to work with
- URL length: Longer and less attractive in URLs
When to Use UUIDs
UUIDs are ideal for:
- Distributed systems: Multiple servers generating IDs independently
- Microservices: Services creating records without central coordination
- API resources: Public-facing identifiers that shouldn't be guessable
- Offline-capable apps: Create records before syncing to server
- Data merging: Combining datasets from different sources
Stick with integers for:
- Single-database applications with no distribution needs
- Performance-critical scenarios with massive datasets
- Internal-only identifiers that don't need obscurity
UUID Best Practices
For Databases
- Use BINARY(16) storage instead of VARCHAR(36) to save space
- Consider UUID v7 for better index performance
- Add created_at timestamps separately if you need them
- Index strategically—not every UUID column needs an index
For APIs
- Use lowercase with hyphens for consistency
- Validate format on input to prevent injection
- Consider shorter ID formats for user-facing URLs
- Document which UUID version you're using
For Security
- Don't rely on UUIDs alone for security
- UUID v4 is preferred when you don't want timing information exposed
- Implement proper authorization—guessing a UUID shouldn't grant access
Alternative ID Formats
Other popular identifier formats include:
- ULID: Sortable, lexicographically ordered, 26 characters
- NanoID: Shorter, URL-safe, customizable alphabet
- Snowflake IDs: Twitter's sortable, 64-bit distributed IDs
- KSUID: K-Sortable Unique IDentifier, 27 characters
Each has tradeoffs in length, sortability, and uniqueness guarantees.
Working with UUIDs
Most programming languages have built-in or library support:
// JavaScript
crypto.randomUUID()
// Python
import uuid
uuid.uuid4()
// PHP
RamseyUuidUuid::uuid4()
// SQL (PostgreSQL)
gen_random_uuid()
Or use our online UUID generator for quick generation without code.
UUIDs solve a fundamental problem in distributed computing. Understanding when and how to use them helps you design more robust, scalable systems.