Design a distributed key-value store like DynamoDB or Redis.
Functional requirements:
- put(key, value)
- get(key) → value
- delete(key)
Non-functional requirements:
- High availability (always writable)
- Scalable (handles petabytes of data)
- Tunable consistency (strong or eventual)
- Low latency ( ms for most operations)
Scale:
- billion key-value pairs
- operations per second
- Average value size: KB