TIDB-TIDB入门

简介

  • TIDB文档
  • TiDB 是一个的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合传统的RDBMS和NoSQL的特性。TiDB兼容 MySQL,支持无限的水平扩展,具有强一致性和高可用性。TiDB 的目标是为OLTP和OLAP 提供一站式的解决方案。
  • 特性
    • 高度兼容 MySQL
    • 水平弹性扩展
    • 分布式事务
    • 真正金融级高可用
    • 一站式 HTAP 解决方案
    • 云原生 SQL 数据库

总体架构

  • TiDB 集群主要包括三个核心组件:
    • TiDB Server
      • 接收SQL请求,处理SQL相关的逻辑,并经过PD找到存储计算所需数据的 TiKV地址,与TiKV交互获取数据,返回最终结果。TiDB Server 是无状态的,其自己并不存储数据,只负责计算,能够无限水平扩展,能够经过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址
    • PD Server(Placement Driver,简称 PD)
      • 集群的管理模块,主要工做:
        • 存储集群的元信息(某个Key存储在哪一个TiKV节点)
        • 对TiKV集群进行调度和负载均衡(如数据迁移、Raft group leader迁移等)
        • 分配全局惟一且递增的事务ID
      • 经过Raft协议保证数据的安全性
      • Raft的leader server负责处理全部操做,其他的PD server用于保证高可用
      • 建议部署奇数个PD节点
    • TiKV Server
      • 存储数据,一个分布式的提供事务的 Key-Value 存储引擎
      • 存储数据的基本单位是Region,每一个Region负责存储一个Key Range(从 StartKey到EndKey的左闭右开区间)的数据,每一个TiKV节点会负责多个Region
      • TiKV使用Raft协议作复制,保持数据的一致性和容灾
      • 副本以Region为单位进行管理,不一样节点上的多个Region构成一个Raft Group,互为副本
      • 数据在多个TiKV之间的负载均衡由PD以Region为单位进行调度
  • TiSpark:解决用户复杂OLAP需求的组件
    • 解决用户复杂OLAP需求的主要组件,将Spark SQL直接运行在TiDB存储层,同时融合TiKV分布式集群的优点,并融入大数据社区生态
      TIDB架构图

使用Docker Compose快速构建TiDB集群

  • 安装依赖
# **安装docker
sudo apt-get install docker
# **安装docker Compose
sudo apt-get install docker-compose
# **安装git
sudo apt-get install git
  • 安装TIDB
# **下载tidb-docker-compose
git clone https://github.com/pingcap/tidb-docker-compose.git
# **建立并启动集群
cd tidb-docker-compose
sudo docker-compose pull
sudo docker-compose up -d
# **访问集群
mysql -h 127.0.0.1 -P 4000 -u root
# **使用navicat客户端链接
IP: 127.0.0.1
port:4000
用户名:root
密码: 空
# **修改密码
SET PASSWORD FOR 'root'@'%' = '123456';

历史数据

  • 说明
    • TiDB数据被更新、删除后,依然能够读取更新/删除前的数据
    • 在更新数据以后,表结构发生了变化,TiDB依旧能用旧的表结构读取数据
  • 使用
    • system variable: tidb_snapshot,Session范围有效,能够经过Set 语句修改。值为文本,可以存储TSO和日期时间
    • tidb_snapshot被设置时,会用这个时间戳创建Snapshot,随后全部的Select 操做都会在这个Snapshot上读取数据
    • 经过结束Session或者设置tidb_snapshot="",读取最新版本的数据
  • 历史数据保留策略
    • TiDB使用MVCC管理版本,当更新/删除数据时,不会真正的删除数据,而是添加一个新版本数据,因此能够保留历史数据
    • 历史数据不会所有保留,超过必定时间的历史数据会被完全删除,以减少空间占用以及避免历史版本过多引入的性能开销
    • 使用周期性运行的GC来进行清理
    • tikv_gc_life_time:配置历史版本保留时间
    • tikv_gc_safe_point:记录当前的safePoint