。TiDB分布式newSQL数据库,支持水平弹性扩展+ACID分布式事务+标准sql+mysql语法+mysql协议+数据强一致+集群高可用。
主要由3个部件组成:TiDB Server+PB server + TiKV Server。
。TiDB负责解析SQL语句,生成分布式的query plan请求列表,翻译成key-value操作,发送给TiKV数据库。本身不存储数据,自负责计算和解析,可以无限水平扩展,之间可以通过lvs对外提供统一的接口,实现负载均衡。
。PB是整个集群的管理模块。
主要工作:
1.管理每个region元信息存储在TiKV中的位置,
2.对tikv存储集群进行调度和负载均衡(leader/raft group的region数据迁移),
3.分配全局唯一且递增的事务ID。PD是一个集群,需要部署奇数个,至少部署3个节点。
。TiKV真正存储数据的分布式key-value数据库,支持弹性水平扩展+自动容灾恢复+自动故障转移实现高可用+ACID跨行事务处理。存储的基本单元是region,每个region负责存储一个key range键列和对应的value值,每个tikv节点可以包含多个region。tikv使用raft协议保证数据的强一致性和多副本容灾,即不同tikv节点的同一个region构成raft group,互为副本,PD也是通过调度属于同一个raft group的region来实现负载均衡。
。TiDB由Go语言开发,TiKV由rust语言开发。
。按照key range划分成大致相等的切片region,每个切片有多个副本(通常是3个),组成raft group,其中一个leader,2个follower副本。
。PD调度·region切片分裂合并:默认最大144MB,超过后会分裂成2个大小接近的region,更有利于PD的写操作调度。当某个region内的数据大量删除后,PD会将与之相近的2个region合并。
。PD调度·将一个follower副本从一个tikv节点调度到另一个节点。PD会先为这个raft group在目标节点上增加一个region为leaner副本,并开始向leader同步数据,完成后PD会将其变更为Follower副本,并将原节点上的follower副本删除。
将一个leader副本从一个节点调度到另一个节点上,操作类似,但是多一个leader选举的操作:新的follower副本发起一次leader transfer,选举自己成为新的leader,之后新的leader负责删除旧的leader副本的数据。
。每个TiKV节点可以说物理服务器,也可以是虚拟机或容器,每个节点的数据存储就是通过RocksDB存储到磁盘(单机存储数据库,TIkv使其集群存储,并实现强一致性和容灾高可用),每个节点可以包含多个region切片,每个切片最少有3个副本分布在不同的节点上,成为raft group。跨节点的的region之间通过raft协议保证每个副本的数据一致性


。TiDB 基本操作,增删改查操作。
。创建、查看和删除数据库 CREATE DATABASE db_name [options];
要创建一个名为 samp_db 的数据库,可使用以下语句: CREATE DATABASE IF NOT EXISTS samp_db;
使用 SHOW DATABASES 语句查看数据库: SHOW DATABASES;
使用 DROP DATABASE 语句删除数据库,例如: DROP DATABASE samp_db;
。 创建、查看和删除表
使用 CREATE TABLE 语句创建表。语法如下: CREATE TABLE table_name column_name data_type constraint;
例如: CREATE TABLE person ( number INT(11), name VARCHAR(255), birthday DATE );
如果表已存在,添加 IF NOT EXISTS 可防止发生错误: CREATE TABLE IF NOT EXISTS person ( number INT(11), name VARCHAR(255), birthday DATE );
使用 SHOW CREATE 语句查看建表语句。例如: SHOW CREATE table person;
使用 SHOW FULL COLUMNS 语句查看表的列。 例如: SHOW FULL COLUMNS FROM person;
使用 DROP TABLE 语句删除表。例如: DROP TABLE person; 或者 DROP TABLE IF EXISTS person;
使用 SHOW TABLES 语句查看数据库中的所有表。例如: SHOW TABLES FROM samp_db;
。创建、查看和删除索引
对于值不唯一的列,可使用 CREATE INDEX 或 ALTER TABLE 语句。
例如: CREATE INDEX person_num ON person (number); 或者 ALTER TABLE person ADD INDEX person_num (number);
对于值唯一的列,可以创建唯一索引。
例如: CREATE UNIQUE INDEX person_num ON person (number); 或者 ALTER TABLE person ADD UNIQUE person_num on (number);
使用 SHOW INDEX 语句查看表内所有索引: SHOW INDEX from person;
使用 ALTER TABLE 或 DROP INDEX 语句来删除索引。与 CREATE INDEX 语句类似,DROP INDEX 也可以嵌入 ALTER TABLE 语句。
例如: DROP INDEX person_num ON person; ALTER TABLE person DROP INDEX person_num;
。增删改查数据
使用 INSERT 语句向表内插入数据。
例如: INSERT INTO person VALUES("1","tom","20170912");
使用 SELECT 语句检索表内数据。
例如: SELECT * FROM person;
+--------+------+------------+
| number | name | birthday |
+--------+------+------------+
| 1 | tom | 2017-09-12 |
+--------+------+------------+
使用 UPDATE 语句修改表内数据。
例如: UPDATE person SET birthday='20171010' WHERE name='tom'; SELECT * FROM person;
+--------+------+------------+
| number | name | birthday |
+--------+------+------------+
| 1 | tom | 2017-10-10 |
+--------+------+------------+
                  使用 DELETE 语句删除表内数据: DELETE FROM person WHERE number=1; SELECT * FROM person; Empty set (0.00 sec) 
。创建、授权和删除用户
                 使用 CREATE USER 语句创建一个用户 tiuser,密码为 123456:
CREATE USER 'tiuser'@'localhost' IDENTIFIED BY '123456';
授权用户 tiuser 可检索数据库 samp_db 内的表:
GRANT SELECT ON samp_db.* TO 'tiuser'@'localhost';
查询用户 tiuser 的权限:
SHOW GRANTS for tiuser@localhost;
删除用户 tiuser: DROP USER 'tiuser'@'localhost';
 
 
                     
            
        













 
                    

 
                 
                    