关于TIDB一些疑问请教

近期了解了一下TIDB,但是还有些困惑需要请教一下。
1.TiFlash可以快速同步tidb行存的数据,我看网上说 快速的原因是读取 raft log 的 idx 值就可以同步,但是我看也有的人说是因为 tiflash使用了DeltaTree 的原因,请问 这两个原因是相同的吗,有什么联系吗?
2.TiFlash列存这边有索引吗,索引是怎么建立的,这个有文档出处吗,一直没搜到
3.TiFlash有数据分片吗,只看到了TiKV 有数据分配

1 个赞

非常感谢您对 TiDB 的关注!针对您的问题,我逐一回答如下:

  1. 关于 TiFlash 快速同步 TiDB 行存数据的原因,确实有两个方面的原因。首先,TiFlash 使用 Raft 协议来实现数据同步,通过读取 Raft 日志的 idx 值来进行同步[1]。其次,TiFlash 还使用了 DeltaTree 技术,这是一种增量更新的数据结构,可以快速将变更应用到列存数据中,从而实现快速同步[1]。这两个原因是相互关联的,都是为了实现 TiFlash 快速同步 TiDB 行存数据的能力。

  2. TiFlash 列存引擎是支持索引的。在 TiFlash 中,索引是通过在列存数据上构建特殊的数据结构来实现的。具体来说,TiFlash 使用了 Bitmap 索引和 Inverted Index 索引两种类型的索引[1]。Bitmap 索引适用于低基数的列,可以快速定位满足特定条件的行;而 Inverted Index 索引适用于高基数的列,可以快速定位包含特定值的行。通过这些索引,TiFlash 可以提供更高效的查询性能。

  3. 目前 TiFlash 没有数据分片的概念。数据分片是 TiKV 的特性,用于将数据分散存储在不同的节点上,以实现水平扩展和负载均衡。而 TiFlash 是作为 TiDB 的一个独立组件,用于加速查询,它并不直接存储数据,而是通过与 TiKV 进行数据同步来获取数据[2]。因此,数据分片的概念主要适用于 TiKV,而不适用于 TiFlash。

2 个赞

tiflash是没有索引的,都是列存储了,那就是每列都是索引
相关问题可以看下如下的文章

1 个赞

tiflash有数据副本数,你起多个tiflash实例,然后选择需要使用tiflash的表用几个副本 就配置几个,比如2副本配置。
alter table test_tb set tiflash replica 2;

1 个赞

官方文档create index中没有找到tiflash相关的描述。
据我所知,列存数据库是可以有索引的,当where条件可以走索引的时候,能避免读取整列数据。

列存本身就是有顺序的,where当然能快速定为数据

感谢您的解答,但是
Bitmap 索引和 Inverted Index索引我看您提供的这篇文章貌似没有提到,哪里有出处可以说下吗。 还有我看有的伙伴说 ,都是列存储了,那就是每列都是索引,这句话怎么理解呢

为什么列存每列都是索引呢,不太明白这句话

索引不就是把某列数据存一起吗,列存不也是把某列数据存一起吗

tikv和tiflash都是主键排序,value排序才能定位where范围

行存还是列存可以是杂乱存放的一坨数据(普通堆表),有序存放的表叫索引组织表(IOT),索引是有序的双链表。可能描述得不够精确,希望能帮你理解 :grimacing:

有友商已经支持列存表索引了,既然表妹说支持,估计是还在内测,官方文档没更新。

gaussdb列存表支持的索引类型:Psort(列存表缺省值)、btree、gin。[1]
OpenGauss 列存表PSort索引

目前按文档来看,是列存还没有索引是吧

看看这个,有10章,第一章就写到了索引
TiFlash 源码阅读(一)TiFlash 存储层概览 | PingCAP

1 个赞

参考指南中没有找到人为创建列存表索引的信息。那个Rough Set Index更像一种TiFlash自带的元数据,每坨数据自带统计信息,可以起到过滤作用,类似inforbirght的Knowledge Node。

这个内容非常适合你:

第一期: TiFlash 存储引擎的设计思路

作者:黄俊深

内容概要:将对 TiDB HTAP 的整体形态进行介绍,并详细解析存储层 DeltaTree 引擎进行优化的设计思路以及其子模块。

会议资料:TiFlash 存储层概览.pdf (877.2 KB)

视频回放:TiFlash 存储引擎的设计思路_哔哩哔哩_bilibili

全文回顾:专栏 - TiFlash 源码阅读(一) TiFlash 存储层概览 | TiDB 社区

