TiDB ——TiKV

news2024/11/29 6:27:41

TiDB ——TiKV

TiKV持久化

  • TiKV架构和作用
  • TiKV数据持久化和读取
  • TiKV如何提供MVCC和分布式事务支持
  • TiKV基于Raft算法的分布式一致性
  • TiKV的coprocessor

TiKV架构和作用

  • 数据持久化
  • 分布式一致性
  • MVCC
  • 分步式事务
  • Coprocessor

image-20221116190626613

RocksDB

单机持久化引擎,单机key-value的哈希表

image-20221116190836917

写入先会保存在MemTable当中,批量写入磁盘,合并。

image-20221116191301886

WAL:用来保证事务的原子性和持久性。

会先写到磁盘中,在写到内存中。可以实现故障恢复。

Sync_log=true

MemTable:调表和搜索保证有序性。

流控write stall=5

image-20221116202746775

compaction查找:有序,使用二分查找。

删除:操作memTable,写入一个delete

image-20221116203453355

Block Cache:存最近最常读取的,找不到就去找下一个。

最新的数据永远在老数据上面,

bloom Filter:判断集合中的元素,它说元素不在就是不在,在可能不在。

image-20221116205459135

分布式事务

乐观锁。

分布式事务

在内存中修改事务

image-20221121085957154

只给事务的第一行加一把主锁。

修改是检查lock里面有没有锁,如果有则先不修改,起到了阻塞的作用。事务会从PD获取事务开始的时间。

锁信息的清理:不是删除,是加入一条新的锁信息。

事务有三个阶段:

开始获取一个时间戳,一旦做了提交以后,进入两个阶段。

  1. 第一阶段将修改的数据和锁信息,写入default列簇当中,锁信息写入lock列簇当中
  2. 第二阶段commit,获取事务结束时间,在write当中写入提交时间,清除lock信息。从write当中去default当中去找信息。

注意事项

write不单单是写提交信息,当用户写入了一行小于255字节,那么会存储在write列中,否则会被存入default列中。

default:存储的都是大于255字节的数据。

主锁:别的锁会存一个对主锁的指向。只给第一行数据加一把主锁,其他只加一个指向。

如果发生宕机,就看主锁有没有信息,进行一个恢复。

MVCC 多并发版本控制

实现:生成一个副本,读副本,用时间戳,取最新的。

悲观事务/悲观锁:要能感知到锁的存在。其他的事务是可以感知到的。写不阻塞读。

image-20221121100822061

  1. 如果当前读id=1,TSO=120,可以发现最近的一条信息结束TSO是110,开始TSO是100,找到id=1,发现可以读出Jack,但是在lock当中有一条锁信息,所以不能进行写,
  2. 如果当前读id=2,TSO=120,可以发现,和1同理可以读出Candy,但是lock没有锁,所以也可以进行写。
  3. 如果当前读id=4,TSO=120,可以发现,可以读出Tony,但是lock存在锁信息,指向1的主锁,所以也不能进行写入。

TiKV-Raft

Raft与Multi Raft

读写只走leader。

region超过96MB就会另起一个单元,插入是连续的。每一个副本的ky-value都是一样的。区间是左闭右开。

一个region多副本组成一个raft group。

Raft日志复制

  1. propose,会将请求变成一个写入日志。
  2. append,将Raft日志存储到本地的专门存raft日志的rocks DB中。
  3. Replicate,复制 ,分发其他副本的所在的节点当中,持久化
  4. Commited,副本返回一个响应值收到并存起来了,多数节点丢不了
  5. Apply 将Raft日志应用,存到rocksdb KV当中

image-20221121105940427

image-20221121113502817

Raft Leader 选举

term:在稳定的关系的一段时期

election timeout:150ms~300ms没有心跳,没有leader。变成下一段关系。

image-20221122101850055

发起投票,term+1,谁的term大,谁就会变成leader

Heartbeat time interval:每隔一段时间给follower发心跳信息,没有收到心跳信息就会发起选举。如果多次时间相同,可能发起多次选举。会让一个区间的follwer都进入选举。

image-20221122102858301

