TIDB 详解

2023-11-10

TIDB是什么?

TIDB 受谷歌Spanner和F1的论文启发的new sql数据库,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性,同类数据库还包括巨杉数据库。

TiDB的原理与实现

TiDB 架构是 SQL 层和 KV 存储层分离,相当于 innodb 插件存储引擎与 MySQL 的关系。

有了 TiKV,TiDB 层只需要实现 SQL 层,再加上 MySQL 协议的支持,应用程序就能像访问 MySQL 那样去访问 TiDB 了

TiDB的成功案例

目前今日头条,摩拜单车、凤凰网、游族网络等公司采用了TIDB数据库。

这些企业采用TIDB的主要原因包括:

?

1

2

3

4

5

6

1. 兼容mysql

2. 分布式存储,扩展能力强。

3. 支持OLTP

4. 可以直接利用TiSpark做实时分析。

5. 稳定的高可用性

6. 无阻塞在线DDL

采用TIDB的公司需求具有的共同点:

?

1

2

1. 拥有数亿以上记录的数据,希望在保持海量数据存储能力的前提下保留良好的OLTP性能和QPS性能

2. 希望数据库拥有实时计算的能力

TIDB的架构

TiKV Server:负责数据存储,是一个提供事务的分布式 Key-Value 存储引擎;

PD Server:负责管理调度,如数据和 TiKV 位置的路由信息维护、TiKV 数据均衡等;

TiDB Server:负责 SQL 逻辑,通过 PD 寻址到实际数据的 TiKV 位置,进行 SQL 操作。

TiDB的特性

?

1

2

1. 水平扩展:包括计算能力和存储能力。TiDB Server 负责处理 SQL 请求,随着业务的增长,可以简单的添加 TiDB Server 节点,提高整体的处理能力,提供更高的吞吐。TiKV 负责存储数据,随着数据量的增长,可以部署更多的 TiKV Server 节点解决数据 Scale 的问题。PD 会在 TiKV 节点之间以 Region 为单位做调度,将部分数据迁移到新加的节点上。

2. 高可用:TiDB/TiKV/PD 这三个组件都能容忍部分实例失效,不影响整个集群的可用性

TIDB的部署

?

1

2

3

1. 因 TiDB 和 PD 对磁盘 IO 要求不高,所以只需要普通磁盘即可。

2. TiKV 对磁盘 IO 要求较高。TiKV 硬盘大小建议不超过 500G,以防止硬盘损害时,数据恢复耗时过长。整个 TiDB 架构是面向未来、面向海量数据高并发场景,底层存储技术(如数据定位 seek)都是针对当前主流的 SSD 进行设计和优化的,不会对传统的 SATA/SAS 机械硬盘再进行优化。(参考凤凰网的部署方案)

3. 部署工具使用了 TiDB-Ansible。TiDB-Ansible 是 PingCap 基于 Ansible playbook 功能编写了一个集群部署工具叫 TiDB-Ansible。使用该工具可以快速部署一个完整的 TiDB 集群(包括 PD、TiDB、TiKV 和集群监控模块)

TIDB的监控方案

Pincap 团队给 TiDB 提供了一整套监控的方案,他们使用开源时序数据库 Prometheus 作为监控和性能指标信息存储方案,使用 Grafana 作为可视化组件进行展示。(参考今日头条的方案)

监控的原理:

?

1

2

3

1. 在 client 端程序中定制需要的 Metric

2. Push GateWay 来接收 Client Push 上来的数据,统一供 Prometheus 主服务器抓取。

3. AlertManager 用来实现报警机制,使用 Grafana 来进行展示

 

 

关于索引

除了使用主键查询外,TiDB 允许用户创建二级索引以加速访问,就像上面提到过的,在 TiKV 的层面,TiDB 这边的表里面的行数据和索引的数据看起来都是 TiKV 中的 KV Pair,所以很多适用于表数据的原则也适用于索引。和 Spanner 有点不一样的是,TiDB 只支持全局索引,也就是 Spanner 中默认的 Non-interleaved indexes。全局索引的好处是对使用者没有限制,可以 scale 到任意大小,不过这意味着,索引信息不一定和实际的数据在一个 Region 内。

  • 建议:
    对于大海捞针式的查询来说 (海量数据中精准定位某条或者某几条),务必通过索引。

