数据库联邦
数据库联邦怎样统一访问多个数据源?
- 数据库联邦: 在多个自治数据源之上提供统一逻辑视图,使调用方可以通过共同接口访问数据;
- 联邦模式: 描述不同源之间的共同结构和映射,把查询拆解并转换到各自的数据接口;
- 异构来源: 底层可以使用不同 DBMS、数据模型、硬件或协议,联邦层负责适配差异;
- 使用体验: 调用方不必逐个了解数据实际存放位置,但底层性能和故障仍会影响结果;
调用方 → 联邦查询层 → 用户库
→ 订单库
→ 其他数据源
合并结果 ← 各来源返回
联邦系统需要维护哪些性质?
| 性质 | 对使用者的意义 |
|---|---|
| 透明性 | 隐藏位置和接口差异 |
| 异构性 | 支持不同数据模型和协议 |
| 可扩展性 | 新来源能够接入共同视图 |
| 自治性 | 来源保有自身管理边界 |
| 集成能力 | 把分散数据组合成可用结果 |
- 适用条件: 数据分属不同系统或团队,无法直接集中搬迁,却需要统一查询或共享;
- 收益: 减少应用直接耦合遗留数据库的方式,保留各来源的独立管理;
数据库联邦与按业务分库有什么区别?
- 业务分库: 按功能把用户、订单等数据拆到不同数据库,主要解决责任和容量边界;
- 联邦访问: 进一步提供跨这些来源的统一逻辑视图,不是只要分库就自动形成联邦系统;
- 原文用词: 原文把 federation 与 functional partitioning 并列使用,这里区分数据拆分和统一查询两个层面;
- 与分片区别: 分片通常把同类数据按键拆开,业务分库按不同功能拆开;
跨来源查询会付出什么代价?
- 联接代价: 需要从不同来源取数并组合,网络和中间结果可能成为主要瓶颈;
- 优化难点: 各来源索引、统计和执行能力不同,联邦层难以像单库一样精确控制计划;
- 故障依赖: 某个自治数据源不可用或改变接口,可能影响整个统一查询;
- 运维成本: 适配器、权限映射、硬件与版本兼容增加复杂度,不应为一个简单单库问题先引入联邦;