raft-election-timeout-ticks不能小于raft-heartbeat-ticks

TiKV 读写

数据的写入

image-20221122103950393

两个线程池

  1. propose:raftstore pool将写请求转化成raft log
  2. Append,raftstore pool将日志存储、持久化到rocksdb raft中
  3. Replicate,复制,复制给其他副本节点。保证持久化,大多数返回成功,就进入下一个状态
  4. commited,指日志被大多数副本接受并持久化,接受到信息,不是指用户的commited

apply pool 应用到rocksdb kv才算成功。commited才返回。

读到数据,数据一定应用到rocksdb kv中。

数据的读取

TiDB Server收到读取请求,会先去PD查,这个key在哪一个node的哪一个region当中。

readIndex:读一定在写之后,读取保证在修改之后,在读之写都应该commited掉,apply。保证读一定可以到修改之后的值。

image-20221122151213295

Lease Read:在election timeout 之内leader都不会改变

Follower Read:比leader读的更快由于apply的速度。

Coprocessor 协同处理器

image-20221122153330361

TiDB将就计算分发给TiKV的Coprocessor计算,降低TiDB Server的压力。

  1. 物理算子,sql的中间结果
  2. 分析数据,统计信息,对表进行校验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

L2十档行情API接口的开发原理是什么?

L2十档行情API接口的开发原理不知道大家有没有了解过,其实在现实的股市量化交易中,就有不少的投资者也在思考这个问题,并且也有的部分交易者会选择自己开发来使用,不仅支持A股所有的股票数据,也能对期货、外汇、黄金等…

个人项目-部署手册

前言 一、RDS和ECS购买与配置 https://www.aliyun.com/?spm5176.12818093.top-nav.dlogo.3be916d0u0Ncp9 购买RDS(MYSQL)和ECS(规格族:突发性能实例 t6 )的时候尽量选择一个大区》如:华东(杭州)配置不需要太高(够自己使用就行了…

干货分享 | B站SLO由失败转成功,B站SRE做对了什么?

最近几年,Google SRE在国内非常流行。 Google SRE方法论中提出了SLO是SRE实践的核心,SLO为服务可靠性设定了一个目标级别,它是量化线上质量的关键因素,它是用来回答一个服务到底“什么时候叫做挂了”的根本依据,也是可…

Python网络爬虫入门篇

1. 预备知识 学习者需要预先掌握Python的数字类型、字符串类型、分支、循环、函数、列表类型、字典类型、文件和第三方库使用等概念和编程方法。 2. Python爬虫基本流程 a. 发送请求 使用http库向目标站点发起请求,即发送一个Request,Request包含&am…

xxl-job 执行成功,但是报“任务结果丢失,标记失败“错误

问题1:使用xxl定时更新数据,发现执行结果是失败的 打开日志查看,发现没报错,结果是200 打开备注,上面写着"结果丢失". 再仔细对比下,发现外面日志列表中的执行时间是00:20:18;而日志记录中的最后时间是00:39:32;也就是说线程还没执行完,就先报结果错误了. 对比日志时…

[附源码]Python计算机毕业设计宠物寄养管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Jmeter压力测试教程(上)

JMeter压力测试一、 简介1.1优点1.2缺点二、安装2.1下载2.2解决中文乱码问题2.5配置环境变量2.4启动入门案例三、线程组相关3.1 创建多个线程组3.2 并发和顺序执行3.3 两个特殊的线程组(setUp/tearDown)线程细节设置默认http请求新增接口信息头管理器四、…

SAP ADM100-1.2之系统登录过程(ABAP)

