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 学习建议 #

  1. 动手实践:搭建测试集群,多写SQL
  2. 理解原理:学习分布式系统基础
  3. 阅读源码:深入理解实现细节
  4. 参与社区:提问、回答、贡献代码

九、总结 #

CockroachDB核心优势:

优势 说明
水平扩展 线性扩展,无限容量
高可用 Raft协议,自动故障恢复
PostgreSQL兼容 无缝迁移,学习成本低
云原生 设计之初即为云原生
强一致 ACID事务保证

下一步,让我们开始安装部署CockroachDB!

最后更新:2026-03-27