当前位置:网站首页>TiKV & TiFlash 加速复杂业务查询丨TiFlash 应用实践
TiKV & TiFlash 加速复杂业务查询丨TiFlash 应用实践
2022-08-03 11:37:00 【InfoQ】
背景
- 传统的关系型数据库无法通过加索引来优化加速查询,业务无法正常开展;
- 列存数据库需要把筛选相关数据放到列数据库,并且需要做好数据实时同步;
- 无法从数据库层面做好数据的读取,往往需要从列数据库读取数据后再到关系数据库进行数据合并后输出,性能不容乐观。
TiKV 行存 与 TiFlash 列存混合使用

混用原理
- TiDB 的行列混合并不是传统设计上的行存列存二选一,而是 TiDB 可以在同一张表同时拥有行存和列存,且两者永远保持数据强一致(而非最终一致)。
- 多表查询分别使用不同的引擎 TiKV 或 TiFlash。
- TiFlash 支持 MPP 模式的查询执行,即在计算中引入跨节点的数据交换(data shuffle 过程)。
混用优化

标签系统高级筛选

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 ;
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
TiFlash & MPP
tidb_allow_mpptidb_enforce_mppset @@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
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

标签下价值机构排名
根据选中的属性(多值)

执行计划



总结
边栏推荐
- Matlab学习12-图像处理之图像增强
- 基于英雄联盟的知识图谱问答系统
- [Detailed explanation of binary search plus recursive writing method] with all the code
- 实至名归!九章云极DataCanvas公司荣获智能制造领域多项殊荣
- ABAB-740新语法
- FR9811S6 SOT-23-6 23V, 2A Synchronous Step-Down DC/DC Converter
- Lease recovery system based on PHP7.2+MySQL5.7
- 字节最爱问的智力题,你会几道?
- 小身材有大作用——光模块基础知识(一)
- 智能日报脚本
猜你喜欢

Simple implementation of a high-performance clone of Redis using .NET (1)

深度学习中数据到底要不要归一化?实测数据来说明!

Android 技术面试准备(含面试题及答案)

4500字归纳总结,一名软件测试工程师需要掌握的技能大全

【倒计时5天】探索音画质量提升背后的秘密,千元大礼等你来拿

"Global Digital Economy Conference" landed in N World, Rongyun provides communication cloud service support

LeetCode-48. 旋转图像

SmobilerService 推送实现

性能优化|从ping延时看CPU电源管理

深度学习跟踪DLT (deep learning tracker)
随机推荐
html+css+php+mysql实现注册+登录+修改密码(附完整代码)
LeetCode——622.设计循环队列
SmobilerService 推送实现
Go 语言快速入门指南: 介绍及安装
Lease recovery system based on PHP7.2+MySQL5.7
SmobilerService 推送实现
Simple implementation of a high-performance clone of Redis using .NET (1)
【TypeScript】Why choose TypeScript?
卷起来!阿里高工携18位高级架构师耗时57天整合的1658页面试总结
LeetCode-1796. 字符串中第二大的数字
CDH6.3.2开启kerberos认证
bash case用法
微信为什么使用 SQLite 保存聊天记录?
FE主导打造一个运营活动平台
LeetCode刷题笔记:105.从前序与中序遍历序列构造二叉树
浅谈SVN备份
用于发票处理的 DocuWare,摆脱纸张和数据输入的束缚,自动处理所有收到的发票
[Output each bit of an integer, from high to low.With and without recursion]
【MySQL】数据库进阶之索引内容详解(上篇 索引分类与操作)
LeetCode——1161. 最大层内元素和