返回

TiKV 代码流程大揭秘:彻底搞懂分布式 Key-Value 数据库内部世界

闲谈

TiKV 数据操作流程:深入解析读写事务和索引

数据写入流程

想象一下 TiKV 集群就像一个图书馆,你的数据就是珍贵的书籍。当你想添加一本书(写操作)时,你需要经历以下步骤:

  1. 提交请求: 你向图书馆员(TiKV 客户端)发送一封请求,其中包含你要添加的书的详细信息和位置。
  2. 接收请求: 图书馆员收到你的请求,并将其送到负责该书所在书架(Region)的管理员那里。
  3. 处理请求: 管理员检查你的书是否合法,并把它交给负责该书架的书架管理员(副本)。
  4. 写入数据: 书架管理员将书放在你的指定书架上。
  5. 同步副本: 管理员将写入请求发送给图书馆的总管理员(Leader 副本),Leader 副本将该请求写入图书馆日志(Raft Log)。
  6. 复制日志: 其他书架管理员从 Leader 副本复制日志,并将书也放在各自的书架上。

数据读取流程

如果你想从图书馆借书(读操作),步骤如下:

  1. 提交请求: 你向图书馆员发送一封请求,其中包含你要借的书的详细信息。
  2. 接收请求: 图书馆员收到你的请求,并将其送到负责该书的管理员那里。
  3. 处理请求: 管理员检查你的书是否在你指定的书架上,并把它交给负责该书架的书架管理员。
  4. 读取数据: 书架管理员从书架上取下书,并将其交给你。
  5. 同步副本: 书架管理员将读取请求发送给总管理员,总管理员将结果返回给你。

事务处理流程

事务就像一系列操作,比如借书、还书,你需要确保它们一次性完成。TiKV 的事务处理流程如下:

  1. 启动事务: 你向图书馆员发送一封请求,其中包含你要执行的借书或还书操作。
  2. 接收请求: 图书馆员收到你的请求,并将其送到负责该书的管理员那里。
  3. 处理请求: 管理员检查你的操作是否合法,并将其写入图书馆日志。
  4. 同步日志: 管理员将事务请求发送给总管理员,总管理员将该请求写入图书馆日志。
  5. 复制日志: 其他书架管理员从总管理员复制日志,并将其写入各自的日志中。
  6. 提交事务: 你向图书馆员发送一封请求,要求提交你的事务。
  7. 处理请求: 图书馆员检查你的事务是否有效,并将其提交到图书馆日志。
  8. 同步日志: 管理员将事务提交请求发送给总管理员,总管理员将该请求写入图书馆日志。
  9. 复制日志: 其他书架管理员从总管理员复制日志,并将其写入各自的日志中。
  10. 事务完成: 事务提交成功,你可以获得确认。

索引流程

索引就像图书馆的目录,它可以帮助你快速找到所需的书。TiKV 的索引处理流程如下:

  1. 提交请求: 你向图书馆员发送一封请求,其中包含你要查询的索引。
  2. 接收请求: 图书馆员收到你的请求,并将其送到负责该索引的管理员那里。
  3. 处理请求: 管理员检查索引是否有效,并将其提供给你。
  4. 读取索引: 管理员从目录中找到索引,并将其交给你。

代码示例

// 写入数据
PutRequest putRequest = PutRequest.of(table, key, value);
client.put(putRequest);

// 读取数据
GetRequest getRequest = GetRequest.of(table, key);
GetResponse getResponse = client.get(getRequest);
// 启动事务
BeginTransactionRequest beginTransactionRequest = BeginTransactionRequest.of();
BeginTransactionResponse beginTransactionResponse = client.beginTransaction(beginTransactionRequest);

// 提交事务
CommitRequest commitRequest = CommitRequest.of(beginTransactionResponse.getStartVersion());
client.commit(commitRequest);

常见问题解答

  1. TiKV 使用什么协议进行通信?
    TiKV 使用 Raft 协议进行集群内通信,并使用 gRPC 协议与客户端通信。

  2. TiKV 的一致性模型是什么?
    TiKV 使用 Raft 协议保证线性一致性。

  3. TiKV 如何处理分区故障?
    TiKV 使用 Raft 协议处理分区故障,该协议允许集群即使在少数副本故障的情况下也能继续运行。

  4. TiKV 如何扩展容量?
    TiKV 可以通过水平扩展来扩展容量,即向集群中添加更多节点。

  5. TiKV 的性能如何?
    TiKV 具有高吞吐量和低延迟,非常适合处理海量数据的工作负载。