云原生数据库实战TiDB与CockroachDB对比选型与落地实践大家好我是迪哥。云原生数据库是云原生时代的核心组件从 TiDB 到 CockroachDB从分布式到多活我们经历了多种方案的演进。今天就聊聊云原生数据库的选型和落地经验。云原生数据库对比方案适用场景特点TiDB分布式事务强一致支持 SQLCockroachDB全球分布式多活强一致VitessMySQL 兼容水平扩展Spanner企业级谷歌技术TiDB 实战架构┌─────────────────────────────────────────────────────────────┐ │ TiDB │ ├─────────────────────────────────────────────────────────────┤ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ TiDB │ │ PD │ │ TiKV │ │ │ │ SQL层 │ │ 调度层 │ │ 存储层 │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ └─────────────────┴─────────────────┘ │ └─────────────────────────────────────────────────────────────┘部署配置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使用示例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 实战部署配置apiVersion: crdb.io/v1alpha1 kind: CrdbCluster metadata: name: cockroachdb spec: dataStore: pvc: spec: resources: requests: storage: 100Gi nodes: 3 tls: enabled: true使用示例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) ) ); } }对比选型维度TiDBCockroachDB一致性强一致强一致分布式事务支持支持多活支持更好的支持生态完善正在发展适用场景国内企业全球化企业最佳实践清单维度最佳实践选型国内用 TiDB全球化用 CockroachDB部署至少 3 副本备份定期备份测试恢复监控集成 Prometheus性能合理分片读写分离说到云原生数据库我家那只叫 Docker 的哈士奇最近学会了分布式存储——把玩具藏到家里各个角落说是这样更安全这存储策略比我们的 TiDB 还强 我是迪哥我们下期再见