news 2026/8/31 21:18:46

Java 程序员第 47 阶段05:多租户知识库隔离设计,适配 SaaS 系统大模型架构,独立 Schema 隔离方案与动态数据源路由

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 程序员第 47 阶段05:多租户知识库隔离设计,适配 SaaS 系统大模型架构,独立 Schema 隔离方案与动态数据源路由

1. 独立 Schema 的适用场景

当你有"几十到几百个中大型租户",既想要强隔离、又不想维护几百个数据库实例时,独立 Schema 是甜点方案:同一 PostgreSQL 实例内kb_a.dockb_b.doc互相不可见,DDL 变更比独立库轻(拓扑见图 figure_05_1)。知识库场景下,每个租户的文档表、chunk 表、向量表各占一个 Schema,索引互相独立、互不影响。

2. 动态数据源路由设计

核心思路:一个"逻辑数据源"背后挂 N 个物理数据源(或同一库 N 个 Schema),运行时按tenantId决定路由到哪个(设计见图 figure_05_2)。Spring 的AbstractRoutingDataSource正好干这个——determineCurrentLookupKey()返回租户标识,框架据此选数据源。

3. Schema 初始化与 Flyway 多租户

新租户入驻要自动建 Schema 并跑迁移脚本。Flyway 本身不带多租户,需要循环每个 Schema 执行:

publicvoidinitTenantSchema(StringtenantId){Stringschema="kb_"+tenantId;jdbcTemplate.execute("CREATE SCHEMA IF NOT EXISTS "+schema);Flywayflyway=Flyway.configure().dataSource(dataSource).schemas(schema).locations("db/tenant").load();flyway.migrate();// 在该 Schema 内建表/建向量索引}

4. AbstractRoutingDataSource 落地

@BeanpublicDataSourcedataSource(DataSourceRegistryregistry){AbstractRoutingDataSourceds=newAbstractRoutingDataSource(){@OverrideprotectedObjectdetermineCurrentLookupKey(){returnTenantContext.get();// tenant-a / tenant-b}};ds.setTargetDataSources(registry.all());// Map<tenantId, DataSource>ds.setDefaultTargetDataSource(registry.defaultDs());returnds;}// 每个物理库用 search_path 指向 kb_<tenant> 的 Schema
关注点做法
路由键TenantContext.get()
Schema 切换SET search_path = kb_<tenant>
连接池每物理库独立池,避免某租户拖垮全局
新建租户动态注册数据源 + 初始化 Schema

5. 运维注意点

  • 连接池隔离:每个物理数据源独立池,防止"大租户"占满连接拖垮其他租户。
  • DDL 批量:Schema 多了,升级脚本要一次性批量跑完,做好失败回滚。
  • 备份粒度:可按 Schema 单独备份,恢复单租户更快。
  • search_path 注入kb_<tenant>同样要白名单校验,避免kb_a; DROP之类。

6. 小结

独立 Schema 用"动态数据源 + 按租户路由"在隔离与成本间取得平衡,是多租户知识库的常见落地形态。下一篇进入向量库本身的隔离——这是大模型场景最特殊、最容易踩坑的一层。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 21:17:57

Boost电路Matlab/Simulink仿真实战:从原理到闭环PI控制

Boost电路&#xff0c;也就是升压斩波电路&#xff0c;是电力电子领域最基础也最常用的拓扑之一。它不复杂&#xff0c;但电感电流连续模式&#xff08;CCM&#xff09;、断续模式&#xff08;DCM&#xff09;、占空比极限、带载能力这些问题&#xff0c;光看公式推导很难建立直…

作者头像 李华
网站建设 2026/8/31 21:17:32

管道组合 + 结构化输出:让 Claude 和 grep 并肩作战

管道组合 结构化输出&#xff1a;让 Claude 和 grep 并肩作战 系列第 2 篇 读完 6 分钟 前置&#xff1a;第 1 篇 Headless 入门 上篇说了 claude -p 单次调用。但这只是"问一句&#xff0c;答一句"。真正的威力在于把 Claude Code 串进 Unix 工具链——让它输出机…

作者头像 李华
网站建设 2026/8/31 21:15:19

日收最新泛目录程序,泛站群程序,2265下载站模板

此站群只适合做百度搜索引擎&#xff0c;其他引擎全部关闭。适用所有行业关键字&#xff0c;全站泛解析泛目录玩法。新D58SEO内核部分域名能做到日收&#xff0c;域名的挑选技巧&#xff0c;卖我程序我都会教&#xff0c;盗版的只有程序1&#xff1a;此为官方版本二开&#xff…

作者头像 李华
网站建设 2026/8/31 21:14:44

从零开始理解博弈搜索:AI下棋的决策密码

从零开始理解博弈搜索&#xff1a;AI下棋的决策密码当你和AI下棋时&#xff0c;它到底在“想”什么&#xff1f;一、先搞清楚三个前提&#xff1a;什么样的游戏能用这套方法&#xff1f; 在讲具体算法之前&#xff0c;得先弄清楚一个前提——极小化极大算法不是万能的&#xff…

作者头像 李华