惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
IT之家
IT之家
Google DeepMind News
Google DeepMind News
罗磊的独立博客
爱范儿
爱范儿
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
U
Unit 42
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
B
Blog
博客园 - 叶小钗
月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

Aimee's Blog

秒杀怎么防机器人:验证码之外的几道防线 防薅羊毛怎么做:号码风控、设备指纹与分层策略 接口限流怎么选:固定窗口、滑动窗口、令牌桶 批量打包下载怎么设计:流式 ZIP 与异步任务 图片处理怎么做:异步处理与 CDN 实时参数 大文件上传怎么设计:分片、断点续传、秒传 报表可重跑的设计:快照、水位线与幂等 UV 统计为什么有误差:精确计数与近似计数怎么选 大数据量导出怎么做:流式写入与异步任务 排行榜的两类需求,难度差了一个数量级 内容审核怎么选:先审后发,还是先发后审 实时热榜怎么设计:Redis ZSet 与热度分值 互关状态怎么保持同步:双向关系的维护与缓存失效 并发点赞的计数设计:原子操作与最终对账 删了父评论,子评论怎么处理——先想清楚用户看到的是什么 定时消息任务触发了两次 消息量大,写扩散还是读扩散——接到这个需求先问清楚规模 同一条消息推送了三次 活动结束了,用户还在收短信 接到注销需求,先问两个问题 微服务与服务拆分:何时拆、怎么拆 异步与事件驱动架构:把协作从「打电话」改成「发消息」 高可用设计:怎么让系统尽量不宕机 可扩展性设计:怎么让系统加机器就能扛更多 缓存架构:多级缓存怎么搭 高并发三板斧:限流、熔断、降级 架构设计到底在设计什么 —— 从单体到微服务的演进 服务成本账:一个服务一个月烧多少钱 可观测性:线上出问题怎么查 API 设计:好接口长什么样
存储与基建选型 —— 传统业务 vs AI 大模型时代
Aimee · 2026-06-04 · via Aimee's Blog

后端要存数据、搭基建,选型怎么定?这篇分两个角度讲:传统业务(什么数据用什么存),和 AI 大模型基建(LLM 应用多出来的那一层)。各自怎么选、怎么搭、有哪些开源方案。


第一部分 · 传统业务:什么数据用什么存

一、选型前,先想清楚几个问题

存储选型没有标准答案,但有标准的"问自己"。下面几个问题想明白,答案基本就浮出来了:

  • 数据长什么样? 结构固定(→ 关系型)、还是字段多变(→ 文档型)?是文件(→ 对象存储)、还是关系网络(→ 图数据库)?
  • 拿来干嘛? 在线业务的增删改查(OLTP),还是海量数据的离线分析(OLAP)?要不要全文搜索、要不要语义检索?
  • 要不要事务 / 强一致? 涉及钱、订单、库存 → 必须关系型;能容忍"稍后一致"→ 选择多得多。
  • 数据量多大、长多快? 百万级关系型轻松扛;到亿级、TB 级,才需要分库分表、数仓这些重武器。
  • 读多还是写多? 读多 → 加缓存、读写分离;写多且要分析 → 往大数据那套走。

二、什么数据用什么存

选型最常见的误区,是问"MySQL 和 MongoDB 哪个好"——这没有答案。对的问法是:我这份数据是什么形态、拿来干嘛,该放哪种存储

数据 / 场景用什么存为什么
业务核心数据(订单、用户、账目)关系型:MySQL / PostgreSQL要事务、强一致、表关系清晰
结构灵活 / 嵌套文档文档型:MongoDB字段不固定,不想频繁改表结构
缓存、计数、排行榜、会话Redis(内存)微秒级快、扛高并发
图片 / 视频 / 大文件对象存储:阿里云 OSS、AWS S3文件不该塞进数据库,对象存储便宜、自带 CDN
海量埋点 / 行为日志(用来分析)数仓 / OLAP:Hive、ClickHouse数据量极大,主要做离线 / 统计分析
监控指标(按时间记录)时序库:Prometheus、InfluxDB按时间序列高效读写,配 Grafana 看板
全文搜索Elasticsearch模糊搜索、分词,关系库做不了
关系网络(社交、推荐、风控)图数据库:Neo4j多跳关联(朋友的朋友)查得快,关系型 join 不动
AI 语义检索(RAG / 以图搜图)向量数据库:Milvus、pgvector按 embedding 的"语义相似"检索

为什么是它?—— 每种存储的"看家本领"

