本文解释CockroachDB复制和分布特性如何影响读和写。
本文以总结某些重要的CockroachDB架构概念开始,接着,介绍几个简单的读写场景。
--注意:
1)一个查询通过CockroachDB架构各层的更多细节,请参考分布式事务的生命周期。

一.重要概念
1.集群(Cluster):CockroachDB部署,充当单个逻辑应用。
2.节点(Node):运行CockroachDB的单个机器。多个节点联合一起创建集群。
3.范围(Range):CockroachDB存储所有的用户数据(表,索引等。),以及几乎一个巨大的键值对排序映射的所有系统数据。该键空间分成"范围",键空间的连续块,以便每个键值总是能在单个范围内发现。
从SQL角度,表及其二级索引最初映射到单个范围,范围中的每个键值对代表表(也称为主键索引,因为表通过主键排序)中的一行数据,或二级索引中的一行数据。范围一达到512MiB大小,其将分成两个范围。当表和二级索引持续变大时,该过程对新范围会持续。
4.副本(Replica):CockroachDB复制每个范围(默认为三倍)且将每个副本存储到不同的节点上。
5.租约持有者(Leaseholder):对每个范围,其中一个副本持有"范围租约(range lease)"。该副本,称为"租约持有者",为接收和协调该范围上所有读写请求的副本。
不像写,读请求访问租约持有者并将结果发给客户端,而无需与其他范围副本协调。这减少了相关网络往返和可能的,因为租约持有者保证是最新的,这是由于所有写请求都会到租约持有者的事实。
6.Raft领导者(Raft Leader):对每个范围,副本之一是写请求的领导者。通过Raft共识协议,该副本确保提交写前,多数副本(领导者和足够的追随者)基于它们的Raft日志会同意。Raft领导者和租约持有者几乎总是同一个副本。
7.Raft日志(Raft log):对每个范围,是一个其副本已同意的范围的写按时间排序的日志。该日志存储于每个副本的磁盘上,且是范围一致复制的真实来源。
如上所述,当查询执行时,集群将请求路由到包含相关数据范围的租约持有者。如果查询接触多个范围,请求会到多个租约持有者。对读请求,仅相关范围的租约持有者获取数据。对写请求,Raft共识协议规定写提交前相关范围的多数副本必须达成一致。
让我们考虑一下这些机制如何在一些假设的查询中发挥作用。

二.读场景
首先,设想一个简单的读场景:
1.集群中有3个节点。
2.有3个小表,每个可以在单个范围内容纳。
3.范围被复制3次(默认)。
4.查询在节点2执行,从表3中读取数据。


该场景中:
1.节点2(网关节点)从接收从表3读取数据的请求。
2.表3的租约持有者在节点3,因此,该请求被路由到那里。
3.节点3将数据返回到节点2。
4.节点2响应客户端。
如果拥有相关范围租约持有者的节点接收到该查询,网络跳数更少:

三.写场景
现在,设想一个简单写场景,其中,查询在节点3执行,往表1写数据:


该场景中:
1.节点3(网关节点)接收往表1写数据的请求。
2.表1的租约持有者在节点1,因此,请求被路由到那里。
3.租约持有者与Raft领导者为同一副本(典型地),因此,其同时将写附加到其自己的Raft日志,并通知其节点2和节点3上的追随者副本。
4.一旦一个追随者将写附加到其Raft日志(这样,大部分副本基于同一Raft日志达成一致),其通知领导者,并将写提交到一致副本的键值。该图中,节点2上的追随者确认写,但其也可以是节点3上的追随者。也注意未涉及一致同意的追随者通常其他副本后很快提交写。
5.节点1向节点3返回提交确认。
6.节点3响应客户端。
正像读场景,如果拥有相关范围租约持有者和Raft领导者的节点接收了写请求,网络跳数更少:

四.网络和I/O瓶颈
记住上述的例子,将网络延迟和磁盘I/O认为潜在的性能瓶颈总是很重要。总之:
1.对读来说,网关节点和租约持有者间的跳数会增加延迟。
2.对写来说,网关节点和租约持有者/Raft领导者将的跳数,以及租约持有者/Raft领导者和Raft追随者间的跳数,会增加延迟。此外,由于写条件前Raft日志项目被持久化到磁盘,因此,磁盘I/O很重要。

五.个人观点
1.本文对通过特定场景对Cockroach读写机制及过程进行了详尽讲述。
2.本文对CockroachDB中各层间机制和原理的理解和掌握起到了巩固和加强作用。

