Design: Distributed Data Storage System
Design focuses on understanding trade-offs between consistency, availability, and partition tolerance in distributed systems. Implementation details of specific databases are out of scope.
Functional Requirements
FR1: Store and retrieve data across multiple servers
FR2: Ensure system availability even if some servers fail
FR3: Maintain data consistency across all servers
FR4: Handle network partitions gracefully
Non-Functional Requirements
NFR1: System must tolerate network failures between servers
NFR2: Latency for read and write operations should be under 200ms
NFR3: System should be available 99.9% of the time
NFR4: Data consistency must be guaranteed or availability prioritized depending on scenario