1、SAP登录过程 为了在前端最终用户和SAP系统实例之间创建连接,sapgui.exe程序需要启动参数。参数字符串是由saplogon .exe程序使用为登录选择的SAP GUI的信息创建。 SAP登录信息有以下两个来源:SAP Logon的配置文件,以及对所选系统的消息服务器的直接请求(下图中的步骤1和…

使用Go+Lua解决Redis秒杀中库存与超卖问题

1、简介 Go语言连接go-redis进行数据库的连接,如果你对这部分尚不了解,建议你先学习这部分知识。另外,本秒杀主要解决两个问题,第一个就是超卖问题,另一个就是库存问题。没有设计专门的页面来模拟并发,我们…

布谷蓝途:易知微「可视大脑助力智慧教育」主题分享精彩实录

如今,大数据技术在教育领域的应用与普及正驶入“快车道”,但仍然存在资源管理分散、数据各自为阵、运营模式传统等痛点,如何借助新技术、新机遇并充分发挥大数据在教育教学中的支撑作用成为重中之重。 布谷蓝途作为国内前沿的大数据方案与服…

网分测试线缆怎么选?

如何在众多选择中寻找到最佳的测试电缆?以下内容由普科科技PRBTEK整理,以下内容将阐述电缆与电缆组件的机械及电气性能,以及如何选择您理想的测试电缆。 2004年5月,美国时代微波系统公司的测试工程师对50欧姆测试电缆的要求作出以下概述&…

银河麒麟桌面操作系统V10安装过程

文章目录下载镜像导入VMware启动安装下载镜像导入VMware 首先去麒麟生态网站注册登录,找到适合自己版本的操作系统 打开VMware新建虚拟机 把镜像放进来 选择Liunx的ubuntu版本 分配处理器和内核 分配内存 后面的就网络、I/O、硬盘按照默认配置就行 启动安装 …

二叉树的建立和遍历

目录创建二叉树中的引用使用遍历顺序创建二叉树使用先序遍历和中序遍历创建二叉树使用中序和后序创建二叉树中序求二叉树用栈实现非递归遍历先序遍历中序遍历后序遍历用栈通过出栈次数进行遍历中序遍历后序遍历队列进行层次遍历思路代码判断是否是满二叉树和完全二叉树递归非递…

面向开发者的开源低代码开发工具,强烈推荐!

每家公司在发展过程中都需要构建大量的内部系统, 比如运营使用的用户管理后台,销售线索后台,双十一活动后台,圣诞节活动后台等。 许多公司内部也都有专门的研发团队负责开发各种各样的后台和内部工具,大量的公司为此付…

Qt开发-QT Quick

前言 QT Quick和Qt widgets这两种技术,官方是强推QT Quick的。 QT Quick中布局一般有如下四种方式, 绝对坐标:x、y、z、width、height、top、left锚(anchors) 布局定位器(Row、Column、Grid、Flow)布局管理器&#…

(微信开发)Laya转发H5网页到微信,带图片

网页转发到微信时,带图片和自定义标题。2022年11月22号 关键解说 _wx.config({ debug: _wx_configdebug, appId: e.appId, timestamp: e.timestamp, nonceStr: e.nonceStr, signature: e.signature, jsApiList: [ // 所有要调用的 API 都要加到这个列表中 ‘onMen…

网络威胁情报git【全面】

开源地址如下: https://github.com/fastfire/deepdarkCTI 网络威胁情报 (CTI) 被定义为收集和分析有关威胁和对手的信息以及绘制模式,这些模式提供了针对各种网络攻击的准备、预防和响应行动做出明智决策的能力。 CTI 涉及收集、研究和分析网络威胁领域的趋势和技…

APP测试面试题汇总(基础篇、进阶篇)

一、基础篇 1、请介绍一下,APP测试流程? APP测试流程与web测试流程类似,分为如下七个阶段: 1.根据需求说明书编写测试计划; 2.制定测试方案,主要是测试任务、测试人员和测试时间的分配; 3.…

Elasticsearch GC优化实践

近期业务查询线上ES集群出现频繁超时告警,尤其是早晨某个时间点固定的报一波超时,从调用链监控上很难看出是什么业务行为导致的。 初步猜测 查看Grafana上Elasticsaerch的基础监控,发现业务告警与ES的Old GC(老年代GC&#xff0…

功率放大器的参数和应用场景是什么

功率放大器是电子测量行业比较常见的一种电子放大器,主要目的是增加给定输入信号的功率幅度,使输入信号功率增加,从而驱动到发射器等输出设备的负载水平。和电流放大器与电压放大器有所不同的是,功率放大器是直接驱动负载并且最终…