学习
实践
活动
专区
工具
TVP
写文章

初探TiDB-TiFlash

简介TiFlash

TiFlash是TiDB生态组件之一,专门解决OLAP场景。借助ClickHouse实现高效的列式计算。

介绍TiFlash架构

一开始,我个人以为他会是用binlog或其他方式把数据同步到TiFlash中,读取数据有专门的接口,结果我的理解是错误的。

如图,TiFlash是通过TiKV把数据同步到TiFlash。大家都知道TiKV中的Region是分leader和Follower。

TiFlash通过Region的leader节点进行数据全量和增量同步。

增量同步是通过Raft Log异步复制,相当于MySQL的redo log同步。

我这里就好奇,为啥不通过TiKV Follower 节点进行全量和增量的同步呢?

因为本身TiKV的数据就是强一致的,并且TiKV的Leader节点还要承担日常的读写压力。

答:这个是因为 Raft 协议实现的问题,目前都是以 leader 为准的。(来自神秘好友的解答)

目前TiKV应该不支持读写分离,如果把同步的节点改完TiKV的Follower节点,也不会影响数据的一致性,并且能分担Leader节点的压力。

答:这个的话,现在有 Follower Read 的功能,可以理解为读写分离,但是目前读是强一致性的,后续会允许异步读取数据,也就是从 follower 上读到一段时间之前的数据(来自神秘好友的解答)

核心特性

异步复制

TiFlash节点和TiKV节点进行复制同步期间,发生网络延迟或者网络抖动,不会影响到TiKV的运行。如果TiFlash节点宕机了,也不会影响TiKV的运行。只要TiKV的数据不丢失,TiFlash的数据就可以通过TiKV进行恢复。

简单来说 你可以把TiFlash和TiKV的关系理解为MySQL的主从架构。MySQL主库和从库之间发生网络抖动,或者MySQL从库挂了。

并不会影响MySQL主库的写入和读取(这里说的是MySQL异步复制)。

智能选择

TiDB可以自动选择使用 TiFlash 列存或者TiKV行存。不需要通过其他接口访问TiFlash 。其实在这里就实现了一个入口根据实际SQL选择列存或者行存。

实验环境:2张表一个是sbtest1、sbtest2有相同的数据。但sbtest1做了TiFlash同步,sbtest2还是保留TiKV存储。

当sbtest1和sbtest2同时执行count的操作,二个表的执行计划就不同了。

发现sbtest1表走了TiFlash列存储,而sbtest2表则走了TiKV行存储。

实验2:sbtest1表执行不同的SQL,选择行存或者列存就会发生转变。

计算加速

通过列式引擎来提升TiDB读取的效率的提升。

TiDB架构中本身就实现了计算下推,把计算任务推给了存储引擎层也就是TiKV。

在新增列式存储TiFlash环境中,TiFlash也承担计算任务。

一致性

TiFlash和TiKV一样提供快照隔离的支持,并且保证读取数据最新。这个一致性是通过复制进度校验来实现的。

每次接收到读取请求,TiFlash 会向 Leader 发起进度校对。

只有当进度确保至少所包含读取请求时间戳所覆盖的数据之后才响应读取。

部署TiFlash

TiDB版本大于TiDB3.1和TiDB4.0 。在tidb-ansible找到

[tiflash_servers] 填写主机名和data目录。

其他操作和部署TiDB无异,目前官方推荐使用TiUP进行部署,可以参考官方。

需要注意的是 不建议TiFlash和TiKV混合部署,不建议部署多实例。

个人建议TiFlash的配置比TiKV的配置要高一点。

因为毕竟TiFlash要跑OLAP业务,消耗资源可能会多一点。

使用TiFlash

TiFlash接入后,默认不会进行数据同步。可以针对表来进行TiFlash副本。

按照表构建TiFlash。

ALTER TABLE table_name SET TIFLASH REPLICA count

#count表示副本数 ALTER TABLE table_name SET TIFLASH REPLICA 1

查看表的同步进度

SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = '<db_name>' and TABLE_NAME = '<table_name>'

TiSpark可以直接读取TiFlash中的数据。

优点

业务可以通过TiDB直接跑OLAP场景的SQL。

减少维护成本 数据库(MySQL)到分析类型的数据库(例如hadoop)之间的链路同步工具。减少分析数据库(例如hadoop)的维护成本。

美中不足

