Store billions of key-value pairs across hundreds of servers. Support reads and writes at hundreds of thousands of operations per second. Tolerate individual server failures without downtime. Distribute data automatically without manual shard assignment. Scale horizontally by adding nodes.
The constraints are fundamental: no single server can hold all the data, no single server can handle all the traffic, and any server can fail at any time.