【赵渝强老师】TiDB的列存引擎:TiFlash

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云数据库 RDS SQL Server,基础系列 2核4GB
简介: TiFlash是TiDB的列式存储引擎,借助ClickHouse实现高效协处理器层,采用Multi-Raft体系进行数据复制与分散。它实时从TiKV同步数据,提供一致性的最新读取。组件包括列式存储引擎和TiFlashproxy,支持TiDB与TiSpark计算引擎。需手动指定表同步,并通过DDL语句管理副本数量。文档还介绍了部署、创建副本、查看同步进度及删除副本等操作步骤,展示了其在OLAP场景的应用。

b1004.png

TiDB的TiFlash提供列式存储,且拥有借助ClickHouse高效实现的协处理器层。除此以外,它与TiKV非常类似,依赖同样的Multi-Raft体系,以Region为单位进行数据复制和分散。TiFlash以低消耗不阻塞TiKV写入的方式,实时复制TiKV集群中的数据,并同时提供与TiKV一样的一致性读取,且可以保证读取到最新的数据。TiFlash中的Region副本与TiKV中完全对应,且会跟随TiKV中的Leader副本同时进行分裂与合并。下图为TiDB HTAP形态架构,其中包含TiFlash节点。




TiFlash主要包含两个组件,一个是列式存储引擎组件,另一个是处理Multi-Raft协议通信相关工作的TiFlashproxy组件。TiFlash可以兼容TiDB与TiSpark,用户可以选择使用不同的计算引擎。


提示:TiFlash暂时无法直接接受数据写入,任何数据必须先写入TiKV再同步到TiFlash。


视频讲解如下:


TiFlash部署完成后并不会自动从TiKV中同步数据,而需要手动指定需要同步的表。可以使用TiDB或者TiSpark读取TiFlash,其中:TiDB适合用于中等规模的OLAP计算,而TiSpark适合大规模的OLAP计算。用户可以根据使用的场景和使用习惯自行选择。


执行下面的语句创建一个TiDB数据库集群,该集群中将包含:一个TiDB节点、一个PD节点、两个TiKV节点和两个TiFlash节点。

> tiup playground v8.5.1 \
     --db 1 --pd 1 --kv 2 \
     --tiflash 2 --without-monitor


TiFlash接入TiKV集群后,默认不会开始同步数据。可通过MySQL客户端向TiDB发送DDL命令来为特定的表建立TiFlash副本,DDL语句格式如下:

ALTER TABLE <table_name> SET TIFLASH REPLICA <count>;
# 其中:count表示TiFlash中的副本数,0表示删除TiFlash中的所有副本数。


下面是具体的操作步骤:

(1)为员工表emp建立2个TiFlash副本。

tidb> alter table emp set tiflash replica 2;


(2)查看员工表emp的同步进度。

tidb> select * from information_schema.tiflash_replica 
      where table_schema = 'scott' and table_name = 'emp' \G;
# 输出的信息如下:
*************************** 1. row ***************************
   TABLE_SCHEMA: scott
     TABLE_NAME: emp
       TABLE_ID: 114
  REPLICA_COUNT: 2
LOCATION_LABELS: 
      AVAILABLE: 0
       PROGRESS: 0.5
1 row in set (0.005 sec)


(3)再次查看员工表emp的同步进度。

tidb> select * from information_schema.tiflash_replica 
      where table_schema = 'scott' and table_name = 'emp' \G;
# 输出的信息如下:
*************************** 1. row ***************************
   TABLE_SCHEMA: scott
     TABLE_NAME: emp
       TABLE_ID: 114
  REPLICA_COUNT: 2
LOCATION_LABELS: 
      AVAILABLE: 1
       PROGRESS: 1
1 row in set (0.004 sec)
# 其中:
# AVAILABLE字段:表示该表的TiFlash副本是否可用。
                1代表可用,0代表不可用。副本状态为可用之后就不再改变,
        如果通过DDL命令修改副本数则会重新计算同步进度。
# PROGRESS字段:代表同步进度,在0.0~1.0之间,1代表至少1个副本已经完成同步。


(4)删除员工表emp的所有TiFlash副本。

tidb> alter table emp set tiflash replica 0;


(5)为scott数据库构建TiFlash副本。

tidb> alter database scott set tiflash replica 2;


(6)查看scott数据库的同步进度。

tidb> select * from information_schema.tiflash_replica 
      where table_schema = 'scott' \G;
# 输出的信息如下:
*************************** 1. row ***************************
   TABLE_SCHEMA: scott
     TABLE_NAME: emp
       TABLE_ID: 114
  REPLICA_COUNT: 2
LOCATION_LABELS: 
      AVAILABLE: 0
       PROGRESS: 0.5
*************************** 2. row ***************************
   TABLE_SCHEMA: scott
     TABLE_NAME: dept
       TABLE_ID: 112
  REPLICA_COUNT: 2
LOCATION_LABELS: 
      AVAILABLE: 0
       PROGRESS: 0.5
2 rows in set (0.006 sec)