资源隔离和资源调度

虽然TiFlash和TiKV中有资源隔离。TiFlash不会影响到TiKV的性能。

但我想说的是TiFlash里的资源调度。

如果大量的消耗资源的SQL在TiFlash中运行,TiFlash会不会把整个系统的资源跑满?导致重要的其他SQL无法运行。

可以把一些慢的 不重要的SQL分配较少的系统资源。重要的SQL分配更多的系统资源。

总结 TiFlash还是一款非常不错的组件,能够解决一些痛点,满足一些场景的需求,在官方持续维护下TiFlash的未来还是非常可期的。

其实我和叶老师非常好奇TiFlash VS ClickHouse 谁的性能更好,查询的SQL更快。一直想让我出一篇测试类的文章。其实我一直没写测试类型的文章。主要的原因:没有合适的机器。相对TiFlash 的测试方式,我也没有想好,应该不能用Sysbench去压测。

小调查:大家对TiDB基础类型的文章有兴趣吗?如果有可以留言。

文章分享自微信公众号:
3306pai

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:田帅萌
原始发表时间:2020-04-10
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • TiDB 4.0 新特性也太爽了吧

    TiDB4.0版本在4月份发布了RC版本,新增一些好用的功能:TiUP、BR、Dashboard、TiFlash、大事务的支持等等一些新功能,让我们快来体验一下...

    田帅萌
  • selenium初探selenium初探

    selenium初探 selenium简介与安装 简介 selenium是一个网站的自动化测试库,但由于其具有大量的自动化库而且可以调用浏览器,常常被用于爬虫技...

    月见樽
  • node初探

    河湾欢儿
  • ContentProvider初探

    其实很多时候我们用到ContentProvider并不是自己暴露自己的数据,更多的时候通过 ContentResolver来读取其他应用的信息,最常用的莫过于读...

    小小工匠
  • hazelcast初探

    Hazelcast作为一个高度可扩展的数据分发和集群平台,提供了高效的、可扩展的分布式数据存储、数据缓存。Hazelcast是开源的,在分布式技术方面,Haze...

    lyb-geek
  • shell 初探

    原文https://jiangyuan.gitbooks.io/mac/content/shell_chu_tan.html

    IMWeb前端团队
  • BFE 初探

    我用 BFE 做网关,主要实现路由转发和过滤器,路由转发指的是,接收一切外部请求转发到后端微服务上,过滤器指的是,限流、鉴权、协议转化等等。

    新亮
  • pipelinedb 初探

    http://docs.pipelinedb.com/installation.html#installation

    二狗不要跑
  • 初探Grunt

    最近打算学习一些web编程的知识,今天学习了Grunt这个工具的用法,这里简要地对学习的知识点进行个总结。

    王云峰
  • JMH初探

    很多情况下需要做性能基准测试(benchmark)。简单的说就是,在几种类似的解决方案中,寻找效率较高的。比如对比一下thrift, protobuf, avr...

    全栈程序员站长
  • gevent初探

    有很多Python语言的协程库,如:tornado、asyncio等。这些库在使用时需要使用特定的语法,如:async/await,对于非协程的代码需要改写才能...

    drunkdream
  • Numpy初探

    理解Python中的数据类型Python代码Python代码Python整型不仅仅是一个整型Python列表不仅仅是一个列表Python中的固定类型数组从Pyt...

    用户3577892
  • Nginx初探

    Nginx——Ngine X,是一款自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;也就是说Nginx本身...

    Java后端技术
  • cocotb初探

    对于从事ASIC行业及FPGA行业的小伙伴来说,仿真是一件必不可少的事情。或许有人是验证大拿,UVM高手,但相较于软件丰富的验证框架,对于各种各样的场景...

    碎碎思
  • Meterpreter初探

    ​ 命令 screenshot 可以获取活动用户的当前屏幕界面的图片并保存在本地指定的目录

    Mirror王宇阳
  • es初探

    1、ElasticSearch为了实现并发访问,每次实行更新、删除、添加之后都会为版本号自增1。

    爱撒谎的男孩
  • 初探TypeScript

    腾讯NEXT学位
  • 初探Linux

    内核(Kernal):Linux最主要的部分,操作整个计算机的资源,提供内存管理,进程管理,驱动管理等基本功能

    晚上没宵夜

扫码关注腾讯云开发者

领取腾讯云代金券