One Size Fits All
关系数据库和 SQL 试图覆盖大多数数据管理与事务需求
从数据表达、事务一致性和扩展方式理解不同系统路线
关系扩展和数据库路线取决于负载、模型与系统取舍
新的负载和数据形态暴露了单一关系系统的边界

| 扩展方向 | 新压力 | 主要扩展 | 保留能力与代价 |
|---|---|---|---|
| 数据仓库 | OLTP 与 OLAP 互相干扰 | ETL/ELT 后按主题组织历史、集成数据 | 保留关系基础,但存在数据延迟和额外处理链 |
| 面向对象/对象关系 | 复杂对象、用户自定义类型和操作 | 在关系与 SQL 基础上扩展对象表达 | 保留事务和工具链,但实现与语言更复杂 |
| XML | 半结构化交换与异构集成 | 树状、自描述数据表达 | 便于跨系统交换,但查询和约束语义需要额外机制 |
不同负载需要不同模型、接口和一致性取舍
关系数据库和 SQL 试图覆盖大多数数据管理与事务需求
分析、复杂对象、半结构化数据、海量和分布式负载暴露单一系统的边界
SQL、NoSQL、NewSQL 与数据仓库在不同负载中共存并相互借鉴
可以按负载组合互补系统:订单与库存采用关系型 SQL,历史报表进入数据仓库,结构变化快或高吞吐的访问再评估其他路线
在正确配置事务、约束和隔离级别的前提下,订单与库存更新可保持清晰边界
关系模式和完整性约束使数据结构与可接受状态更明确
SQL 表达目标,不要求用户直接写出物理访问路径
ACID、并发控制与恢复支持订单和库存的整体更新
原子性要求全做或全不做;一致性要求状态变化保持完整性约束;隔离性避免并发事务看到未定义的中间状态;持久性要求提交后故障恢复仍能保留结果
具体保证取决于事务边界、隔离级别和系统配置,跨节点协调可能增加扩展成本
典型系统在柔性、吞吐、可用性与一致性之间做不同组合
| 概念 | 解决的问题 | 得到什么 | 代价或边界 |
|---|---|---|---|
| 数据模型 | 键值、宽表、文档、图 | 针对结构与访问模式提供选择 | 不同模型的关系语义和接口不统一 |
| 分片 | 把数据分到多个节点 | 扩大容量、并行处理和横向扩展 | 跨分片查询和事务需要协调 |
| 副本 | 同一分片保存多份 | 提高节点故障下的可用性,也可能支持读扩展 | 同步带来通信和一致性成本 |
| BASE 与最终一致性 | 部分系统放宽即时一致性 | 换取特定负载下的可用性或吞吐;更新停止后副本可能收敛 | BASE 不是所有 NoSQL 的统一契约,也不等于没有一致性 |
| 查询与事务 | NoSQL 仍可提供查询和局部事务 | 由具体系统定义灵活边界 | 跨分片事务和全局关系语义可能受限 |
| 模式 | 模式较柔性,更多语义由应用解释 | 快速适应结构变化 | 数据质量由系统、应用和管道共同维护 |
分片解决数据如何分布和扩展,副本解决节点故障下如何继续服务;最终一致性描述副本传播过程,不等于 BASE 适用于所有系统
它是多种系统路线的共同目标,不是单一产品或固定实现
SQL 接口、关系语义和事务开发接口
分片、多副本、横向扩展和分布式事务
跨节点协调、延迟、故障处理、运维复杂度和一致性实现成本
NewSQL 的目标需要共识、分片、动态迁移和云原生支撑,具体机制会增加协调与运维成本
先描述负载、事务范围、模式和一致性,再判断扩展方式与代价
| 路线 | 模型与接口 | 一致性/事务 | 扩展方式 | 典型负载与边界 |
|---|---|---|---|---|
| 关系型 SQL | 关系模式、SQL、完整性约束 | 通常强调 ACID | 传统扩展或特定分布式方案 | 精细事务;极大规模扩展可能成本较高 |
| NoSQL | 键值、宽表、文档、图等 | 取舍多样,部分系统采用 BASE | 分片和副本 | 海量、柔性或高吞吐负载;跨分片语义可能复杂 |
| NewSQL | 关系模型和 SQL | 目标是保留分布式事务语义 | 分片、多副本、横向扩展 | 跨节点关系事务;协调和运维成本更高 |
一种可能的系统分工是:订单与库存先检查 ACID 和完整性约束;零部件目录与缓存先检查模型柔性、吞吐和横向扩展;历史报表先检查 OLAP 与数据仓库分工
系统分工取决于负载和约束,不能仅按业务名称固定选择
同一组织可以组合多条数据库路线,先描述负载和约束再判断代价
OLTP 与分析分工;对象关系和 XML 扩展数据表达
关系模式、SQL 和 ACID 适合边界清晰的精细事务
NoSQL 以柔性模型、分片和副本应对特定负载;NewSQL 尝试保留 SQL 事务并扩展到分布式节点
先看数据模型和负载,再看事务与一致性,最后判断分片、副本和横向扩展需求