大模型(LLM)公司如何使用数据库(Database)系统
Leave it to the professionals.
数据库系统作为重要的软件基础设施,即便时髦如大模型领域的公司,在训练和推理等业务中也都不可避免的要使用它。正如大模型自己会产生幻觉,在大模型如日中天的今日,人类也容易产生幻觉——要么认为数据库系统不再重要,要么认为大模型公司在使用数据库系统方面也很专业。首先,大模型的训练过程需要用处理多模态的各种数据,会用到各种通用或专用的数据库系统,来做数据的采集、加工和查询等(也就是 AI 数据工程)。当然,我们也得注意,这里主要用的是各种分析型数据库系统(OLAP、大数据系统、Python+Ray 等),并非传统的事务型数据库(OLTP)。其次,大模型公司在提供推理服务时也需要用数据库来管理用户注册、账户和会话等,这里用到的则主要是事务型数据库(OLTP)。要了解大模型公司对数据库的使用及其专业水平,需要大模型公司的员工来透露他们是如何使用数据库的。
OpenAI
大约三周前的 2026-01-22 日,OpenAI 的员工在其官网发布了这篇文章《Scaling PostgreSQL to power 800 million ChatGPT users》(https://openai.com/index/scaling-postgresql)。仅从标题看,OpenAI 利用 PostgreSQL 支撑起了全球的 8 亿 ChatGPT 用户,很了不起。一时间,网上相关的讨论火爆异常,很多人都说这是 OpenAI 和 PostgreSQL 非常强大的证明。文中也说”with a single primary Azure PostgreSQL flexible server instance and nearly 50 read replicas spread over multiple regions globally”,那就是说它用了大约一主五十备实现了横向的扩展。
仔细读完整篇文章,我们就会发现:
-
与业界尤其是互联网领域数据库与业务快速发展的演进类似,OpenAI 也是随着业务发展在逐步演进其数据库基础设施。
-
PostgreSQL 数据库也出现过一些过载导致的故障,例如上层 Cache 失效导致数据库被打爆,多表连接吃完 CPU,或业务新上的特性引起写风暴。然后就是业界熟悉的恶性循环:过载引起业务重试,重试又加大负载,最终导致 ChatGPT 和 API 服务降级。
-
PostgreSQL 的一主多备适合读多写少的业务负载,写如果太多的话,PostgreSQL 的行级多版本(MVCC)容易导致过度的写放大,读也会因为扫描更多的行被放大。长期运行必然会遇到臭名昭著的 VACUUM 问题。
-
OpenAI 也得重走大家的老路,把写负载逐步从 PostgreSQL 剥离到更容易横向扩展的 NoSQL 数据库(Azure CosmosDB)。PostgreSQL 中甚至不允许再建新表了。
-
业务的强事务要求依赖了一主多备的 PostgreSQL,要改造成分库分表的 PostgreSQL 或别的方案也没那么容易。不过既然现有方案能用,就继续撑到搞不定为止。
文章后面详细介绍了 OpenAI 是怎么结合业务来演进 PostgreSQL,支撑业务发展直到八百万级别的 QPS。下面这些场景和措施,互联网与云计算的专业人员估计都很熟悉:
-
PostgreSQL 从一主一备拓展到一主多备,完成横向的读写分离,达成横向扩展及减小单点故障的影响范围。
-
PostgreSQL 从一主多备直接复制试图拓展到级联复制,达成主备时延和负载均衡等的综合平衡。
-
数据库团队与上层业务团队密切配合,做好表结构设计和复杂 SQL 查询的设计等。
-
数据库团队与上层业务团队密切配合,增加连接池、Cache 缓存,做好 SQL 分流、SQL 限流、监控和切换预案等。
-
实在没法扩展的写业务要么与上层业务配合迁移到扩展性更强的 NoSQL,要么寻求分库分表的 Sharding 方案。
Cursor
斯坦福大学的 CS153 课程有不少搞云计算基础设施的人比较喜欢关注的主题,例如,大约一年前的 2025 年 3 月,它发布了 Cursor 公司 CTO 的访谈视频《Standford CS 153: Infra@Scale - Cursor CTO & Co-Founder Sualeh Asif》(https://youtu.be/4jDQi9P9UIw?si=Sfb1HVg_o7MKTKfW)。恰巧其中也提到了 Cursor 公司使用 RDS PostgreSQL 的经验教训。推测他们之前没有什么工业界使用数据库的经验,凭着学校课程学到的知识做出了最初的数据库选型和设计。视频访谈中涉及 PostgreSQL 的部分大致总结如下:
-
Cursor 的主要功能是大模型辅助软件开发,需要动态跟踪维护代码仓中的文件和目录变化,这是通过计算文件或目录的 Hash 值实现的。
-
他们在数据库中弄了个巨大的表,来保存这些 Hash 值。整个数据库大小为 22TiB,但是这个巨大的表就占了 20TiB。
-
他们居然还在数据库中定义了外键,那个巨大的表偏偏又需要频繁更新,于是更容易触发 Postgres 中臭名昭著的 VACUUM 问题。
-
听起来他们也没有评估过 Aurora PostgreSQL 或其他 OLTP 数据库。
-
搞出严重故障之后出现了个救火英雄,直接基于 S3 新写了个系统把 PostgreSQL 给替换了。
这种特殊的频繁更新负载还是需要认真评估选型,单个数据库实例通常都搞不定。
如果说这些大模型领域的新兴公司的案例对我们有什么启示,那应该是:
-
专业的事情要交给专业的人来干,除非你有钱有人,可以任性,不怕试错。
-
对于互联网类的业务负载来说,数据库系统(尤其是 OLTP 系统)不能盲目选型,选型要慎重,一旦沾上就不容易切换。😂
-
底层基础设施要与上层业务系统紧密配合,做好全栈的技术演进和合作,而不是互相之间泾渭分明,整天想着免责甚至甩锅。