TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
一键水平扩缩容得益于 TiDB 存储计算分离的架构的设计,可按需对计算、存储分别进行在线扩容或者缩容,扩容或者缩容过程中对应用运维人员透明。
金融级高可用数据采用多副本存储,数据副本通过 Multi-Raft 协议同步事务日志,多数派写入成功事务才能提交,确保数据强一致性且少数副本发生故障时不影响数据的可用性。可按需配置副本地理位置、副本数量等策略,满足不同容灾级别的要求。
实时 HTAP提供行存储引擎 TiKV、列存储引擎 TiFlash 两款存储引擎,TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复制数据,确保行存储引擎 TiKV 和列存储引擎 TiFlash 之间的数据强一致。TiKV、TiFlash 可按需部署在不同的机器,解决 HTAP 资源隔离的问题。
云原生的分布式数据库专为云而设计的分布式数据库,通过 TiDB Operator 可在公有云、私有云、混合云中实现部署工具化、自动化。
兼容 MySQL 协议和 MySQL 生态兼容 MySQL 协议、MySQL 常用的功能、MySQL 生态,应用无需或者修改少量代码即可从 MySQL 迁移到 TiDB。提供丰富的数据迁移工具帮助应用便捷完成数据迁移。
原业务的 MySQL 的业务遇到单机容量或者性能瓶颈时,可以考虑使用 TiDB 无缝替换 MySQL。TiDB 可以提供如下特性:
吞吐量、存储和计算能力的水平扩展
水平伸缩时不停服务
强一致性分布式 ACID 事务
大数据量下,MySQL 复杂查询很慢。
大数据量下,数据增长很快,接近单机处理的极限,不想分库分表或者使用数据库中间件等对业务侵入性较大、对业务有约束的 Sharding 方案。
大数据量下,有高并发实时写入、实时查询、实时统计分析的需求。
有分布式事务、多数据中心的数据 100% 强一致性、auto-failover 的高可用的需求。
单机 MySQL 能满足的场景也用不到 TiDB。
数据条数少于 5000w 的场景下通常用不到 TiDB,TiDB 是为大规模的数据场景设计的。
如果你的应用数据量小(所有数据千万级别行以下),且没有高可用、强一致性或者多数据中心复制等要求,那么就不适合使用 TiDB。
docker pull xuxuclassmate/tidb
docker run --name tidb -d --privileged=true -p 4000:4000 xuxuclassmate/tidb
mysql -h 127.0.0.1 -P 4000 -u root
CREATE DATABASE demo;CREATE USER 'test'@'%' IDENTIFIED BY 'test';GRANT ALL PRIVILEGES ON demo.* TO 'test'@'%';FLUSH PRIVILEGES;use mysqlupdate user set authentication_string = password('123456') where User = 'root';FLUSH PRIVILEGES;CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(100) DEFAULT NULL,`age` int(11) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB ;INSERT INTO demo.`user`(id, name, age)VALUES(1, 'jack', 18);INSERT INTO demo.`user`(id, name, age)VALUES(2, 'alyssa', 19);
实验目的:实现读取tidb库里面表数据
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springboot-demo</artifactId><groupId>com.et</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>tidb</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies></project>
package com.et.tidb.entity;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructor@TableName("user")public class UserPO {@TableId(value = "id",type = IdType.AUTO)private int id;@TableField("name")private String name;@TableField("age")private int age;}
package com.et.tidb.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.et.tidb.entity.UserPO;import org.springframework.stereotype.Repository;@Repositorypublic interface UserMapper extends BaseMapper<UserPO> {}
server:port: 8088spring:datasource:: com.mysql.cj.jdbc.Drivertype: com.zaxxer.hikari.HikariDataSourceurl: jdbc:mysql://127.0.0.1:4000/demo?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: 123456
以上只是一些关键代码,所有代码请参见下面代码仓库
https://github.com/Harries/springboot-demo
package com.et.tidb;import com.et.tidb.entity.UserPO;import com.et.tidb.mapper.UserMapper;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)@SpringBootTest(classes = DemoApplication.class)public class MysqlTests {@Autowiredprivate UserMapper userMapper;@Testpublic void testmysql(){for (UserPO row : userMapper.selectList(null)) {System.out.println(row.toString());}}}
运行测试类,查看结果,可以看到输出数据库记录
https://docs.pingcap.com/zh/tidb/dev
http://www.liuhaihua.cn/archives/710643.html
原文作者:HBLOG;如有侵权,请联系管理员删除。