CockroachDB架构——CockroachDB中的读和写相关推荐

  1. NIO入门系列之第3章:从理论到实践:NIO 中的读和写

    3.1  概述 读和写是 I/O 的基本过程.从一个通道中读取很简单:只需创建一个缓冲区,然后让通道将数据读到这个缓冲区中.写入也相当简单:创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入 ...

  2. linux中可读可写可执行权限是什么意思,linux chmod 给目录或文件赋权限 可读可写可执行...

    前提: mode权限设定字串,格式:[ugoa...][[+-=][rwxX]...][,...] 其中u表示拥有者(user),g表示与拥有者属于同一个群体(group),o表示其他以外的人(oth ...

  3. Java中输入(读)输出(写)流

    一.输入输出流 输入输出流--读写文件 输入---从文件中获取数据到自己的程序中接受处理[读] 输出---从自己的程序中处理好的数据保存在文件中[写] 流-----数据的移动轨迹 二.流的分类   按 ...

  4. c语言标准io中可读可写,C语言标准IO: [先读再feof] VS [先feof再读]

    刚学习C语言读取文件的时候,可能都遇到过这个"bug",读到末尾时数据有重复. 解决方案也是五花八门,甚至有人把数据先缓存了,再忽略掉最后一组.... 不妨看一段代码,两种解决方案 ...

  5. java文件的读和写还有使用_java中文件读和写的操作

    import java.io.*; //文件读 class FileReadTest { public static void main (String[] args) { FileReadTest ...

  6. java的poi技术读,写Excel[2003-2007,2010]

    在上一篇blog:java的poi技术读取Excel[2003-2007,2010] 中介绍了关于java中的poi技术读取excel的相关操作 读取excel和MySQL相关: java的poi技术 ...

  7. 车载ECU嵌入式设备的诊断测试 – 读和写

    作者 | 李伟 上海控安安全测评中心安全测评部总监 来源 | 鉴源实验室 引言:第四篇中我们介绍了UDS服务中的会话和安全控制,主要讲了不同模式会话间的切换逻辑,问答报文结构,安全控制的作用和等级.安 ...

  8. CockroachDB架构——事务层

    CockroachDB架构的事务层通过协调并发操作实现对ACID事务的支持. --注意: 1)如果您还没准备好,我们建议您阅读架构概览部分. 一.概览 CockroachDB认为一致性是数据库胜过一切 ...

  9. CockroachDB架构浅析

    本文源自:http://www.cockroachchina.cn/?p=685 这篇文档介绍和说明了cockroachdb的架构,简单明了. 作为Spanner的开源实现,CockroachDB具有 ...

最新文章

  1. 软件工程小组问世第六章之概要设计青铜篇
  2. 《Linux内核分析》MOOC课程之从汇编语言角度看计算机是如何工作的
  3. boost asio resolver
  4. 数据结构之线段树Ⅴ——(李超线段树)Robot,Product Sum,Building Bridges,Jump mission
  5. 使用主题文件(包含CSS文件)时遇到的问题
  6. 数列求和 java_[代码展示]数列求和
  7. (转)mysql 无法设置外键的原因总结
  8. 为什么在Linux执行自己的程序要在前面加./
  9. 工业非标设备远程运维方案
  10. 计算机科学与技术代码0812,一级学科代码及名称0812计算机科学与技术(2007年)本.doc...
  11. java 求和、差、乘、商
  12. 牛客练习赛87 -C-牛老板
  13. python象棋编程_Python开发象棋小游戏(绘制棋盘)
  14. 软件配置管理中三个基线概念
  15. ui培训学校哪个比较好?
  16. factory-method
  17. bzoj2215 POI2011 Conspiracy
  18. 你也想成为白帽子么?推荐一份网络安全书单!
  19. 【转载】Apollo修改数据库相关配置不生效的问题
  20. Xmind使用tips

热门文章

  1. CSSOM和CSSOM View
  2. 为什么量子力学和相对论有矛盾?超弦理论或将统一物理学
  3. 计算机未来职业倾向,计算机专业职业生涯规划书50390.docx
  4. .vimrc的使用与配置
  5. 怎么给PDF签名?来看看这几个方法吧
  6. android ratingbar不可点击,Android评分控件RatingBar使用实例解析
  7. 微信小程序开发之——录音播放及文件上传下载-理论(1)
  8. Unity 动态修改URP自带材质参数
  9. 自己动手搞个印象笔记桌面版
  10. What inspires designers? Preferences on inspirational approaches during idea generation