第二期: TiFlash 计算层 Overview

作者:徐飞

内容概要:通过本期内容可以对 TiFlash 的计算层的设计原理以及代码实现 有一个概要了解。

会议资料:TiFlash 计算层概览 - 徐飞.pdf (1.1 MB)

视频回放:源码解读 - TiFlash 计算层 Overview_哔哩哔哩_bilibili

全文回顾:专栏 - TiFlash 源码阅读(二)计算层概览 | TiDB 社区

第三期: TiFlash DeltaTree 引擎设计及实现解析 Part 1

作者:施闻轩

内容概要:通过本期内容可以深入理解 TiFlash 存储层 DeltaTree 引擎写路径的相关原理及工作流程。

会议资料:TiFlash DeltaTree Storage Engine (Part 1).pdf (2.2 MB)

视频回放:TiFlash DeltaTree 引擎设计及实现解析_哔哩哔哩_bilibili

全文回顾:专栏 - TiFlash 源码阅读(三) DeltaTree 存储引擎设计及实现分析 - Part 1 | TiDB 社区

第四期: TiFlash DeltaTree 引擎设计及实现解析 Part 2

作者:施闻轩

内容概要:通过本期内容可以深入理解 TiFlash 存储层 DeltaTree 引擎的读写工作流程及代码实现。

会议资料:TiFlash DeltaTree Storage Engine (Part 2).pdf (1.2 MB)

视频回放:源码解读 | TiFlash 存储层 DeltaTree 引擎(读路径)_哔哩哔哩_bilibili

全文回顾:专栏 - TiFlash 源码阅读(五) DeltaTree 存储引擎设计及实现分析 - Part 2 | TiDB 社区

第五期: TiFlash DDL 模块设计及实现解析

作者:洪韫妍

内容概要:通过本期内容你可以了解 TiFlash DDL 模块的设计思想和代码实现方式。

会议资料:TiFlash 源码解读 - DDL 模块(2).pdf (1.5 MB)

视频回放:源码解读 | TiFlash DDL 模块设计及实现解析_哔哩哔哩_bilibili

全文回顾:专栏 - TiFlash 源码解读(四) | TiFlash DDL 模块设计及实现分析 | TiDB 社区

第六期: TiFlash 中常用算子的设计与实现

作者:齐智

内容概要:通过本期内容你会对 TiFlash 算子的各个阶段有一定的了解,在听完之后明白算子代码的设计逻辑,能够进一步独立阅读代码或者做简单的 issue。

会议资料:TiFlash 中常用算子的设计与实现.pdf (2.9 MB)

视频回放:源码解读 | TiFlash 中常用算子的设计与实现_哔哩哔哩_bilibili

第七期: TiFlash DeltaTree Index 的设计和实现

作者:李德竹

内容概要:通过本期内容你可以理解存 TiFlash 储层核心数据结构 DeltaTree Index 的作用以及相关的实现原理。

会议资料:TiFlash DeltaTree Index 的设计和实现分析.pdf (1.2 MB)

视频回放:TiFlash DeltaTree Index_哔哩哔哩_bilibili

全文回顾:专栏 - TiFlash DeltaTree Index 的设计和实现分析 | TiDB 社区

第八期: TiFlash Proxy 模块介绍

作者:骆融臻

内容概要:本期内容将帮大家了解 TiFlash Proxy 模块的原理。它是如何帮助 TiFlash 获得数据的,它又是如何与 TiFlash 交互的,相比 TiKV,它针对 TiFlash 的写入模式做了哪些调整优化。

会议资料:TiFlash 源码解读 - Proxy 模块.pdf (1.6 MB)

视频回放:TiFlash Proxy 模块介绍_哔哩哔哩_bilibili

全文回顾:专栏 - TiFlash Proxy 模块介绍 | TiDB 社区

第九期: TiFlash 表达式的实现与设计

作者:黄海升

内容概要:通过本期内容你将了解 TiFlash 表达式的设计和源码实现,为后续你参与 TiFlash 的贡献提供帮助。

会议资料:TiFlash 表达式的实现与设计.pdf (1.8 MB)

视频回放:TiFlash 表达式的实现与设计_哔哩哔哩_bilibili

全文回顾:专栏 - TiFlash 表达式的实现与设计 | TiDB 社区

1 个赞

感谢您的解答,我还看到 DeltaTree 中有 DeltaTree index这种数据结构,这 DeltaTree index既然是数据结构,它不是TiFlash的索引吗?

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。