一、TiDB优势
TIDB可以无限的扩容,并且可以实时的处理事务和分析(OLTP,OLAP)(OLTP可以处理100%,OLAP可以处理80%,剩下的需要TiDBSpark),可以算是mysql的升级版,并且相对于redis、rocksdb这种kv型数据库,可以更加适配mysql(TIDB也是kv数据库)。
二、架构
分为三个核心模块,包括TiDB server,PD server和TIKV server。还有解决OLAP的TiSpark组件和TiDB Operator组件(云上部署)。
PD是整个集群的管理者,主要存储元数据和负载均衡、分配事务ID(全局唯一)。(管理者)
TIDB接受SQL请求,并且通过元数据找到数据在TIKV具体位置,并且和TiKV交互,将结果返回请求者。(操作者)
TiKV负责存储数据。(存储者)
TIDBSpark 负责解决复杂分析的
三、特性
核心特性为水平扩展和高可用(强一致性,基于Raft的多数派选举协议)。其他还有高度兼容Mysql,可以透明的切换数据库。分布式事务(100%处理)。一站式HTAP解决方案(HTAP:混合事务分析处理)。云原生SQL数据库,可以配合TiDB Operator使用。
水平扩展:
增加计算则添加TiDB,增加存储则添加TiKV。
一致性:
四、存储和计算能力
一般TiKv有三个副本,以region为单位,通过RocksDB存储到硬盘。
五、安装和部署
生产环境要求:
配置不够,是安装不上的。
使用Docker Compose部署
1、单机版
下载
wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz
tar -zxvf tidb-latest-linux-amd64.tar.gz
cd tidb-v5.0.1-linux-amd64/
启动pd
./bin/pd-server --data-dir=pd --log-file=pd.log &
启动kv
./bin/tikv-server --pd="127.0.0.1:2379" --data-dir=tikv --log-file=tikv.log &
启动db 三个顺序不能乱
./bin/tidb-server --store=tikv --path="127.0.0.1:2379" --log-file=tidb.log &
直接用mysql就可以连到tidb, -h为ip,-p为端口
sudo apt install mysql-client-core-8.0
mysql -h 127.0.0.1 -P 4000 -uroot
2、集群版
需要安装dockerUbuntu | Docker Docs Install Compose standalone | Docker Docs
Git git clone https://github.com/pingcap/tidb-docker-compose.git
cd tidb-docker-compose
docker-compose pull && docker-compose up -d
网络一直失败心态崩了
六、SQL操作
和mysql一样,跳过
七、整合spark
八、数据迁移
TIDB Lighting主要有两个模块
1.tidb-lighting 前端,用于适配,读取数据源,给数据建表,转换成键值对发送给tikv-importer
2.tikv-importer 后端完成把数据导入kv集群
tar -zxvf XXX
把mysql导出为mydumper格式
-t 代表多少线程,-F表示一个文件多大 -B表示用的数据库 -T表示用的表 --skip-tz-utc 忽略时区设置不一样 -o表示输出位置
存入
九、存储
通过Raft实现
通过region分区,按照范围存储,每一段都是连续的key-value,并且保证一段的大小合适
数据会均匀的分布在各个region,并且以region为单位进行制作副本,其中一个是leader,其他是follower,每个副本会分布在各个机器。
多版本控制MVCC
事务和redis一样是乐观锁
十、计算
需要支持mysql的点查和范围查询。
列名和表结构保存在元数据中,和下面的一样,不过前面加m_前缀
按照表号+行号作为key,
唯一索引数据表id+索引id value 行id
非索引id 表id+索引id+行id value为空
使用上面的搜索在筛选和扫描的开销都很大