当然也不要盲目的创建索引,创建太多索引会影响写入的性能。

 

 

TiDB 具备如下核心特点:
1 高度兼容 MySQL
 大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移。
2水平弹性扩展
 通过简单地增加新节点即可实现 TiDB 的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。
3分布式事务
 TiDB 100% 支持标准的 ACID 事务。
4 真正金融级高可用
 相比于传统主从 (M-S) 复制方案,基于 Raft 的多数派选举协议可以提供金融级的 100% 数据强一致性保证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复 (auto-failover),无需人工介入。
5 一站式 HTAP 解决方案
 TiDB 作为典型的 OLTP 行存数据库,同时兼具强大的 OLAP 性能,配合 TiSpark,可提供一站式 HTAP解决方案,一份存储同时处理OLTP & OLAP(OLAP、OLTP的介绍和比较 )无需传统繁琐的 ETL 过程。
6云原生 SQL 数据库
 TiDB 是为云而设计的数据库,同 Kubernetes (十分钟带你理解Kubernetes核心概念 )深度耦合,支持公有云、私有云和混合云,使部署、配置和维护变得十分简单。
 TiDB 的设计目标是 100% 的 OLTP 场景和 80% 的 OLAP 场景,更复杂的 OLAP 分析可以通过 TiSpark 项目来完成。 TiDB 对业务没有任何侵入性,能优雅的替换传统的数据库中间件、数据库分库分表等 Sharding 方案。同时它也让开发运维人员不用关注数据库 Scale 的细节问题,专注于业务开发,极大的提升研发的生产力.

二 TiDb 整体架构

TiDB 集群主要分为三个组件:
1TiDB Server
 TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。 TiDB Server是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如LVS、HAProxy 或F5)对外提供统一的接入地址。
2PD Server
 Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个: 一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader的迁移等);三是分配全局唯一且递增的事务 ID。   
 PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署 3 个节点。
