Masutangu

长风破浪会有时 直挂云帆济沧海

也許我這一生 始終在追逐那顆九號球


TiKV 源码阅读(未完成)

TiKV 使用 RocksDB 做持久化存储引擎。将 key 分 range,每一段称为 Region。Region 分散在多台机器上以实现存储的水平扩展。每个 Region 会存放多个副本在不同机器上,使用 raft 算法管理:

PD 负责整个 TiKV 集群的调度。

TiKV 使用 version 的方式进行多版本控制(MVCC):

Key1-Version3 -> Value
Key1-Version2 -> Value
Key1-Version1 -> Value
...
Key2-Version2 -> Value
Key2-Version1 -> Value
...

TiKV 事务使用 Percolator 模型。采用乐观锁,事务提交才进行冲突检测。

https://zhuanlan.zhihu.com/p/24564094 https://pingcap.com/blog-cn/tidb-internal-1/

最近的文章

Designing Data-Intensive Applications 读书笔记(一)

Chapter 1. Reliable, Scalable, and Maintainable ApplicationsThinking About Data SystemsIncreasingly many applications now have such demanding or wide-ranging requirements that a single tool can no longer meet all of its data processing and storage...…

源码阅读继续阅读
更早的文章

raft-rust 初体验

之前分析了使用 golang 实现的 etcd-raft,这几天再读了下 rust 实现的 raft-rs,简单说下对比。rust 版应该是基于 golang 版来实现的,所有的类、方法基本上是一致的。从样例看起,let (sender, receiver) = mpsc::channel(); 创建了 channel 用于线程之间数据传递(类似 golang 的 channel)。调用 send_propose 创建一个线程,通过 sender 发送 propose 请求。main 主线...…

源码阅读继续阅读