光记"什么用什么"还不够,得知道凭什么。一句话点破每个的核心:

  • 关系型(MySQL / PG):看家本领是事务 + 强一致。转账要么都成、要么都不成,余额绝不能算错——这种"出错不起"的数据,只有它的 ACID 扛得住。
  • MongoDB:本领是无固定表结构。商品详情、配置这种字段老变、嵌套深的,一个 JSON 文档存下、改字段不用改表;关系型得频繁改表或多表 join。
  • Redis:快是因为数据全在内存里——内存读写微秒级,比磁盘快上千倍。所以热点、计数、排行榜放它,扛得住高并发。
  • 对象存储(OSS / S3):专为大文件而生,便宜、能直接 URL 访问、配 CDN。图片视频塞进数据库会撑爆库、拖慢查询。
  • 数仓 / ClickHouse:本领是列式存储。分析是"扫一亿行算个总和",列式只读用到的那几列、压缩狠、扫得飞快;MySQL 行式得整行整行读,跪。
  • 时序库(Prometheus):为时间序列优化——指标是"每秒一个点、按时间查趋势",它写入快、时间范围查快,还能自动丢弃旧数据。
  • ES:全文搜索靠倒排索引(词 → 哪些文档)+ 分词,秒级搜、还能按相关性排;LIKE '%关键词%' 是全表扫,慢且不能分词。
  • 图数据库(Neo4j):把关系当一等公民(直接存边)。查"朋友的朋友的朋友"它沿着边走;关系型每多一跳就多一次 join,越深越慢。
  • 向量库(Milvus):有专门的向量相似度索引。语义检索要在亿级向量里找"意思最接近的 top-k",普通库算不动,它用 ANN 索引秒级搞定。

几个最常纠结的点:

  • MySQL 还是 PostgreSQL? 都行。MySQL 生态最成熟、用得最广、招人好招;PostgreSQL 功能更强(强大的 JSON、地理信息、复杂查询、窗口函数),近年越来越火。普通业务 MySQL 够用,要那些高级特性就上 PG。
  • 别滥用 MongoDB。 很多人冲着"不用设计表结构"就上 MongoDB,但业务核心数据(要事务、要多表关联)还是关系型更稳。MongoDB 真正的主场是:日志、商品详情、配置这类结构多变、关联少、读多的数据。拿它存订单、做转账,迟早踩坑。

三、真实系统都是"组合拳"

别想用一种存储解决所有问题——真实系统是多种存储各司其职。拿一个内容平台举例:

  • 用户、文章、评论 → MySQL(核心数据,要一致)
  • 热门榜、阅读数、登录态 → Redis(缓存,扛高频读)
  • 文章配图、视频 → OSS(对象存储)
  • 站内搜索 → Elasticsearch
  • 用户阅读行为(埋点)→ 采集进数仓做分析
  • 服务监控 → Prometheus + Grafana

这种"一种数据配一种存储"的做法,业界叫 polyglot persistence(混合持久化)。所以选型从来不是"二选一",而是"每块数据各自选对"。

四、自建,还是用云托管?

每种存储都有两条路:自己装一台(自建),或用云厂商的托管版(开箱即用、免运维)。

存储自建阿里云托管(其他云类似)
MySQL / PG自己装、自己运维RDS
Redis自建云数据库 Redis(Tair)
数仓自建 Hive 集群MaxCompute / Hologres
对象存储自建 MinIOOSS
搜索自建 ES阿里云 Elasticsearch
时序 / 监控自建 Prometheus托管 Prometheus + Grafana

自建省钱,但备份、扩容、故障都得自己扛;托管贵一点,换来省心。团队小、没专职运维,就尽量用托管。

五、按团队规模怎么选

规律是:规模越小,越要少而精、能托管就托管;规模越大,越分化、越自建。

  • 小团队 / 个人:一个关系型 + 一个 Redis + 对象存储,就够;全用云托管;别碰数仓 / Kafka(数据量没到,纯添乱)。
  • 中型公司:业务库(可能读写分离)+ Redis 集群 + 对象存储;有分析需求再上数仓 + 埋点链路 + ES + 监控;仍以云托管为主。
  • 大公司:深度自建 + 分布式(分库分表、TiDB)+ 数据中台,有专门 DBA / 数据团队;通常"云 + 自建"混合。

六、架构是"长"出来的

存储架构跟着数据量走:一个 MySQL 起步 → 读慢了加 Redis + 读写分离 → 单库扛不住分库分表 → 要分析接数仓。每步都是被真实瓶颈逼出来的,不是一开始就堆上去的。

最容易踩的坑:小团队过早上大公司架构。 看了大厂分享就上 Kafka + ClickHouse + 数据中台,结果数据量没到、人手不够,架构反成负担。让需求拉着架构走。

七、选好了,怎么部署?

分本地和生产两套打法,别搞混:

