前言
经过小编这几天的学习理解,对TiDB数据库有了一定理解,所以现在回来总结。
整体框架
TiDB主要分为3个核心组件:TiDB Server ,PD Server 和TiKV Server,还有用于解决用户复杂OLAP需求的TiSpark组件。部署一个单机版的TiDB,这三个组件都需要启动。如果用生产环境,需要使用Ansible部署TiDB集群。
一个完整的TiDB集群框架如下图:
TiKV Server
TiKV Server 负责存储数据,对于数据存储需要保证实现以下功能:
- 支持跨数据中心的容灾;
- 写入速度足够快;
- 读取速度方便;
- 支持数据修改与并发修改数据;
- 多条记录修改后保证原子性。
TiKV采用Key-Value模型存储数据,并且提供有序遍历方法。TiKV是一个巨大的Map,TiKV存储的是key-value pair,key-value pair按照key的二进制顺序有序,查找到某个key的位置,可以不断地调用Next方法以递增的顺序获取比这个key大的key-value。
TiKV的存储模型与SQL中Table无关,TiKV就是一个高性能高可靠性的巨大的(分布式)的map。
TiKV通过RocksDB将数据持久化到磁盘上,而不是直接向磁盘上写数据,也就是说具体的数据落地是用RocksDB负责。RokcsDB 是一个高性能的单机引擎,有FaceBook的团队做持续优化。
如果要做到数据不丢失,支持跨数据中心的容灾,就需要将数据负责到多台机器上,但是这个时候就涉及到数据一致性的问题了。TiDB采用Raft协议来保证数据一致性,Raft是一个一致性算法,PingCAP公司对Raft协议的实现做了大量的优化来保证这一协议切实可行。
Raft是一个一致性协议,提供了以下几个重要的功能:
- Leader选举;
- 成员变更;
- 日志复制;
TiKV利用Raft来做数据复制,每个数据变更都会落地为