HTAP的A\T分离

【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.1.0
传统的事务、分析系统通常会分OLTP和OLAP的库,分析系统在OLAP上做分析不会影响到业务系统性能。
tidb的HTAP会根据sql自动优化,选择tikv副本或是tiflash副本。
怎样设置,可以保证让业务应用和分析应用打到不同的副本上呢。

TiDB 支持 Optimizer Hints 语法,它基于 MySQL 5.7 中介绍的类似 comment 的语法,例如 /*+ HINT_NAME(t1, t2) */ 。当 TiDB 优化器选择的不是最优查询计划时,建议使用 Optimizer Hints。

READ_FROM_STORAGE(TIFLASH[t1_name [, tl_name ...]], TIKV[t2_name [, tl_name ...]]) 提示优化器从指定的存储引擎来读取指定的表,目前支持的存储引擎参数有 TIKVTIFLASH。如果为表指定了别名,就只能使用表的别名作为 READ_FROM_STORAGE() 的参数;如果没有指定别名,则用表的本名作为其参数。例如:

SELECT /*+ READ_FROM_STORAGE(TIFLASH[t1], TIKV[t2]) */ t1.a FROM t t1, t t2 WHERE t1.a = t2.a;

https://docs.pingcap.com/zh/tidb/stable/use-tidb-to-read-tiflash#engine-隔离

我们主要想在应用级别A/T分离,看样子可以通过session参数,分别设置只能访问tiflash和tikv做到。
进一步的话,如果想业务应用和分析应用都能使用tikv和tiflash,但访问的副本相分离,有办法做到吗?

1 个赞

这个好像不行。一个集群对外提供的,只有一份副本,就是leader副本。

但是是可以从从副本读取数据的。
https://docs.pingcap.com/zh/tidb/stable/follower-read#follower-read

+1, 这个是可行的,让OLTP只读写leader,OLAP只读follower,不过其实最终还是会映射到相同一套TiKV上。 这个方案比较好的一方面是,OLAP因为要遍历很多数据,很容易出现读的热点出现,读follower可以一定程度避免热点出现

1 个赞

:handshake: :handshake: :handshake:

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