TiDB是一个开源的分布式NewSQL数据库,设计的目标是满足100%的OLTP和80%的OLAP,支持SQL、水平弹性扩展、分布式事务、跨数据中心数据强一致性保证、故障自恢复的高可用、海量数据高并发实时写入与实时查询

1.  整体架构

TiDB分层架构如上图,由TiDB节点、TiKV节点、PD节点组成。

TiDB节点  SQL解析执行节点。Go语言开发。完全兼容Mysql协议。

职责是,负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过PD找到存储计算所需数据的TiKV 节点地址,与TiKV交互获取数据,最终返回结果。

TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展。

TiKV节点  分布式KV存储引擎,底层单机存储引擎是RocksDB, 基于Raft一致性协议的数据复制由Rust语言实现。

PD节点   元数据管理,Key Range与TiKV node映射关系。

2.TiDB

SQL计算节点,负责SQL的解析、优化、执行、结果集归并计算等功能。

3. TiKV

TiKV 负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。可以将 TiKV看做一个巨大的 Map,其中 Key 和 Value 都是原始的 Byte 数组,在这个 Map 中,Key 按照 Byte 数组总的原始二进制比特位比较顺序排列。

存储数据的基本单位是 Region,首先是Region的概念,它是指一段连续key的key-value对的集合。所有的数据都是以Region为一个基本单位来组织调度的。

每个 Region 负责存储一个 Key Range (从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region 。

数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度,现在一个Region的大小是96MB,当Region快要填满时,Region会发生分裂,整个分裂的过程都是由PD来调度,完全不需要人为干预。

Region是分层的。最底层的是RocksDB,这一层负责键值对的存储。 之上是Raft Group,不同节点上的多个Region 构成一个 Raft Group,互为副本。每一个Region都是通过Raft协议来保证数据的一致性的。

  整个Key-Value空间分成很多段,每一段是一系列连续的key,每一段叫做一个Region, TiKV是以Region为单位做数据的复制,一个Region在一个节点上只会有一份,但会有多个副本在其它节点上,一般情况下数据会保存在3个节点。

  Raft Group内数据的复制是由Raft协议来做的,每个数据变更都会落地为一条 Raft 日志,通过 Raft 的日志复制功能,将数据安全可靠地同步到Raft Group的多数节点中。

 

4. PD

  PD主要负责元数据的管理。PD的主要作用:

  1、路由功能,通过PD可以获取每一段范围key的数据具体Tikv节点;任意一个 Key 就能查询到这个 Key 在哪个Region 中,以及这个Region目前在哪个Tikv节点上

  2、全局时间戳功能,相当于全局事务ID,TIDB的分布式事务就是基于乐观锁的版本校验机制来实现的。这个功能还是非常重要的。

5.  总结一些思考

  1. TiDB 负责SQL的解析、优化、执行、结果集归并,是否可以采用Mysql分库分表中间件的形式,用java开发
  2. 不同节点上的三个 Region 构成一个 Raft Group,组间的数据复制算法Raft协议来做,读和写都在leader上,是否可以采用类似Zookeeper的paxos算法来做读写。

TiDB初探的更多相关文章

  1. 初探领域驱动设计(2)Repository在DDD中的应用

    概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...

  2. CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探

    CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...

  3. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  4. JavaScript学习(一) —— 环境搭建与JavaScript初探

    1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...

  5. .NET文件并发与RabbitMQ(初探RabbitMQ)

    本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...

  6. React Native初探

    前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...

  7. 【手把手教你全文检索】Apache Lucene初探

    PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也 ...

  8. Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

    一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...

  9. NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例

    一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...

随机推荐

  1. 关于VMware问题:无法获得 VMCI 驱动程序的版本: 句柄无效。驱动程序“vmci.sys”的版本不正确

    有的童鞋可能安装虚拟机时出现了下边这样的错误,莫慌,下面咋们来解决!!! 1.首先,找到你的安装虚拟机的目录下有一个.vmx的文件 找到这个文件,用编辑器打开,将该值改为FALSE即可!

  2. [JavaWeb基础] 028.CSS简介和基础语法

    css 概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与表现 ...

  3. [Objective-C] 010_Foundation框架之NSSet与NSMutableSet

    在Cocoa Foundation中的NSSet和NSMutableSet ,和NSArray功能性质一样,用于存储对象属于集合.但是NSSet和NSMutableSet是无序的, 保证数据的唯一性, ...

  4. 节点流(文件流) FileInputStream & FileOutputStream & FileReader & FileWriter

    节点流(文件流) FileInputStream(字节流)处理视频类的                   FileOutputStream(字节流) FileReader(字符流)处理文本文件    ...

  5. Hello, CTF

    0x01 拿到题目后查壳,发现什么也没有,32位vc++ 0x02 放到IDA里,F5反编译,得到下图 很容易我们就看到了比较的函数,以及出现wrong和success的字符串,所以接下来就是仔细分析 ...

  6. django-模型层(ORM语法)

    今日内容概要(重要) 模型层(ORM语法):跟数据库打交道的 单表查询(增删改查) 常见的十几种查询方法 神奇的双下划线查询 多表操作 外键字段的增删改查 跨表查询(重点) 子查询 联表查询 今日内容 ...

  7. PriorityBlockingQueue 和 Executors.newCachedThreadPool()

    1.PriorityBlockingQueue里面存储的对象必须是实现Comparable接口. 2.队列通过这个接口的compare方法确定对象的优先级priority. 规则是:当前和其他对象比较 ...

  8. TI CC1310 sub1G的SDK开发之入门

    CC1310是TI新出的一款sub1G射频模块,具体参数见数据手册吧,这款芯片的SDK跑的是rtos系统,是基于free-rtos定制的ti-rtos,多任务运行.芯片集成了两个核,一个M3做控制MU ...

  9. Java实现 蓝桥杯VIP 算法训练 最长字符串

    题目描述 字符串可是比赛经常出的问题,那么给大家出一个题, 输入五个字符串,输出5个字符串当中最长的字符串.每个字符串长度在100以内,且全为小写字母. 输入 无 输出 无 样例输入 one two ...

  10. Java实现 蓝桥杯VIP 算法提高 3-2求存款

    算法提高 3-2求存款 时间限制:1.0s 内存限制:256.0MB 问题描述 见计算机程序设计基础(乔林)P50第5题. 接受两个数,一个是用户一年期定期存款金额,一个是按照百分比格式表示的利率,计 ...