Recipe:Multiple Data Sources
- 官方来源:
examples/recipes/multiple-data-sources - 核对日期:2026-05-22
这个示例解决什么问题
如何根据不同租户,把同一套查询路由到不同数据库连接。
官方示例的核心做法
示例在 cube.js 中定义:
contextToAppId:按租户生成独立缓存键;driverFactory:根据securityContext.tenant返回不同 PostgresDriver。
示例中:
Avocado Inc→ 本地 PostgresMango Inc→ 另一个远端 Postgres
这说明了什么
1. 多租户不只是行级过滤,还可能是物理数据源隔离
很多 SaaS 场景中,不同客户根本不在同一个数据库里。
2. Cube 可以把“路由到哪个数据库”变成运行时决策
而不是让上游应用自己维护一大堆分支。
3. 缓存隔离必须和数据源路由一起考虑
示例里 contextToAppId 很关键,否则不同租户缓存可能串味。
适合迁移的业务场景
- 大客户单独数据库;
- 海外 / 国内分区库;
- 按环境或业务线拆库;
- 新旧系统并存阶段的兼容访问。
实战建议
- 先确定租户标识如何进入
securityContext; - 设计好 driverFactory 的错误处理;
- 同时考虑缓存键、刷新任务、监控维度;
- 不要把“多数据源”与“多 schema”混为一谈。
和教程哪章搭配最好
一句话总结
这个 recipe 的核心价值是:展示 Cube 如何把“按租户切换数据库连接”纳入统一语义层运行时,而不是把路由逻辑散落到应用代码中。