TiKV 是一个分布式的事务性键值存储引擎,被广泛应用于分布式数据库 TiDB 中。在 TiDB 中,TiKV 负责存储和处理大规模数据,并提供高性能的读写操作。本文将详细解析 TiKV 的数据存取机制,并通过示例源代码进行说明。
-
数据存储结构
TiKV 使用了一种类似于 Google 的 Bigtable 的数据模型,将数据存储在分布式的 Region 中。每个 Region 负责存储一个连续的 Key 范围,并拥有一个唯一的 Region ID。Region 可以根据数据量的变化进行自动拆分和合并,以实现负载均衡和数据的自动扩缩容。 -
数据分布与调度
在 TiKV 集群中,数据分布是基于 Raft 一致性算法实现的。每个 Region 都有一个 Leader 和多个 Follower。Leader 负责处理读写请求,而 Follower 则负责复制 Leader 的数据以实现数据的冗余和容错。
当客户端发送读写请求时,TiKV 首先根据请求的 Key 找到对应的 Region。如果该 Region 的 Leader 所在的节点不是当前请求所在节点,那么请求将被转发到 Leader 所在的节点上。Leader 节点负责处理请求,并将结果返回给客户端。
- 读取数据流程
当客户端发送读取请求时,TiKV 的读取流程如下:
- 客户端发送读请求到 TiKV 节点。
- TiKV 节点根据请求的 Key 定位到对应的 Region,并判断该 Region 的 Leader 所在节点。
- 如果 Leader 所在节点与当前节点不同,将请求转发给 Leader 节点。
- Leader 节点从其本地存储中读取数据,并返回给客户端。
以下是一个示例的 TiKV