Skip to content
HLD Learn/Unique IDs & Distributing Data
Browsing as a guest. Sign in to save your progress and earn XP as you complete chapters.

Generating Unique IDs at Scale

4 min read

You'll learn to

  • -Explain why auto-increment IDs break down across multiple databases
  • -Describe how Snowflake-style IDs work

Every database you've used so far in this course has had one instance handing out IDs, trivial with auto-increment. That assumption is about to break: the rest of this module is about splitting data across multiple database instances, and the moment there is more than one instance, "just increment a counter" no longer works, because two instances would each hand out their own 1, 2, 3... with no coordination between them.

Why Auto-Increment Breaks Down

If Shard A and Shard B both auto-increment independently, they will both eventually assign id=482 to two completely different records. You need IDs that are unique across the whole system, not just within one database instance.

UUIDs

A UUID is a 128-bit random (or pseudo-random) value, collision-probability so low it's treated as impossible in practice. Any machine can generate one with zero coordination with any other machine. The cost: UUIDs are large (compared to a 64-bit integer), and the common random variant (v4) has no inherent ordering; you can't tell which of two UUIDs was created first just by looking at them.

Snowflake-Style IDs

Twitter's Snowflake approach (since adopted widely, including by Discord) packs a timestamp, a machine/worker identifier, and a per-millisecond sequence number into a single 64-bit integer. The result is compact like a normal integer, globally unique without central coordination, and, critically, sortable by creation time just by comparing the numbers, since the timestamp is the leading bits.

Doing the Math on a 64-bit Snowflake ID
41 bits
Timestamp: good for ~69 years from a chosen epoch
10 bits
Machine ID: up to 1,024 unique ID-generator nodes
12 bits
Sequence: up to 4,096 unique IDs per node, per millisecond
~4.19B/sec
Max cluster-wide ID throughput (4,096/ms x 1,000ms x 1,024 nodes)

Notice the trade-off pattern again: UUIDs optimize for zero-coordination simplicity, Snowflake IDs optimize for compactness and sortability at the cost of needing a coordinated machine-id assignment scheme. Neither is "better": they solve slightly different problems.

Interview Signal is part of Pro

See a real weak answer next to a real strong one for this exact topic.

Quiz is part of Pro

Test what you just read with a short quiz, and bank the XP.