标准答案
- 关系型数据库适合订单、支付、账户、权限这类实体关系清楚、需要 JOIN、唯一约束和事务一致性的核心数据。
- 文档数据库适合字段变化快、嵌套结构明显、一次读取通常围绕整个聚合对象的内容或配置数据,但仍要控制跨文档关联。
- 键值存储适合会话、限流计数、缓存和按 Key 直接访问的数据,不擅长临时组合查询和复杂关联。
- 搜索型存储适合分词、全文召回、相关性排序和聚合分析,搜索索引通常不应成为订单金额等业务事实的唯一来源。
- 选型先看一致性、查询模式、数据关系、容量增长和运维能力,再决定是否引入多种存储。
题目解析
存储选型不能只按“数据量大不大”判断。一个千万级订单表仍可能非常适合关系型数据库;反过来,字段随用户输入变化的内容资料,即使量不大,也可能更适合文档模型。关键是写入后要如何约束、查询时要怎样组合、错误能否补偿。
实际系统常把关系库作为交易事实源,把 Redis 用于短期访问加速,把搜索引擎作为异步构建的查询索引。这样可以保留核心写入的正确性,同时满足不同读取路径的性能要求。
常见误区
- 把缓存或搜索索引当成唯一事实源,发生失效或重建时无法恢复业务状态。
- 因为担心 JOIN 就过早拆库,结果把原本可以由约束保证的一致性转成了应用层补偿。