CockroachDB简介 #
一、什么是CockroachDB #
1.1 数据库演进历程 #
text
传统数据库时代
├── 单机数据库 (MySQL, PostgreSQL)
│ └── 问题: 扩展困难, 单点故障
│
├── 中间件分库分表
│ └── 问题: 运维复杂, 跨库事务难
│
└── NoSQL时代
└── 问题: 不支持SQL, 弱事务
↓
NewSQL时代
└── CockroachDB: 分布式 + SQL + 事务
1.2 CockroachDB定义 #
CockroachDB 是一款开源的分布式关系型数据库,由 Cockroach Labs 公司开发。它的设计灵感来自 Google Spanner,旨在提供可扩展、高可用、强一致性的数据库服务。
| 特性 | 说明 |
|---|---|
| 分布式 | 水平扩展,无限扩容 |
| 关系型 | 完整的SQL支持 |
| 事务 | ACID事务保证 |
| PostgreSQL兼容 | 高度兼容PostgreSQL协议 |
| 开源 | BSL (Business Source License) |
1.3 CockroachDB定位 #
text
┌─────────────────────────────────────────────────────┐
│ CockroachDB 定位 │
├─────────────────────────────────────────────────────┤
│ ✓ 关系型数据库 - 完整SQL支持 │
│ ✓ 分布式数据库 - 水平扩展能力 │
│ ✓ NewSQL数据库 - 分布式+SQL+事务 │
│ ✓ 云原生数据库 - 设计之初即为云原生 │
└─────────────────────────────────────────────────────┘
二、CockroachDB发展历史 #
2.1 诞生背景 #
text
2012年 Google Spanner论文发布
↓
2014年 Cockroach Labs成立
↓
2015年 CockroachDB 开源
↓
2017年 CockroachDB 1.0 GA发布
↓
2018年 CockroachDB 2.0 发布
↓
2019年 CockroachDB 19.1 发布
↓
2020年 CockroachDB 20.1 发布
↓
2021年 CockroachDB 21.1 发布
↓
2022年 CockroachDB 22.1 发布
↓
2023年 CockroachDB 23.1 发布
↓
至今 持续迭代演进
2.2 版本特性 #
| 版本 | 年份 | 主要特性 |
|---|---|---|
| 1.0 | 2017 | 基础分布式事务 |
| 2.0 | 2018 | 改进性能,支持JSON |
| 19.1 | 2019 | 分布式备份恢复 |
| 20.1 | 2020 | 改进查询优化器 |
| 21.1 | 2021 | 区域级放置策略 |
| 22.1 | 2022 | 多区域能力增强 |
| 23.1 | 2023 | 性能优化,新SQL特性 |
2.3 开源生态 #
| 项目 | 说明 |
|---|---|
| CockroachDB Core | 核心数据库 |
| CockroachDB Cloud | 云服务版本 |
| CockroachDB Operator | Kubernetes部署 |
| cockroachdb-jdbc | Java驱动 |
| pgx | Go驱动 (兼容) |
三、CockroachDB核心特点 #
3.1 水平扩展 #
sql
-- 传统数据库扩展困难
-- 单机PostgreSQL: 数据量受限于单机存储
-- CockroachDB 水平扩展
-- 添加节点即可线性扩展容量和性能
text
扩展前:
┌─────────────────┐
│ CockroachDB │
│ 3 Nodes │
│ Capacity: 3TB │
└─────────────────┘
扩展后:
┌─────────────────────────────┐
│ CockroachDB │
│ 6 Nodes │
│ Capacity: 6TB │
│ Performance: 2x │
└─────────────────────────────┘
3.2 高可用架构 #
text
┌─────────────────────────────────────────────────────────────┐
│ 高可用设计 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Node 1 │ │ Node 2 │ │ Node 3 │ 对等节点 │
│ │ (Range 1)│ │ (Range 2)│ │ (Range 3)│ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │ │ │ │
│ └──────────────┼──────────────┘ │
│ │ │
│ Raft 共识协议 │
│ 自动故障恢复 │
│ │
└─────────────────────────────────────────────────────────────┘
3.3 ACID事务 #
sql
-- CockroachDB 完整支持 ACID 事务
BEGIN;
-- 原子性: 全部成功或全部失败
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 一致性: 数据约束保证
-- 隔离性: 支持多种隔离级别
-- 持久性: Raft 日志持久化
COMMIT;
3.4 PostgreSQL兼容 #
sql
-- CockroachDB 高度兼容 PostgreSQL 协议
-- 连接方式与 PostgreSQL 相同
psql -h 127.0.0.1 -p 26257 -u root -d defaultdb
-- 标准 SQL 语法
SELECT * FROM users WHERE id = 1;
-- JOIN 查询
SELECT u.name, o.order_no
FROM users u
JOIN orders o ON u.id = o.user_id;
-- 聚合函数
SELECT COUNT(*), AVG(amount) FROM orders;
-- 窗口函数
SELECT
id,
amount,
ROW_NUMBER() OVER (ORDER BY amount DESC) AS rank
FROM orders;
3.5 云原生设计 #
text
┌─────────────────────────────────────────────────────────────┐
│ 云原生架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 设计理念: │
│ ├── 容器化部署友好 │
│ ├── Kubernetes原生支持 │
│ ├── 自动故障恢复 │
│ ├── 弹性伸缩 │
│ └── 多区域部署 │
│ │
│ 部署方式: │
│ ├── 本地单节点 (开发测试) │
│ ├── 本地多节点 (测试) │
│ ├── 生产集群 (自托管) │
│ ├── Kubernetes (云原生) │
│ └── CockroachDB Cloud (托管服务) │
│ │
└─────────────────────────────────────────────────────────────┘
四、CockroachDB应用场景 #
4.1 适用场景 #
1. 海量数据存储
sql
-- 单表数据量超过 PostgreSQL 单机限制
-- CockroachDB 支持单表 PB 级数据
CREATE TABLE logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id BIGINT,
action VARCHAR(100),
created_at TIMESTAMP DEFAULT NOW(),
details JSONB
);
2. 高并发写入
text
写入场景:
├── 订单系统
├── 日志采集
├── IoT数据
└── 消息存储
3. 多区域部署
sql
-- 跨区域数据放置
-- 降低延迟,满足合规要求
ALTER DATABASE app
CONFIGURE ZONE USING
constraints = '[+region=us-east]';
4. 金融级事务
sql
-- 强一致性事务保证
-- 适合金融、支付场景
BEGIN;
-- 转账操作
UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
UPDATE accounts SET balance = balance + 1000 WHERE id = 2;
COMMIT;
4.2 行业案例 #
| 行业 | 客户 | 应用场景 |
|---|---|---|
| 金融 | Bose | 支付系统 |
| 电商 | Wayfair | 商品数据 |
| 游戏 | Electronic Arts | 游戏数据 |
| 物联网 | Comcast | 设备数据 |
| 内容 | Medium | 内容存储 |
4.3 不适用场景 #
| 场景 | 原因 | 建议 |
|---|---|---|
| 小数据量 | 杀鸡用牛刀 | 使用 PostgreSQL |
| 极低延迟 | 分布式有网络开销 | 使用内存数据库 |
| 复杂存储过程 | 存储过程支持有限 | 应用层实现 |
| 大量JOIN | 分布式JOIN开销大 | 反范式设计 |
五、CockroachDB vs 其他数据库 #
5.1 与PostgreSQL对比 #
| 特性 | PostgreSQL | CockroachDB |
|---|---|---|
| 扩展方式 | 垂直扩展 | 水平扩展 |
| 数据量 | 单机限制 | PB级 |
| 高可用 | 主从复制 | Raft多副本 |
| 事务 | 支持 | 分布式事务 |
| 学习成本 | 低 | 中等 |
| 运维成本 | 低 | 中等 |
5.2 与MongoDB对比 #
| 特性 | MongoDB | CockroachDB |
|---|---|---|
| 数据模型 | 文档型 | 关系型 |
| SQL支持 | 有限 | 完整 |
| 事务 | 4.0+支持 | 原生支持 |
| Join | 有限支持 | 完整支持 |
| Schema | 灵活 | 固定 |
5.3 与TiDB对比 #
| 特性 | TiDB | CockroachDB |
|---|---|---|
| 协议兼容 | MySQL | PostgreSQL |
| 存储引擎 | TiKV (RocksDB) | Pebble (RocksDB-like) |
| 分析能力 | TiFlash HTAP | 较弱 |
| 社区活跃度 | 活跃 | 活跃 |
| 开源协议 | Apache 2.0 | BSL |
六、CockroachDB架构概览 #
6.1 整体架构 #
text
┌─────────────────────────────────────────────────────────────┐
│ 应用层 │
│ PostgreSQL Client / ORM / Application │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ SQL层 │
│ SQL解析 → 优化器 → 执行器 → 分布式执行 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 事务层 │
│ 事务协调 / 并发控制 / 时间戳 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 分布式层 │
│ Range / Raft / 副本管理 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 存储层 │
│ Pebble (LSM-Tree) / MVCC │
└─────────────────────────────────────────────────────────────┘
6.2 组件职责 #
| 组件 | 职责 |
|---|---|
| SQL层 | SQL解析、优化、执行 |
| 事务层 | 事务管理、并发控制 |
| 分布式层 | 数据分片、副本管理 |
| 存储层 | 数据持久化、MVCC |
七、为什么学习CockroachDB #
7.1 市场需求 #
text
分布式数据库技能需求增长趋势
┌─────────────────────────────────┐
│ 2024年 │
│ CockroachDB ████████ 增长30% │
│ TiDB ████████████ 增长40% │
│ PolarDB ██████ 增长25% │
└─────────────────────────────────┘
7.2 学习价值 #
1. 技能成长
text
CockroachDB学习路径
├── 分布式系统原理
│ ├── Raft共识算法
│ ├── 分布式事务
│ └── 分布式存储
├── 数据库内核
│ ├── SQL优化器
│ ├── 执行引擎
│ └── 存储引擎
└── 运维实践
├── 集群部署
├── 性能调优
└── 故障排查
2. 职业发展
| 职位 | CockroachDB技能要求 |
|---|---|
| 后端开发 | 熟练使用 |
| DBA | 精通运维 |
| 架构师 | 精通设计 |
| 数据工程师 | 熟练ETL |
7.3 学习路线 #
text
入门阶段 (1-2周)
├── CockroachDB简介
├── 安装部署
├── 基础SQL
└── 架构理解
进阶阶段 (2-4周)
├── 分布式事务
├── 索引优化
├── 数据迁移
└── 监控运维
高级阶段 (1-3月)
├── 性能调优
├── 高可用设计
├── 源码理解
└── 故障排查
八、学习资源 #
8.1 官方资源 #
| 资源 | 地址 |
|---|---|
| 官方文档 | https://www.cockroachlabs.com/docs/ |
| 官方网站 | https://www.cockroachlabs.com/ |
| GitHub | https://github.com/cockroachdb/cockroach |
| 社区论坛 | https://forum.cockroachlabs.com/ |
8.2 学习建议 #
- 动手实践:搭建测试集群,多写SQL
- 理解原理:学习分布式系统基础
- 阅读源码:深入理解实现细节
- 参与社区:提问、回答、贡献代码
九、总结 #
CockroachDB核心优势:
| 优势 | 说明 |
|---|---|
| 水平扩展 | 线性扩展,无限容量 |
| 高可用 | Raft协议,自动故障恢复 |
| PostgreSQL兼容 | 无缝迁移,学习成本低 |
| 云原生 | 设计之初即为云原生 |
| 强一致 | ACID事务保证 |
下一步,让我们开始安装部署CockroachDB!
最后更新:2026-03-27