跳转到内容

数据库、缓存与存储

技术 适合保存 常见选择
关系型数据库 用户、订单、权限、关联明确的业务数据 PostgreSQL、MySQL、SQLite
文档数据库 结构较灵活的 JSON 文档 MongoDB
缓存/键值 临时结果、会话、限流和热点数据 Redis
对象存储 图片、视频、附件、备份 S3 兼容存储、云对象存储
搜索引擎 全文搜索、聚合和日志检索 Elasticsearch、OpenSearch
向量数据库/索引 语义相似度和 RAG 检索 pgvector、专用向量服务

一项技术可能覆盖多个场景,但“能存”不等于“最适合”。先明确数据关系、查询、规模、一致性、权限和备份,再决定。

  • PostgreSQL:功能完整、扩展丰富,适合多数新的业务应用;
  • MySQL:生态成熟、托管普及,许多现有系统和 CMS 使用;
  • SQLite:数据库就是一个文件,适合本地工具、原型、嵌入式应用和较轻的单机负载。

关系型数据库用表、主键、外键、索引和事务维护数据。第一步应学习 SELECTINSERTUPDATEDELETE,以及为什么查询必须有权限和参数化。

MongoDB 把数据保存成类似 JSON 的文档,适合结构会变化、按文档读取的数据。灵活 schema 不等于没有 schema;仍然要定义字段、索引、唯一约束和迁移策略。

Redis 不是主数据库的默认替代品

Section titled “Redis 不是主数据库的默认替代品”

Redis 常用于缓存、会话、限流、队列和短期状态。缓存内容必须允许过期和重建;更新数据库后要考虑缓存失效,不要让旧数据长期存在。

文件不宜直接塞进数据库字段。对象存储适合上传内容和大文件,数据库保存对象键、文件名、类型、大小和所属用户。上传时限制类型、大小和权限,并考虑病毒扫描和过期清理。

ORM(对象关系映射)让代码用对象或类型操作数据库,例如 Prisma、Drizzle、SQLAlchemy、Django ORM、Hibernate。它减少重复代码,但不能代替 SQL、索引、事务和查询性能知识。

迁移文件记录数据库结构变化。生产环境执行前要备份、评估锁表和回滚,不要直接手改表后忘记同步代码。

  • 数据库不要直接暴露公网;
  • 应用使用最小权限账号;
  • 查询使用参数化方式,避免字符串拼 SQL;
  • 生产、测试和本地数据库分开;
  • 自动备份,并实际验证恢复;
  • 敏感字段加密或避免收集;
  • 删除数据时考虑关联、审计和合规要求。