数据库、缓存与存储
先按数据形态选择
Section titled “先按数据形态选择”| 技术 | 适合保存 | 常见选择 |
|---|---|---|
| 关系型数据库 | 用户、订单、权限、关联明确的业务数据 | PostgreSQL、MySQL、SQLite |
| 文档数据库 | 结构较灵活的 JSON 文档 | MongoDB |
| 缓存/键值 | 临时结果、会话、限流和热点数据 | Redis |
| 对象存储 | 图片、视频、附件、备份 | S3 兼容存储、云对象存储 |
| 搜索引擎 | 全文搜索、聚合和日志检索 | Elasticsearch、OpenSearch |
| 向量数据库/索引 | 语义相似度和 RAG 检索 | pgvector、专用向量服务 |
一项技术可能覆盖多个场景,但“能存”不等于“最适合”。先明确数据关系、查询、规模、一致性、权限和备份,再决定。
PostgreSQL、MySQL 和 SQLite
Section titled “PostgreSQL、MySQL 和 SQLite”- PostgreSQL:功能完整、扩展丰富,适合多数新的业务应用;
- MySQL:生态成熟、托管普及,许多现有系统和 CMS 使用;
- SQLite:数据库就是一个文件,适合本地工具、原型、嵌入式应用和较轻的单机负载。
关系型数据库用表、主键、外键、索引和事务维护数据。第一步应学习 SELECT、INSERT、UPDATE、DELETE,以及为什么查询必须有权限和参数化。
MongoDB 和文档模型
Section titled “MongoDB 和文档模型”MongoDB 把数据保存成类似 JSON 的文档,适合结构会变化、按文档读取的数据。灵活 schema 不等于没有 schema;仍然要定义字段、索引、唯一约束和迁移策略。
Redis 不是主数据库的默认替代品
Section titled “Redis 不是主数据库的默认替代品”Redis 常用于缓存、会话、限流、队列和短期状态。缓存内容必须允许过期和重建;更新数据库后要考虑缓存失效,不要让旧数据长期存在。
文件不宜直接塞进数据库字段。对象存储适合上传内容和大文件,数据库保存对象键、文件名、类型、大小和所属用户。上传时限制类型、大小和权限,并考虑病毒扫描和过期清理。
ORM 和迁移
Section titled “ORM 和迁移”ORM(对象关系映射)让代码用对象或类型操作数据库,例如 Prisma、Drizzle、SQLAlchemy、Django ORM、Hibernate。它减少重复代码,但不能代替 SQL、索引、事务和查询性能知识。
迁移文件记录数据库结构变化。生产环境执行前要备份、评估锁表和回滚,不要直接手改表后忘记同步代码。
新手的安全底线
Section titled “新手的安全底线”- 数据库不要直接暴露公网;
- 应用使用最小权限账号;
- 查询使用参数化方式,避免字符串拼 SQL;
- 生产、测试和本地数据库分开;
- 自动备份,并实际验证恢复;
- 敏感字段加密或避免收集;
- 删除数据时考虑关联、审计和合规要求。