课程名称:课程版本(101/201/301)+ 课程名称
学习时长:40min
课程收获:
了解哪些场景适用TiDB,哪些场景不适用TiDB以及如何连接到TiDB集群。
课程内容:
2.1 TiDB的适用场景
适用TiDB的场景
1)典型的OLTP场景
TiDB是个分布式关系型数据库,语法与网络协议与mysql是兼容的,从mysql迁移到TiDB业务几乎不用做任何改动,与传统单机数据库不一样的是TiDB可以弹性水平扩展,没有容量上限,扩展过程对应用无感知,不适合海量数据场景。
适合访问模式比较随机的场景,对数据的访问是均匀的,能够保证海量数据下对索引的单行查询耗时在毫秒级。
2)实时的HTAP场景
配合TiFlash存储引擎可以实现高性能的实时分析,在数据源进行分析,避免了将数据从TiDB搬到另外的数据库的过程,OLTP的数据与分析的数据几乎没有延迟,OLAP的大查询不会影响OLTP的性能。
3)作为一个数据汇总的平台
当拥有多个上游MySQL类型的数据库,又不希望将TiDB直接作为生产环境使用的OLTP数据库,又希望借助TiDB的分析能力对生产环境的数据库进行实时的汇总分析,尤其是上游的数据库以及进行了分片或者分库分表之后,这种情况下对上游数据做OLAP是十分困难的,这时候可以将TiDB作为上游数据库的从库,可以将实时的分析查询运行在TiDB中。
4)使用Spark进行大数据分析
TiDB提供TiSpark组件,只需要在现有的Spark集群中安装TiSpark插件,就能使用Spark直接读取TiDB上的数据,甚至让Spark的分布式计算和分析逻辑下推到TiDB的存储节点中进行分布式计算,满足用户希望使用Spark分析TiDB的数据,免于将TiDB的数据搬移到其他的离线仓库中。
不适用TiDB的场景
1)数据量较小的场景,单机就能很好的承载业务的场景
2)业务中有重度的业务分析场景,表关联查询产生的中间结果超过TiDB SQL层物理机的内存也不适合TiDB
3)对数据库访问延迟是亚毫秒级的延时(比如不能超过1ms)这种场景比较适合内存数据库或分布式缓存,比如redis
2.2 如何连接到TiDB
TiDB使用MySQL协议,TiDB Server对外暴露的是一个服务的endpoint,业务层可以使用任何MySQL客户端或者SDK连接到任何由这些TiDB暴露出来的endpoint,当作一个MySQL连接使用即可,TiDB Server层是无状态的,连接到任何一个TiDB Server看到的数据或者写入都是一致的。
TiDB的语法和协议绝大多数兼容MySQL,TiDB不支持外键、不支持存储过程、不支持触发器。
命令行的客户端:
1)MySQL官方客户端mysql-client
2)mycli的连接工具:支持语法高亮,关键字的自动补全
图形化客户端:
1)PHPMyAdmin
2)MySQL Workbench
3)Navicat
对于应用程序,使用编程语言推荐的MySQL Driver或者MySQL官方的connector:
1)Python:mysqlclient、PyMySQL、MySQL-Python……
2)Java:JDBC
3)Golang:go-sql-driver/mysql
对于大型项目,使用的比较多的ORM,(Object-Relational Mapping)需要注意与MySQL不兼容的语法,生成的sql可能不符合分布式事务的最佳实践
1)Java:Hibernate、MyBatis
2)Python:Django ORM、SQLAichemy
3)Go:Gorm、xorm
使用TiUP(4.0引入的集群部署工具)在本地创建一个测试使用的TiDB集群,用MySQL的官方客户端连接TiDB,使用PHPMyAdmin图形化界面连接管理TiDB,最后使用Python的Django搭建一个测试网站来演示如何在python里使用web开发框架操作TiDB。
TiUP常用命令:playground,不加任何参数则在本地起一个3个节点的TiDB集群