需要数据库吗
大多数产品的规模永远不会触及需要专用数据库的瓶颈,先从简单方案出发,等真正遇到功能需求时再升级。
原文链接¶
我的结论¶
- Instagram 在 4 亿 DAU 时仍在用 PostgreSQL,而绝大多数产品永远不会达到这个量级
- SQLite 从文件读取,单台服务器就能支撑 9000 万 DAU
- 是否需要数据库的判断标准不是规模,而是功能需求
关键信息¶
需要升级到完整数据库的信号:
- 需要按多个字段查询
- 需要联表(joins)
- 多进程同时写入
- 需要跨实体的原子写入
只要不触碰这些边界,SQLite 或更简单的方案就够用,不要为了"以防万一"引入过重的基础设施。
摘录¶
Instagram was at 400 million daily active users and still running PostgreSQL as their primary data store (Instagram Engineering). Most products never get there.
And when you do, SQLite running from a flat file handles 90 million daily active users on a single server.
You need to query by more than one field.
You need joins.
Multiple processes need to write at the same time.
You need atomic writes across entities.
我的补充¶
- 这个判断标准可以直接用于早期架构决策:先不引入数据库,等真正遇到以上需求时再加
- 对应的反模式是过早引入复杂数据库,增加运维和开发复杂度
- 与"过早优化是万恶之源"同理,数据库选型也适用"够用就好"原则
ref¶
- 来源:WuCai highlights + page note