3000万个应用共享一套数据库:多租户“逻辑表”架构是如何做到的?

简介: 传统的“每个应用一张物理表”会导致物理表数量爆炸,“所有数据塞一张大表”又会让SQL计算能力失效。OceanBase用“逻辑表”架构解决了这个问题——每个应用拥有独立的表结构体验,但底层3000万个逻辑表共享同一套物理存储。本文从技术架构角度,拆解这套多租户“逻辑表”方案的实现原理。

大家好,我是小耶,写功课只是为了我踩过的坑,你们别再踩了!

8月初,OceanBase首次公开了支撑蚂蚁灵光AI生成应用的数据架构实践。

灵光平台让用户通过一句话就能生成一个“闪应用”——记账本、报名页面、打卡工具、调查问卷……目前已经承载了约3000万个这样的应用。

3000万个应用,每个都需要独立的数据存储和查询能力。如果是传统架构,要么为每个应用创建独立的物理表——物理表数量爆炸;要么把所有数据塞进一张大JSON表——SQL计算能力直接失效。

OceanBase给出的答案是:逻辑表

一、传统方案的两难困境

方案一:每个应用一张物理表

每个闪应用独立建表——3000万个应用就有3000万张表。数据库的元数据管理压力巨大,表数量爆炸会导致系统表膨胀、DDL操作缓慢、备份恢复时间急剧增加。

方案二:所有应用共用一张大表

把所有应用的数据塞进一张大表,用app_id字段区分。SQL引擎需要处理海量数据,查询时必须扫描全表再过滤app_id,索引效率极低。当单个应用数据量增长时,还会影响其他所有应用的查询性能。

两条路都走不通。灵光需要的是一套“中间方案”——应用层感觉独立,底层共享存储。

二、逻辑表架构的核心设计

逻辑表 vs 物理表

每个“闪应用”在操作层面仍然拥有独立的表结构——可以建表、插入数据、执行SQL查询,和使用独立数据库的体验完全一样。

但底层并不为每个应用创建独立的物理表。逻辑表是对物理存储的抽象映射。用户看到的是“我自己的表”,数据库底层看到的是“共享物理存储上的一个逻辑分区”。

JSONTable SDK

应用层通过JSONTable SDK与数据库交互。用户对逻辑表的操作(建表、插入、查询)被SDK转化为对共享物理存储的操作——数据以JSON格式写入底层物理表,读取时再映射回用户感知的逻辑表结构。

受控SQL计算

当用户执行SQL查询时,SQL引擎会自动注入租户隔离条件——每个查询只看到属于自己租户的数据,不会“越界”看到其他应用的数据。权限隔离在数据库内核层面完成,不需要应用层额外处理。

三、与传统多租户方案的区别

传统的多租户方案通常有两种做法:

  • 独立数据库:每个租户一个数据库——资源浪费严重,管理成本高

  • 共享数据库+租户字段:所有租户一张表,用tenant_id区分——查询需全表扫描,隔离性差

OceanBase的逻辑表方案走的是第三条路:

  • 操作层独立:每个应用看到的是自己独立的表结构,可以建表、插数据、执行SQL,体验跟独立数据库一模一样

  • 存储层共享:底层不创建独立的物理表,所有逻辑表共享同一套物理存储

  • 隔离层内建:多租户的权限隔离在数据库内核层面天然保障,不需要应用层额外处理

这种设计解决了两个核心问题:物理表数量不再随应用数量线性增长,存储成本大幅下降;多租户的权限隔离也天然得到保障。

四、为什么这套架构值得关注?

这不是一个“技术概念”,而是一个已经在生产环境验证的架构。3000万个应用跑在同一套数据库上,验证了逻辑表方案在真实场景下的可行性。

它反映了一个更大的趋势:数据库正在从“面向人”走向“面向AI Agent”。当AI可以批量生成应用,数据库面对的已不再只是容量和性能问题,而是被Agent持续生成的海量动态数据空间。每一个AI生成的应用都需要独立的数据能力,传统“一个应用一个数据库”的模式已经无法支撑。

五、总结

多租户“逻辑表”架构的本质,是在“应用独立”和“资源共享”之间找到了一个平衡点:

  • 每个应用拥有完整的SQL体验

  • 底层共享一套物理存储

  • 3000万个应用共享一套数据库

  • 某个应用增长到足够大时,可以一键迁移到独立的物理表

这套架构的价值不在于“多租户”本身,而在于它证明了:当数据规模从“人”的尺度变成“Agent”的尺度时,数据库架构需要被重新设计。逻辑表方案提供了一个可扩展的路径——让AI生成的应用从一开始就拥有独立的数据能力,而不用等到规模大了再重构。

小耶在手,SQL 不愁

还有什么想了解的,欢迎留言!小耶一定知无不言言无不尽……我们下次见~

