存储容量估算
系统上线一年后,硬盘红了。数据库只剩 10GB 空间,但每天增长 50GB。紧急扩容花了 3 天,期间系统限流,损失惨重。
这是典型的存储规划没做好。
存储容量估算是容量规划中最复杂的部分,因为存储增长往往是非线性的:数据量小时增长慢,数据量大时索引膨胀、碎片累积,增长反而更快。
存储估算的基本框架
存储估算的核心公式:
原始数据量估算
用户数据估算
业务数据估算
日志数据估算
索引开销估算
索引是存储增长的主要来源之一。很多时候,索引占用的空间比原始数据还大。
MySQL 索引开销
Elasticsearch 索引开销
Elasticsearch 的索引开销通常比 MySQL 大,因为它需要支持复杂的全文搜索:
索引膨胀因子
索引膨胀因子是存储规划中最重要的经验值:
副本冗余估算
生产环境的存储必须考虑副本,以应对硬件故障和数据恢复需求。
副本系数
RAID 与副本的区别
RAID 提供的是单盘故障保护,副本提供的是节点故障保护。两者可以叠加:
数据库存储详细估算
MySQL 行存储开销
MySQL InnoDB 引擎的行存储有固定开销:
PostgreSQL 行存储开销
PostgreSQL 的存储模型与 MySQL 不同:
NoSQL 存储估算
缓存存储估算
缓存是存储规划中最容易被低估的部分。
Redis 内存估算
多级缓存内存规划
存储规划完整示例
社交平台存储规划
存储规划常见错误
错误一:只算原始数据
原始数据只是冰山一角,索引和副本往往更大。
正确做法:原始数据 × 3~5 作为存储规划基数。
错误二:忽略数据增长
只算当前数据量,不考虑增长率。
正确做法:计算 6 个月、1 年、3 年的数据量,预留扩展空间。
错误三:忽略冷热分层
把所有数据都放在高性能存储中。
正确做法:热数据放 SSD,温数据放普通硬盘,冷数据放对象存储或归档。
错误四:忽略碎片和膨胀
数据库运行一段时间后,碎片会增加实际存储。
正确做法:预留 20~30% 的空间余量,并定期清理碎片。
总结
存储容量估算的核心框架:
存储规划不是一次性工作,需要定期复盘:
- 监控实际存储增长率
- 预测未来存储需求
- 提前规划扩容
- 考虑冷热分层降低存储成本