CockroachDB-读和写

本文知识点来源于官网地址https://www.cockroachlabs.com/docs/stable/architecture/reads-and-writes-overview.html

查询执行

当CRDB执行查询时,集群将请求路由到包含相关数据的范围的Leaseholder。如果查询涉及多个范围,则请求将发送给多个Leaseholder。对于读请求,只有相关范围的Leaseholder检索数据。对于写请求,Raft共识协议规定,在提交写请求之前,相关范围的大部分副本必须一致。

读场景

假设场景:

  • 集群中有3个节点
  • 有3个小表,每一个都对应一个range
  • ranges默认有3个副本
  • 在节点2上执行查询,从表3读取数据
    在这里插入图片描述
    在这个例子中:
  • 节点2(网关节点)接收从表3读取的请求。
  • 表3的Leaseholder位于节点3上,因此请求被路由到节点3。
  • 节点3将数据返回给节点2。
  • 节点2响应客户端。

如果查询被具有相关range的Leaseholder的节点接收,则网络跳数会减少:
在这里插入图片描述

写场景

假设一个简单的写场景,对节点3执行一个查询,写入表1:
在这里插入图片描述
在这个例子中:

  • 节点3(网关节点)接收到写入表1的请求。
  • 表1的Leaseholder位于节点1上,因此请求被路由到节点1。
  • Leaseholder是与Raft leader相同的副本,因此它同时将写操作追加到自己的Raft日志中,并通知节点2和3上的follower副本。
  • 一旦一个follower将写操作追加到它的Raft日志中(因此,基于相同的Raft日志,大多数副本都同意),它就通知leader,写操作被提交到同意的副本上的键值。在此关系图中,节点2上的follower确认了写入,但它也可能是节点3上的follower。还要注意,没有参与共识协议的追随者通常会在其他人之后很快提交写。
  • 节点1返回向节点3提交的确认。
  • 节点3响应客户端。

就像在读场景中一样,如果写请求是由拥有相关range的Leaseholder和Raft leader的节点接收的,那么网络跳数就会更少:
在这里插入图片描述

网络和I/O瓶颈

记住上面的例子,将网络延迟和磁盘I/O视为潜在的性能瓶颈总是很重要的。总而言之:
对于读取,网关节点和Leaseholder之间的跳转增加了延迟。
对于写,在网关节点和Leaseholder/Raft leader之间跳跃,以及在Leaseholder/Raft leader和Raft follower之间跳跃,增加延迟。此外,由于在提交写操作之前,Raft日志条目被持久化到磁盘,因此磁盘I/O非常重要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值