(7)再次查看scott数据库的同步进度。

tidb> select * from information_schema.tiflash_replica 
      where table_schema = 'scott' \G;
# 输出的信息如下:
*************************** 1. row ***************************
   TABLE_SCHEMA: scott
     TABLE_NAME: emp
       TABLE_ID: 114
  REPLICA_COUNT: 2
LOCATION_LABELS: 
      AVAILABLE: 1
       PROGRESS: 1
*************************** 2. row ***************************
   TABLE_SCHEMA: scott
     TABLE_NAME: dept
       TABLE_ID: 112
  REPLICA_COUNT: 2
LOCATION_LABELS: 
      AVAILABLE: 1
       PROGRESS: 1
2 rows in set (0.006 sec)


(8)基于员工表emp创建一张新表,并查看新表的列存同步进度。

tidb> create table newemp like emp;
tidb> select * from information_schema.tiflash_replica 
      where table_schema = 'scott' and table_name = 'newemp' \G;
# 输出的信息如下:
*************************** 1. row ***************************
   TABLE_SCHEMA: scott
     TABLE_NAME: newemp
       TABLE_ID: 126
  REPLICA_COUNT: 2
LOCATION_LABELS: 
      AVAILABLE: 1
       PROGRESS: 1
1 row in set (0.008 sec)
# 提示:基于一张已存在TiFlash副本的表创建的新表也将自动拥有TIFlash副本。


在了解到了TiFlash的基本操作后,下面讨论一下TiFlash的核心特性。


  • 异步复制

TiFlash中的副本以特殊角色(Raft Learner)进行异步的数据复制。这表示当TiFlash节点宕机或者网络高延迟等状况发生时,TiKV的业务仍然能确保正常进行。这套复制机制也继承了TiKV体系的自动负载均衡和高可用:并不用依赖附加的复制管道,而是直接以多对多方式接收TiKV的数据传输;且只要TiKV中数据不丢失,就可以随时恢复TiFlash的副本。


  • 一致性

TiFlash提供与TiKV一样的快照隔离支持,且保证读取数据最新。这个一致性是通过对数据进行复制进度校验做到的。每次收到读取请求,TiFlash中的Region副本会向Leader副本发起进度校对,只有当进度确保至少所包含读取请求时间戳所覆盖的数据一致后才响应读取。


  • 智能选择

TiDB可以自动选择使用TiFlash列存或者TiKV行存,甚至在同一查询内混合使用提供最佳查询速度。这个选择机制与TiDB选取不同索引提供查询类似:根据统计信息判断读取代价并作出合理选择。


  • 计算加速

TiFlash对TiDB的计算加速分为两部分:列存本身的读取效率提升以及为TiDB分担计算。TiDB会将可以由存储层分担的计算下推。能否下推取决于TiFlash是否可以支持相关下推

相关文章
|
3月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课7 实时流式归档
本文介绍了如何在PolarDB RAC一写多读集群中实现实时归档,确保WAL日志的及时备份。实验依赖于Docker容器和loop设备模拟的共享存储环境。通过配置主节点的`pg_hba.conf`、创建复制槽以及使用`pg_receivewal`工具,实现实时接收并归档WAL文件。此外,还提供了详细的命令行帮助和相关文档链接,方便读者参考和操作。注意:如果已搭建容灾节点,则无需重复进行实时归档。
74 0
|
1月前
|
存储 SQL OLAP
【赵渝强老师】TiDB的行存引擎:TiKV
TiDB 的存储架构由 TiKV(行存引擎)和 TiFlash(列存引擎)组成,分别适用于 OLTP 和 OLAP 场景。本文重点解析 TiKV 的体系结构,其作为分布式事务型 Key-Value 存储引擎,通过 Region 管理数据分布,支持高可用与自动故障转移。每个 Region 默认有 3 个副本,由 PD 调度实现负载均衡与水平扩展。视频进一步详解了 TiKV 的核心功能与设计原理。
|
6月前
|
存储 缓存 调度
性能提升利器|PolarDB- X 超详细列存查询技术解读
本文将深入探讨 PolarDB-X 列存查询引擎的分层缓存解决方案,以及其在优化 ORC 列存查询性能中的关键作用。
782 69
|
7月前
|
存储 SQL 分布式计算
大数据-139 - ClickHouse 集群 表引擎详解4 - MergeTree 实测案例 ReplacingMergeTree SummingMergeTree
大数据-139 - ClickHouse 集群 表引擎详解4 - MergeTree 实测案例 ReplacingMergeTree SummingMergeTree
95 0
|
10月前
|
运维 关系型数据库 分布式数据库
PolarDB产品使用问题之分区表如何实现全文索引
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
SQL 分布式数据库 索引
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(7)
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(7)
211 0
|
存储 分布式数据库 数据安全/隐私保护
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(5)
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(5)
230 0
|
分布式数据库
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(4)
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(4)
201 0
|
存储 分布式数据库
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(3)
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(3)
180 0
|
存储 运维 分布式数据库
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(1)
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X分区管理(1)
242 0