3TiKV Server
 TiKV Server 负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range (从 StartKey 到EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region 。TiKV 使用 Raft协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 RaftGroup,互为副本。数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。
三 核心特性
1 水平扩展
 无限水平扩展是 TiDB 的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力。TiDB Server 负责处理 SQL 请求,随着业务的增长,可以简单的添加 TiDB Server 节点,提高整体的处理能力,提供更高的吞吐。TiKV 负责存储数据,随着数据量的增长,可以部署更多的 TiKV Server 节点解决数据 Scale 的问题。PD 会在 TiKV 节点之间以 Region 为单位做调度,将部分数据迁移到新加的节点上。所以在业务的早期,可以只部署少量的服务实例(推荐至少部署 3 个 TiKV, 3 个 PD,2 个 TiDB),随着业务量的增长,按照需求添加 TiKV 或者 TiDB 实例。
2 高可用
 高可用是 TiDB 的另一大特点,TiDB/TiKV/PD 这三个组件都能容忍部分实例失效,不影响整个集群的可用性。下面分别说明这三个组件的可用性、单个实例失效后的后果以及如何恢复。
TiDB
 TiDB 是无状态的,推荐至少部署两个实例,前端通过负载均衡组件对外提供服务。当单个实例失效时,会影响正在这个实例上进行的 Session,从应用的角度看,会出现单次请求失败的情况,重新连接后即可继续获得服务。单个实例失效后,可以重启这个实例或者部署一个新的实例。
PD
 PD 是一个集群,通过 Raft 协议保持数据的一致性,单个实例失效时,如果这个实例不是 Raft 的 leader,那么服务完全不受影响;如果这个实例是 Raft 的 leader,会重新选出新的 Raft leader,自动恢复服务。PD 在选举的过程中无法对外提供服务,这个时间大约是3秒钟。推荐至少部署三个 PD 实例,单个实例失效后,重启这个实例或者添加新的实例。
TiKV
 TiKV 是一个集群,通过 Raft 协议(raft一致性哈算法以及Raft 为什么是更易理解的分布式一致性算法 )保持数据的一致性(副本数量可配置,默认保存三副本),并通过 PD 做负载均衡调度。单个节点失效时,会影响这个节点上存储的所有 Region。对于 Region 中的 Leader 结点,会中断服务,等待重新选举;对于 Region 中的 Follower 节点,不会影响服务。当某个 TiKV 节点失效,并且在一段时间内(默认 30 分钟)无法恢复,PD 会将其上的数据迁移到其他的 TiKV 节点上。
四 TiDb技术内幕
 1 保存数据 TiDB 技术内幕 - 说存储
 2 计算(很关键如何做sql运算) TiDB 技术内幕 - 说计算
 3 调度(Tidb集群管理) TiDB 技术内幕 - 谈调度

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TIDB 详解 的相关文章

  • Callable和Future原理解析

    首先进行分析前 我们需要了解到的概念 Callable是一个接口 是用于创建线程执行里面有一个call方法 用于线程执行的内容 由业务自己定义 Future也是一个接口 可以异步的通过get方法获取到call返回的内容 比较常见的使用场景
  • java如何声明公众类_类#是公共的,应在名为#.java的文件中声明

    classComplex privateintrealPart privateintimaginPart Complex this realPart 0 this imaginPart 0 Complex intrealPart intim
  • jdk-8u162 java安装

    linux下java环境配置 参照如下文章安装jdk https blog csdn net daerzei article details 80136457 1 上传jdk 8u162 文件 然后执行如下命令进行安装 安装完成之后设定环境
  • 边玩边学,15个学习Python 的编程游戏网站

    经常听到有朋友说 学习编程是一件非常枯燥无味的事情 其实 大家有没有认真想过 可能是我们的学习方法不对 比方说 你有没有想过 可以通过打游戏来学编程 今天我想跟大家分享几个网站 教你如何通过边打游戏边学编程 1 Coding Games 一
  • 力扣 289. 生命游戏

    虽然难度是中等但其实很简单 遍历矩阵判断每个点是死是活就可以了 进阶要求使用原地算法 即空间复杂度为O 1 所以我们不能简单的记录1是活 0是死 我规定 1 原来活 活变活 0 原来死 死变死 2 死变活 1 活变死 自己的 0ms cla
  • Windows Server 2012 R2 -DNS服务器安装与测试(VMware workstation环境)

    Windows Server 2012 R2 DNS服务器安装与测试 VMware workstation环境 搭建拓扑如下 DNS后缀名设置 DNS服务器 虚拟机 IP设置 DNS指向自己 物理机net8虚拟网卡IP设置 DNS指向DNS
  • Vivado 2018.3 安装步骤及 license 获取

    本文的主要内容是介绍 Vivado 2018 3 版本的安装步骤及其 license 的获取与加载 首先下载安装包 将其在没有中文的路径下解压 注意在解压前最好关闭电脑的杀毒软件 防止某些文件被拦截或者删除 解压完成后打开文件夹 在最底部双
  • Java多线程-并行处理以及事务控制

    1 为了提高我们接口的响应速度 我们可以开多个线程 并行处理 比如我们要大批量写入数据到数据库 Autowired private ThreadPoolExecutor executor Autowired private Platform
  • 六. HTTPS确保Web安全

    六 HTTPS确保Web安全 1 HTTP的缺点 通信使用明文 内容可能会被盗取 互连网中使用TCP IP协议族进行通信的过程中会经过非常多的通信载体 网关 路由器等 而这些主机并不可能完全是私人的 所以可能某个环节遭到恶意窥视 抓包 当然
  • Android 整合高德地图SDK实现 地图预览,定位,模拟导航

    一 准备工作 1 到高德地图官方网申请key 我的应用 高德控制台 2 申请key方法请参考 获取Key 创建工程 开发指南 Android 地图SDK 高德地图API 3 出现的问题 其中有一个获取SHA1的问题 E AmapErr 定位
  • Tracker 服务器地址大全 Tracker List

    https dns icoa cn tracker udp tracker tiny vps com 6969 announce https 1337 abcvg info announce https tracker fastdownlo
  • 【Linux系统编程(二)】Linux文件IO操作

    文章目录 Linux文件IO操作 1 系统调用 2 系统调用和库函数的区别 3 C库中IO函数工作流程 4 文件描述符 4 1 文件描述符表是如何管理文件描述符的呢 4 2 查看当前系统文件描述最大数量 5 文件IO的操作 5 1 open
  • 关于split(String agrex)

    split a b c 得到 a b c a b c 得到 a b c 前面的空格一个都不会省略 a b c 得到 a b c 中间空格省略一个 后缀的空格全部省略 不是以空格而是以某个String为划分依据时 现象相同 split a a
  • 2021-06-22安装docker-ce

    安装docker ce Docker 支持以下的 64 位 CentOS 版本 CentOS 7 CentOS 8 更高版本 使用官方安装脚本自动安装 安装命令如下 curl fsSL https get docker com bash s
  • VUE问题汇总(一)

    vue的起步教程与api https cn vuejs org v2 guide vue组件库 https element eleme cn zh CN component installation 1 解决vue中时间控件中获取时间少一天
  • 前端三大框架(vue、react、angular)对比(一)

    官网 vue https cn vuejs org react https react docschina org angular https angular cn 三者总体介绍 都是MVVM 从后端的MVC衍生 类型的框架 基本都用于构建
  • 时序数据库timescaleDB安装

    参考链接 时序数据库timescaleDB安装 http www lwops cn thread 300 1 1 html 本环境在Centos7 5采用编译安装的方式 主要介绍PostgreSQL 11 7 TimescaleDB 1 6
  • 机器学习理论笔记(一):初识机器学习

    文章目录 1 前言 蓝色是天的机器学习笔记专栏 1 1 专栏初衷与定位 1 2 本文主要内容 2 机器学习的定义 2 1 机器学习的本质 2 2 机器学习的分类 3 机器学习的基本术语 4 探索 没有免费的午餐 定理 NFL 5 结语 1
  • tkinter控件样式

    文章目录 以按钮为例 共有参数 动态属性 tkinter系列 GUI初步 布局 绑定变量 绑定事件 消息框 文件对话框 控件样式 扫雷小游戏 强行表白神器 以按钮为例 tkinter对控件的诸多属性提供了可定制的功能 下面以最常用的按钮作为
  • 学习 Spring Boot:(二十九)Spring Boot Junit 单元测试

    前言 JUnit 是一个回归测试框架 被开发者用于实施对应用程序的单元测试 加快程序编制速度 同时提高编码的质量 JUnit 测试框架具有以下重要特性 测试工具 测试套件 测试运行器 测试分类 了解 Junit 基础方法 加入依赖 在 po

随机推荐

  • Eclipse中的checkstyle插件

    一 Checkstyle工具 Checkstyle是一款检查Java程序源代码样式的工具 它可以有效的帮助我们检视代码以便更好的遵循代码编写标准 官方地址 http checkstyle sourceforge net 二 在Eclipse
  • PPT模板

    http www officeplus cn List shtml cat PPT tag 1
  • CH3-Android常见界面控件

    目标 掌握简单控件的使用 能够独立搭建一个注册界面 掌握ListView控件与RecyclerView控件的使用 能独立搭建列表界面 掌握自定义控件的定义方式 能够自定义一个简单的控件 几乎每一个Android应用都是通过界面控件与用户交互
  • Linux--多线程(1)

    目录 一 概念 二 理解 三 创建 退出 合并进程 man pthread create Compile and link with pthread 1 为什么没有fun函数 2 加上sleep来改进 3 线程结束会不会影响主线程运行 4
  • Java应用调试利器——BTrace教程

    http www jianshu com p 26f19095d396 背景 生产环境中可能出现各种问题 但是这些问题又不是程序error导致的 可能是逻辑性错误 这时候需要获取程序运行时的数据信息 如方法参数 返回值来定位问题 通过传统的
  • ZRANGEBYSCORE

    ZRANGEBYSCORE key min max WITHSCORES LIMIT offset count 返回有序集 key 中 所有 score 值介于 min 和 max 之间 包括等于 min 或 max 的成员 有序集成员按
  • Python Tkinter详解 (四)文本输入框的使用

    同样的 我们先创建出一个最最最最最简单的输入框 我们在进行信息交互的时候 会经常使用输入框为我们的系统键入信息 那么他又有哪些属性呢 import tkinter as tk window tk Tk tk Entry window wid
  • STM32 基础系列教程 20 - RTC

    前言 学习stm32 RTC 实时时钟 的使用 学会用RTC实现钟表功能 示例详解 基于硬件平台 STM32F10C8T6最小系统板 MCU 的型号是 STM32F103c8t6 使用stm32cubemx 工具自动产生的配置工程 使用KE
  • 二叉树的相关列题!!

    对于二叉树 很难 很难 笔者也是感觉很难 虽然能听懂课程 但是 对于大部分的练习题并不能做出来 所以感觉很尴尬 因此 笔者经过先前的那篇博客 已经开启了大脑奇迹 现在还热乎着 刚刚的更文 二叉树讲解https blog csdn net w
  • OC学习篇之---类的延展

    前一篇文章我们介绍了类的类目概念和使用 http blog csdn net jiangwei0910410003 article details 41775329 那么这篇文章我们继续来介绍一下OC中的一个特性 延展 其实说白了 延展就是
  • 有关EMQX桥接的配置工作

    前言 桥接是一种连接多个 EMQ X 或者其他 MQTT 消息中间件的方式 不同于集群 工作在桥接模式下的节点之间不会复制主题树和路由表 桥接模式所做的是 按照规则把消息转发至桥接节点 从桥接节点订阅主题 并在收到消息后在本节点 集群中转发
  • Unity - 微信小游戏

    总参考 Unity WebGL 微信小游戏适配方案 公测 安装与使用 下载 Unity插件 并导入至游戏项目中 版本更新请查看更新日志 请查阅推荐引擎版本 安装时选择WebGL组件 最终选择Unity2021 2 5f1c1InstantG
  • 实战项目:图书管理系统介绍

    本文详细的介绍了实战项目之一的图书管理系统 下载后可以直接使用 也可以直接用于毕业设计 本系统前端使用的框架是vue2 elementUI 后端使用的框架为springboot mybatis maven 数据库使用的是myql数据库 安全
  • 【我不知道的css】巧用flex:0实现上方图片下方文字效果

    我不知道的css 巧用flex 0实现上方图片下方文字效果 要求 代码 原理 要求 要求使用flex布局实现下图所示的效果 容器内部左边为图片和文字 图片在上 文字在下 图片大小不一 文字长度不一 但要求文字根据图片的宽度自动换行 代码 d
  • java mysql教程基于_SpringBoot入门教程(五)Java基于MySQL实现附近的人

    附近的人 这个功能估计都不陌生 与之类似的功能最开始是在各大地图应用上接触过 比如搜附近的电影院 附近的超市等等 然而真正让附近的人火遍大江南北的应该是微信 附近的人 这个功能 记得微信刚出的时候 坊间还有一句 寂寞女聊玩微信 寂寞男人搜附
  • spring security 入门与理解

    1 pom加载
  • seo积分排名系统源码_SEO快速排名系统操作手法以及细节

    SEO快速排名是目前我国SEO行业最热门的话题之一 总之 所有的快速行都可以用两个词来解释 那就是点击 任何行业 包括SEO 都可以使用的原因也是一样的 例如 目前我国有大量的快速排序系统 这种快速排序系统由于百度的雷声算法而受到不同程度的
  • 使用阿里云服务器安装宝塔面板搭建网站教程(图文全流程)

    阿里云服务器安装宝塔面板教程 云服务器吧以阿里云Linux系统云服务器安装宝塔Linux面板为例 先配置云服务器安全组开放宝塔所需端口8888 888 80 443 20和21端口 然后执行安装宝塔面板命令脚本 最后登录宝塔后台安装LNMP
  • 6 款 超好用的 Python 时间库

    开源最前线 ID OpenSourceTop 链接 https opensource com article 18 4 python datetime libraries 写过Python程序的人都知道 Python日期和时间的处理非常繁琐
  • TIDB 详解

    TIDB是什么 TIDB 受谷歌Spanner和F1的论文启发的new sql数据库 这类数据库不仅具有NoSQL对海量数据的存储管理能力 还保持了传统数据库支持ACID和SQL等特性 同类数据库还包括巨杉数据库 TiDB的原理与实现 Ti