用途:该技能用于在系统设计中决定数据存放位置、键与查询方式,以及单机之外的扩展策略。当“存储数据”需要落实为具体主键与查询形态时使用,例如选择 SQL/NoSQL、设计 schema 与访问路径、加索引、拆分热表、分片/分区、加只读副本、决定反范式化。
主要能力:先厘清数据形态与关系、访问模式、读写比与规模、一致性需求、延迟与持久性目标;再从关系型(Postgres、MySQL)、文档型(MongoDB 等)、键值型(Redis、DynamoDB、Riak)、宽列型(Cassandra、Bigtable、HBase)、图(Neo4j)中选择。扩展手段按成本递增顺序:索引、缓存、只读副本、按功能拆分数据库(联邦)、分片;并考虑多存储并用。
必要用法:先写主键、分区/排序键与二级索引,再添加扩展机制;只在数字迫使时引入 NoSQL、副本或分片(YAGNI)。默认单台索引良好的关系型节点,约 1k QPS、数十 GB 至低 TB;键值节点约 10k QPS;分片数按峰值写 QPS ÷ 单节点 QPS 与总字节 ÷ 单节点容量取较大值,若结果为单节点则不分片。分片键需高基数且分布均匀,避免低基数或单调递增键造成热点;数据库前应有有界连接池,并监控复制延迟、分片偏斜与连接池饱和度。
适用场景:任何持久化状态的系统设计,包括 schema、索引、读副本、分片与反范式化决策。
限制:不提供具体价格、云厂商默认值或代码实现;若未指明云厂商,按通用方法处理。相关主题(缓存、一致性协调、容量估算、演进策略)由对应技能承担。官方文档地址:https://www.skills.sh/proyecto26/system-design-skills/data-storage。