相关文章
|
29天前
|
存储 固态存储 关系型数据库
从月账单5万到3.5万:云数据库成本优化的完整复盘
上云本应是降本增效,但很多企业上云之后,账单反而越滚越大。实例规格买高了、历史数据堆在SSD上、测试环境没人关、过期快照没清理——每一笔费用都在悄悄累积。本文从云账单的三大“黑洞”出发,拆解云成本失控的根因,给出实例降配、冷热数据分层、僵尸资源清理三条可落地的优化路径,帮助DBA和运维工程师用数据驱动成本优化,让每一分钱都花在刀刃上。
|
26天前
|
SQL JSON 移动开发
SQL派生表优化实战:从物化机制到LATERAL JOIN的完整进阶
很多人只知道“子查询改JOIN就快了”,但不知道为什么,也不知道什么时候该改、什么时候不该改。本文从派生表的物化机制出发,拆解临时表膨胀、索引失效的根因,通过真实案例对比派生表、CTE、LATERAL JOIN三种写法的性能差异,帮助读者从“知道现象”升级到“理解原理”。
|
24天前
|
缓存 监控 NoSQL
命中率98%跌至23%,17条告警齐发:Redis缓存三大故障复盘
从618促销缓存雪崩事故切入,深度解析缓存穿透、击穿、雪崩的底层机制、生产级防御方案与监控告警策略,附布隆过滤器实现和分布式锁代码
|
30天前
|
SQL 运维 监控
慢查询日志的“高级用法”:从找慢SQL到做容量规划
慢查询日志是DBA最熟悉的工具,但大多数人只用它来找“跑得慢的SQL”。如果只做到这一步,你只用了慢查询日志20%的价值——剩下的80%是建立性能基线、预测容量瓶颈、评估优化效果、发现潜在风险。本文从慢查询日志的进阶用法出发,讲解如何通过持续记录慢查询建立性能基线、如何通过慢查询趋势预测容量瓶颈、如何将慢查询日志从“故障排查工具”升级为“容量规划工具”,帮助读者从“出了问题再查”升级到“看着趋势主动调整”。
|
1月前
|
SQL 关系型数据库 MySQL
UNION vs UNION ALL:一个“ALL”字,性能差了一个数量级
UNION和UNION ALL的区别很多人知道,但INTERSECT和EXCEPT的执行机制、性能差异,以及如何用JOIN和子查询替代,很多人并不清楚。本文从集合操作的执行计划出发,拆解UNION去重的“隐形代价”、INTERSECT与INNER JOIN的本质差异、EXCEPT与NOT EXISTS的性能对比,并通过真实案例展示集合操作在业务场景中的正确用法与避坑指南,帮助读者从“会写集合操作”升级到“理解集合操作的底层逻辑”。
|
25天前
|
存储 搜索推荐 关系型数据库
纯向量库架构上线两周出事故,我帮他们重构后发现了3个选型误区
从一次生产事故出发,拆解向量数据库爆火的真实原因,深入底层索引机制和架构取舍,分析融合趋势。给从业者一个清醒的判断框架。
|
30天前
|
缓存 NoSQL 关系型数据库
CXL内存池化趋势:数据库架构师需要提前关注什么
CXL 3.0开始送样,4.0规范已发布,内存池化正在成为现实。从缓冲池、缓存层到存算分离,聊聊这项技术会让哪些数据库架构受益,哪些被动挨打。
|
1月前
|
SQL JSON 算法
SQL执行计划的“成本模型”:读懂cost,理解优化器为什么选这个计划
EXPLAIN能告诉你优化器选了哪个执行计划,但说不出它为什么这么选——明明有索引它却走全表扫描,明明A计划更快它却选了B计划。优化器不靠猜,它靠一套成本模型(Cost Model)做决策。本文从优化器的成本模型出发,拆解cost的构成(IO_cost、CPU_cost、memory_cost),讲解如何通过EXPLAIN FORMAT=JSON和OPTIMIZER_TRACE看到优化器的“思考过程”,并通过真实案例展示优化器“算错账”的根因,帮助读者从“知道选了谁”升级到“理解为什么选它”。
|
1月前
|
存储 固态存储 关系型数据库
DBA凌晨查账单:每月5万的云数据库竟有一半在空转,我的六个优化动作和数据验证
从一次真实的云数据库成本优化复盘出发,分享实例规格合理选型、冷热数据分层、存储压缩、弹性伸缩策略、清理历史数据、预留实例规划六个关键步骤,附优化前后的成本对比数据和操作要点。
|
19天前
|
存储 关系型数据库 MySQL
读写混合TPS差六倍,PostgreSQL与MySQL架构差异实测
从架构设计、索引实现、事务隔离、复制机制、运维体验五个维度深度对比PostgreSQL与MySQL,覆盖MySQL 9.0向量检索与PostgreSQL 17新特性,附权威基准数据和选型决策框架