当前位置:网站首页>TiKV & TiFlash 加速复杂业务查询
TiKV & TiFlash 加速复杂业务查询
2022-07-19 23:58:00 【TiDB社区干货传送门】
一、TiKV 行存 与 TiFlash 列存混合使用
TiDB 中 query 执行的示意图,可以看到在 TiDB 中一个 query 的执行会被分成两部分,一部分在 TiDB 执行,一部分下推给存储层( TiFlash/TiKV )执行。
1.1 混用原理
1 | TiDB 的行列混合并不是传统设计上的行存列存二选一, 而是 TiDB 可以在同一张表同时拥有行存和列存,且两者永远保持数据强一致(而非最终一致)。 |
---|---|
2 | 多表查询分别使用不同的引擎 TIKV 或 TiFlash 。 |
3 | TiFlash 支持 MPP 模式的查询执行,即在计算中引入跨节点的数据交换(data shuffle 过程)。 |
1.2 混用优化
二、标签系统高级筛选
通过标签(从宽表里不确定字段)和窄表特定字段组合查询客户并分页
2.1 Read from TiKV
SELECT /*+ READ_FROM_STORAGE(tikv[b], tikv[c],tikv[d]) */ a.*, b.CUST_NAME,b.CERT_TYPE,b.CERT_NUM,b.CUST_TYPE,b.SEX,b.AGE,b.BIRTH_DT, c.ORG_ID,c.ORG_NAME, d.ASSET,d.ASSET_MON_AVG FROM ( SELECT /*+ READ_FROM_STORAGE(tikv[m],tikv[n]) */ m.cust_id FROM m_cust_label m RIGHT JOIN m_cust_org n ON m.CUST_ID = n.CUST_ID WHERE m.cat1 IN ( 516, 710, 230,3301 ) AND n.ORG_ID IN ( '133','8716', '7162') ORDER BY n.cust_id ASC LIMIT 100 ) a LEFT JOIN m_cust_main b ON a.cust_id = b.cust_id LEFT JOIN m_cust_org c ON a.cust_id = c.cust_id LEFT JOIN m_cust_data d ON a.cust_id = d.cust_id ;
4G,2c 虚拟机 300 万数据,首次执行 48 s 二次执行 0.7s
2.2 Read From TiKV & TiFlash
SELECT /*+ READ_FROM_STORAGE(tikv[b], tikv[c],tikv[d]) */ a.*, b.CUST_NAME,b.CERT_TYPE,b.CERT_NUM,b.CUST_TYPE,b.SEX,b.AGE,b.BIRTH_DT, c.ORG_ID,c.ORG_NAME, d.ASSET,d.ASSET_MON_AVG FROM ( SELECT /*+ READ_FROM_STORAGE(tiflash[m],tikv[n]) */ m.cust_id FROM m_cust_label m RIGHT JOIN m_cust_org n ON m.CUST_ID = n.CUST_ID WHERE m.cat1 IN ( 516, 710, 230,3301 ) AND n.ORG_ID IN ( '133','8716', '7162') ORDER BY n.cust_id ASC LIMIT 100 ) a LEFT JOIN m_cust_main b ON a.cust_id = b.cust_id LEFT JOIN m_cust_org c ON a.cust_id = c.cust_id LEFT JOIN m_cust_data d ON a.cust_id = d.cust_id
4G,2c 虚拟机 300 万数据,首次执行 3s 二次执行 0.3s
2.3 TiFlash & MPP
set @@session.tidb_allow_mpp=1;set @@session.tidb_enforce_mpp=1;
SELECT /*+ READ_FROM_STORAGE(tikv[b], tikv[c],tikv[d]) */ a.*, b.CUST_NAME,b.CERT_TYPE,b.CERT_NUM,b.CUST_TYPE,b.SEX,b.AGE,b.BIRTH_DT, c.ORG_ID,c.ORG_NAME, d.ASSET,d.ASSET_MON_AVG FROM ( SELECT /*+ READ_FROM_STORAGE(tiflash[m],tiflash[n]) */ m.cust_id FROM m_cust_label m RIGHT JOIN m_cust_org n ON m.CUST_ID = n.CUST_ID WHERE m.cat1 IN ( 516, 710, 230,3301 ) AND n.ORG_ID IN ( '133','8716', '7162') ORDER BY n.cust_id ASC LIMIT 100 ) a LEFT JOIN m_cust_main b ON a.cust_id = b.cust_id LEFT JOIN m_cust_org c ON a.cust_id = c.cust_id LEFT JOIN m_cust_data d ON a.cust_id = d.cust_id
使用 MPP 模式来执行查询后基本秒开,4G 2c 虚拟机 300 万数据,首次执行 1s 二次执行 0.15s
2.4 SPM 固定执行计划
CREATE GLOBAL|SESSION BINDING for <BindableStmt > USING <BindableStmt2>SHOW GLOBAL|SESSION BINDINGS ; -- 查看绑定计划explain format = 'verbose' <BindableStmt2>;show warnings; -- 通过执行 show warnings 了解该 SQL 语句使用了哪一条 binding
固定特定查询走 TiFlash 列存查询。
三、标签下价值机构排名
3.1 根据选中的属性(多值)
使用这些值最多的排名前 3 的机构,并统计出总额
3.2 执行计划
table:c 走 TiFlash ;table:a, table:b 走 TiKV ,同时使用了列存和行存的优势。
四、总结
使用 TiKV 和 TiFlash 可以加速复杂查询,下面简单增加了使用使用场景。
组件 | 适用场景说明 |
---|---|
TiKV | 检索条件固定,且有索引 |
TiFlash | 检索条件不固定,无法加索引 |
TiKV + TiFlash | 部分表检索条件不固定,部分表有索引 |
如果有描述不当的地方欢迎评论指正!
谢谢 PingCAP 社区的大力支持!
本文作者:边城元元
边栏推荐
- GIS技术在医疗行业的应用:利用切片地图发布技术解决dmetrix数字病理切片在线浏览
- 什麼是複制沖突
- According to the middle order and subsequent traversal of binary tree
- CDH cluster construction (6.3)
- 重新认识生命世界,也重新认识我们自己
- 葡萄牙语金融财务词汇翻译
- 关于业务安全平台架构设计,顶象给“我”讲透了
- Prometheus 发布 LTS 长期支持版本啦
- 完美融入云原生的无代码平台 iVX编辑器实战
- When byte hung up, the interviewer asked DDD, but I didn't know
猜你喜欢
NFT in the eyes of blackash: the platform is crying for slaughter, and users send money to the door
洛谷P1955 程序自动分析
Successfully solved -- MySQL container command line is displayed in Chinese as??? Problems of
没有了可用Task slot,Flink新增任务会怎样?
西门子低代码客户案例|跨越沟通壁垒,解决应用开发效能瓶颈
Study notes of pytorch deep learning practice: Circular neural network (basic chapter)
ES6 - promise vs function "callback hell"
Probability prediction of wind power generation based on short term (realized by matlab code)
App application testing methods and testing ideas
Kubernetes 组件介绍
随机推荐
将流转化为数据产品
魔王冷饭||#103 魔王看经济;烂尾楼、租房附加条款、周易和水库优质男
嗶哩嗶哩 直播分區頁面 自動檢索紅包直播間並跳轉
My creation anniversary
根据子节点递归获取所有父节点集合
RS485 Serial Communications¶
EL&JSTL:EL表达式总结
组件化架构项目搭建——Gradle统一、依赖管理与配置
Leetcode回文链表
若依框架分页失效---解决方案
基于短期的风力发电概率预测(Matlab代码实现)
Nexttick stuff
Siemens low code customer case | overcome communication barriers and solve the bottleneck of application development efficiency
continue语句
商业智能BI分析思维:生产制造行业的资金管理
Why do you say that the maximum single table of MySQL database is 20million? Based on what?
RS485 Serial Communications¶
About my writing a Book
无法安装 cloudera-manager-agent
144. 二叉树的前序遍历