【TiKV / HTAP 内核】CockroachDB 对照:Range + Raft 的另一种落地
内容提要
本文对比了TiKV与CockroachDB的架构差异。两者均基于Raft协议,但在角色划分、事务提交协议和部署形态上有所不同。CockroachDB引入了Leaseholder角色,采用Parallel Commits优化事务提交,而TiKV使用Percolator模型。TiKV的默认隔离级别为快照隔离,CockroachDB为可串行化。TiKV为分离式组件,CockroachDB为单进程一体化,运维和扩展方式各异。
关键要点
-
TiKV与CockroachDB都基于Raft协议,但在角色划分、事务提交协议和部署形态上有所不同。
-
CockroachDB引入了Leaseholder角色,TiKV没有将Raft leader和租约角色分开。
-
TiKV使用Percolator模型进行事务处理,而CockroachDB采用Parallel Commits优化事务提交。
-
TiKV的默认隔离级别为快照隔离(Snapshot Isolation),而CockroachDB为可串行化(Serializable)。
-
TiKV为分离式组件,包含TiDB、TiKV和PD三个独立进程;CockroachDB为单进程一体化,所有组件在同一进程中运行。
-
TiKV的时间戳由PD的TSO集中分配,CockroachDB使用混合逻辑时钟(HLC)生成时间戳。
-
TiKV的陈旧读机制依赖于safe-ts,而CockroachDB使用Closed Timestamps来保证一致性读。
延伸解读
架构选择的影响
TiKV和CockroachDB在架构设计上有显著差异,TiKV采用分离式组件架构,而CockroachDB则是单进程一体化。这种选择影响了运维的复杂性和扩展的灵活性。TiKV的分离式设计允许独立扩展各个组件,但可能导致运维管理的复杂性增加;而CockroachDB的单进程设计简化了运维,但在资源分配上可能存在耦合问题。
事务模型的比较
TiKV使用Percolator模型进行事务处理,而CockroachDB则采用Parallel Commits。这两种模型在事务提交的效率和复杂性上有所不同。TiKV的两阶段提交可能在高并发场景下表现出延迟,而CockroachDB通过压缩提交路径来提高性能。开发者在选择时需考虑具体业务场景对事务处理效率的要求。
隔离级别的选择
TiKV默认提供快照隔离(Snapshot Isolation),而CockroachDB则默认使用可串行化隔离(Serializable)。这意味着在并发事务处理时,CockroachDB能更好地防止写偏斜等问题,但可能导致更高的事务重试率。开发者需要根据业务需求选择合适的隔离级别,以平衡性能和数据一致性。
延伸问答
TiKV和CockroachDB的主要架构差异是什么?
TiKV和CockroachDB都基于Raft协议,但在角色划分、事务提交协议和部署形态上有所不同。CockroachDB引入了Leaseholder角色,而TiKV没有将Raft leader和租约角色分开。
TiKV和CockroachDB的事务提交协议有什么不同?
TiKV使用Percolator模型进行事务处理,而CockroachDB采用Parallel Commits优化事务提交,后者将提交延迟压缩到接近一轮共识。
TiKV和CockroachDB的默认隔离级别是什么?
TiKV的默认隔离级别为快照隔离(Snapshot Isolation),而CockroachDB的默认隔离级别为可串行化(Serializable)。
TiKV和CockroachDB在时间戳生成上有什么区别?
TiKV的时间戳由PD的TSO集中分配,而CockroachDB使用混合逻辑时钟(HLC)生成时间戳。
TiKV和CockroachDB的部署形态有什么不同?
TiKV为分离式组件,包含TiDB、TiKV和PD三个独立进程;而CockroachDB为单进程一体化,所有组件在同一进程中运行。
TiKV和CockroachDB的陈旧读机制有什么不同?
TiKV的陈旧读机制依赖于safe-ts,而CockroachDB使用Closed Timestamps来保证一致性读。