CodeIgniter支持多数据库连接以解决实际业务需求。典型场景包括:①读写分离缓解主库压力;②SaaS租户或电商模块的数据物理隔离;③对接遗留系统实现只读同步;④开发/测试环境混合连接不同数据源。

CodeIgniter 连接多个数据库,不是为了“炫技”,而是解决实际业务中数据隔离、性能优化或系统整合的真实需求。以下几类典型场景最常触发多库配置:
读写分离降低主库压力
当应用用户量增长、查询频繁但写入相对集中时,把读操作(如列表页、详情页、统计报表)分发到从库,写操作(如提交表单、更新状态)保留在主库,能显著缓解单点瓶颈。CI 中只需配置 default(主库,写) 和 slave(从库,读) 两组连接,在模型里按需加载:
- 写操作用
$this->db->insert()(自动走 default) - 读操作显式调用
$slave = $this->load->database('slave', TRUE); $slave->get('orders');
业务模块数据物理隔离
例如 SaaS 系统中,不同租户使用独立数据库;或电商后台中,订单库、用户库、商品库由不同团队维护、部署在不同服务器。这时每个库有自己账号、权限、备份策略。CI 的多组配置天然支持这种拆分,避免跨库 JOIN,也便于后期迁移或扩容。
遗留系统对接与数据同步
新系统上线后需临时读取老系统的数据(比如历史会员积分、旧订单记录),而老库结构不兼容、不能改表、甚至运行在另一套技术栈上。此时可新增一个 legacy 数据库组,只读取、不写入,通过模型封装转换逻辑,平滑过渡。
开发/测试/生产环境差异化配置
虽然通常用 $active_group 切换环境,但有些项目要求测试环境同时连测试库 + 模拟支付网关的沙箱库,或本地开发时连接 Docker 中的 MySQL + Redis(虽 Redis 不是 DB,但类似思路)。多组配置让这类混合连接变得清晰可控,而非硬编码或临时 patch。
本质上,只要存在“同一请求需访问逻辑或物理上分离的数据源”,且这些数据源不宜或无法通过视图、FEDERATED 表、或中间服务聚合,就适合在 CI 中配置多个数据库组。关键不在数量,而在职责分明、切换明确、维护简单。


