本地开发 / 测试:图快,用 Docker 起一个就行——

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=pass -p 3306:3306 -v mysql-data:/var/lib/mysql mysql:8
docker run -d --name redis -p 6379:6379 -v redis-data:/data redis:7

多个一起起,用 docker-compose 写一个文件、docker compose up。(记得 -v 挂数据卷,不然容器一删数据就没了。)

生产:千万别拿 docker run 单机上生产——没主从、没备份、没监控,出事就是大事故。真实是这么跑的:

  • 大多数公司 → 云托管 RDS(阿里云 / AWS):申请个实例,高可用、自动备份、主从、扩容、监控全是云厂商包,开发者根本不碰运维。首选。
  • 规模大 / 要数据自控 → K8s + Operator(MySQL / Redis Operator 自动管主从、故障转移、备份),或公司自建数据库平台让人按需申请实例。
  • 大厂另有专门的 DBA / 存储团队 + 自研中间件。

一句话:本地用 Docker 练手 / 跑测试,生产"能托管就托管"(RDS)。


第二部分 · AI 大模型基建:多了哪些新东西

LLM 应用火起来后,后端基建多了一层"AI 专属"的。一个 AI 应用(不自研模型的话)大致要搭这几块,每块都有开源方案:

模块干嘛涉及的存储开源方案
LLM 网关统一接各家大模型(OpenAI/Claude/开源),做路由 / 限流 / 计费 / 密钥管理配置、调用记录LiteLLM
可观测性追踪每次调用、日志、评估trace→ClickHouse、元数据→Postgres、payload→对象存储Langfuse(对标闭源的 LangSmith)
向量库 + RAG存知识的 embedding、做语义检索向量数据库Milvus / pgvector
Prompt 管理 + 评估prompt 版本管理、自动评模型效果关系型Langfuse 自带 / 自建

(只有自研模型的公司才需要再往下:GPU 集群、推理服务 vLLM、训练 / 微调、数据标注。)

重点:LLM 调用日志怎么存

这是 AI 基建里最有代表性的一块。LLM 应用每次调用会产生一条 trace——这次请求的 prompt、response、调了哪些工具、token 数、延迟、成本,还有人工 / 自动打的评分。量极大,主要拿来调试、分析、评估、算成本

以开源的 Langfuse 为例(架构公开),正好又是一套"组合拳":

  • 海量 trace / 指标ClickHouse(OLAP,列式、高写入吞吐、分析快,能扛上亿条 trace)
  • 账户、项目、prompt 配置等元数据PostgreSQL(要事务的关系型)
  • 大 payload、多模态输入(图片等)对象存储(S3 / OSS / MinIO)
  • 队列削峰 + 缓存 → Redis

Langfuse 早期纯用 Postgres,数据量一大就扛不住,后来把 trace 迁到 ClickHouse,查询从分钟级降到近实时——正好印证第一部分"架构是长出来的"。

它怎么收集到数据的? 你的应用里装 SDK(langfuse / langsmith 包)、配几个参数(endpoint、key),它就自动在每次 LLM 调用处插桩(基于 OpenTelemetry 的 trace / span 模型),把链路上报到后端——不用手写埋点。常见做法还有"用开源 SDK + 自建一个兼容的后端平台",数据自控、不出公司。

一句话记住 AI 基建

接模型(网关)+ 看效果(观测 / 评估)+ 喂知识(向量 / RAG)+ 管 prompt。 能开源自托管就自托管(LiteLLM + Langfuse + Milvus),云上有托管的按需选。


附:名词速查

  • OLTP / OLAP:前者是"业务交易"(增删改查),后者是"分析查询"(海量统计)。
  • 关系型 (MySQL / PG) / 文档型 (MongoDB) / 对象存储 (OSS / S3) / 数仓 (Hive / ClickHouse) / 时序库 (Prometheus) / ES:各管一类数据(见上表)。
  • 图数据库 (Neo4j):存关系网络,查多跳关联快。
  • 向量数据库 (Milvus / pgvector):存 embedding,按语义相似检索(RAG 用)。
  • polyglot persistence:混合持久化,一种数据配一种存储。
  • LLM 网关 (LiteLLM):统一接各家大模型、做路由 / 限流 / 计费。
  • 可观测性 / Langfuse:追踪 LLM 调用链路(trace / span),开源、可自托管;LangSmith 是其闭源托管对标。
  • RAG:检索增强生成——先从向量库检索相关知识,再喂给大模型。
  • trace / span:一次请求的完整调用链路(trace)由一个个步骤(span)按父子关系串成树。

这是「数据存储」专题第一篇。鉴权专题三篇见 这里。完整代码与系列都在 GitHub:Aimee1608/backend-notes