云原生数据库实战:TiDB与CockroachDB对比选型与落地实践
大家好,我是迪哥。云原生数据库是云原生时代的核心组件,从 TiDB 到 CockroachDB,从分布式到多活,我们经历了多种方案的演进。今天就聊聊云原生数据库的选型和落地经验。
云原生数据库对比
| 方案 | 适用场景 | 特点 |
|---|---|---|
| TiDB | 分布式事务 | 强一致,支持 SQL |
| CockroachDB | 全球分布式 | 多活,强一致 |
| Vitess | MySQL 兼容 | 水平扩展 |
| Spanner | 企业级 | 谷歌技术 |
TiDB 实战
架构
┌─────────────────────────────────────────────────────────────┐
│ TiDB │
├─────────────────────────────────────────────────────────────┤
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ TiDB │ │ PD │ │ TiKV │ │
│ │ SQL层 │ │ 调度层 │ │ 存储层 │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ └─────────────────┴─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
部署配置
yaml
apiVersion: pingcap.com/v1alpha1
kind: TidbCluster
metadata:
name: basic
spec:
version: v6.5.0
timezone: UTC
tikv:
replicas: 3
storageClaims:
- resources:
requests:
storage: 100Gi
tidb:
replicas: 2
使用示例
java
@Service
public class OrderService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Transactional
public void createOrder(Order order) {
jdbcTemplate.update(
"INSERT INTO orders (id, user_id, amount) VALUES (?, ?, ?)",
order.getId(), order.getUserId(), order.getAmount()
);
}
}
CockroachDB 实战
部署配置
yaml
apiVersion: crdb.io/v1alpha1
kind: CrdbCluster
metadata:
name: cockroachdb
spec:
dataStore:
pvc:
spec:
resources:
requests:
storage: 100Gi
nodes: 3
tls:
enabled: true
使用示例
java
@Service
public class UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public User getUser(Long userId) {
return jdbcTemplate.queryForObject(
"SELECT * FROM users WHERE id = ?",
new Object[]{userId},
(rs, rowNum) -> new User(
rs.getLong("id"),
rs.getString("name"),
rs.getString("email")
)
);
}
}
对比选型
| 维度 | TiDB | CockroachDB |
|---|---|---|
| 一致性 | 强一致 | 强一致 |
| 分布式事务 | 支持 | 支持 |
| 多活 | 支持 | 更好的支持 |
| 生态 | 完善 | 正在发展 |
| 适用场景 | 国内企业 | 全球化企业 |
最佳实践清单
| 维度 | 最佳实践 |
|---|---|
| 选型 | 国内用 TiDB,全球化用 CockroachDB |
| 部署 | 至少 3 副本 |
| 备份 | 定期备份,测试恢复 |
| 监控 | 集成 Prometheus |
| 性能 | 合理分片,读写分离 |
说到云原生数据库,我家那只叫 Docker 的哈士奇最近学会了"分布式存储"------把玩具藏到家里各个角落,说是这样更安全,这存储策略比我们的 TiDB 还强 😂
我是迪哥,我们下期再见!