How to create unique row ID in sharded databases?
A few approaches
1) Give each shard it's own ID, and use a composite key
2) Give each shard it's own ID and set ID ranges for each shard
3) Use a globally unique ID - GUID
The two approaches I've used to this sort of problem:
- GUID: Easy to implement, creates larger tables and indexes though.
- ID Domain: I made that term up but basically it means dividing the 32 (or 64) bits of an integer type into two parts, the top part is represents a domain. The number of bits to use for the domain depends on how many domains you want to support verses the number of records you expect a single domain to introduce. In this approach you allocate a domain to each shard. The down side is DBs (that I know of) do not support this approach directly you need to code ID allocation yourself.