初探TiDB-TiFlash

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 初探TiDB-TiFlash

简介TiFlash

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

介绍TiFlash架构

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

image.png

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

image.png

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的操作,二个表的执行计划就不同了。

image.png

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

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

1154×448 120 KB
计算加速

通过列式引擎来提升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的未来还是非常可期的。一开始,我个人以为他会是用binlog或其他方式把数据同步到TiFlash中,读取数据有专门的接口,结果我的理解是错误的。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
存储 SQL 关系型数据库
TiDB的优势:为何选择TiDB作为您的数据库解决方案
【2月更文挑战第25天】随着数据规模的不断增长和业务需求的日益复杂化,现代企业对数据库系统的扩展性、高可用以及分布式处理能力提出了更高的要求。TiDB作为一个新型的开源分布式数据库,以其独特的设计理念与卓越的技术特性,在众多数据库解决方案中脱颖而出。本文将深入剖析TiDB的核心优势,探讨其如何帮助企业从容应对海量数据挑战、实现无缝水平扩展、保障服务高可用性,并提供灵活一致的事务支持。
|
存储 OLAP OLTP
漫谈OceanBase 列式存储
列式存储主要的目的有两个: 大部分OLAP查询只需要读取部分列而不是全部列数据,列式存储可以避免读取无用数据; 将同一列的数据在物理上存放在一起,能够极大地提高数据压缩率。 OLAP和OLTP OLAP,也叫联机分析处理(Online Analytical Processing)系统,有的时候也叫DSS决策支持系统,就是我们说的数据仓库。
6330 0
|
1月前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
61 15
|
分布式计算 关系型数据库 MySQL
【湖仓一体】阿里云AnalyticDB MySQL基于Flink CDC+Hudi实现多表全增量入湖实践
湖仓一体(LakeHouse)是大数据领域的重要发展方向,提供了流批一体和湖仓结合的新场景。阿里云AnalyticDB for MySQL基于 Apache Hudi 构建了新一代的湖仓平台,提供日志、CDC等多种数据源一键入湖,在离线计算引擎融合分析等能力。本文将主要介绍AnalyticDB for MySQL基于Apache Hudi实现多表CDC全增量入湖的经验与实践。
|
SQL 存储 监控
tidb
tidb 练习
1968 0
|
存储 SQL 安全
分布式 PostgreSQL,Citus(11.x) 效用函数
分布式 PostgreSQL,Citus(11.x) 效用函数
702 0
|
存储 监控 Cloud Native
从0到1部署一套TiDB本地集群
从0到1部署一套TiDB本地集群
910 0
从0到1部署一套TiDB本地集群
|
canal 网络协议 关系型数据库
使用canal将MySQL数据库数据实时同步到oceanbase
使用canal同步mysql数据至oceanbase
542 0
|
SQL 缓存 关系型数据库
通过开源Flink读写云原生数据仓库AnalyticDB PostgreSQL
本文介绍如何通过开源Flink版实时读写云原生数据仓库AnalyticDB PostgreSQL(以下简称ADB PG版,原分析型数据库PostgreSQL版)数据,包括版本限制、网络要求、操作步骤、类型映射和参数支持等。
1194 0
|
存储 SQL 弹性计算
TiDB 的正确使用姿势
最近这几个月,特别是 TiDB RC1 发布后,越来越多的用户已经开始测试起来,也有很多朋友已经在生产环境中使用,我们这边也陆续的收到了很多用户的测试和使用反馈。非常感谢各位小伙伴和早期用户的厚爱,而且看了这么多场景后,也总结出了一些 TiDB 的使用实践 (其实 Spanner 的最佳实践大部分在 TiDB 中也是适用的,MySQL 最佳实践也是),也是借着 Google Cloud Spanner 发布的东风,看了一下 Spanner 官方的一些最佳实践文档,写篇文章讲讲 TiDB 以及分布式关系型数据库的一些正确的使用姿势,当然,时代也在一直发展,TiDB 也在不停的进化,这篇文章基本上
440 0