当前位置: 首页 > news >正文

OceanBase 列存中多列过滤性能解析

今天有同事问我,列存大宽表场景下,如果在多个列上有等值过滤条件,OceanBase 的性能是不是无法满足要求?

Hi 晓楚,帮评估个OTS替换场景 大概1亿大宽表,查询姿势就是任意字段的组合,进行等值查询+group by/sum这些聚合操作,业务模型大概是这样1亿表,过滤性最强的字段会扫50万左右数据,单SQL OTS现在不超过300毫秒,这个场景能搞定不?主要也要求OB几百毫秒,我还有个疑问,这种场景是不是没有索引合并的能力耗时很难满足业务要求呢?
.
典型 SQL 如下:
200+字段的大宽表,sql大概就是 select sum(xx),count(*) from tb where a = ? and b = ? and c = ? group by d / order by d limit 20 类似这种

答案是:OceanBase 可以轻松搞定这种场景!

OceanBase 列存表是如何处理 a = ? and b = ? and c = ? 这种多个等值条件的扫描呢?

按照一般的思路,我们会将这三个表达式下压到存储层。存储层需要先按照 a = ? 扫描出所有结果行,得到第一组rowid,然后按照 b = ? 扫描出所有结果行,得到第二组rowid,最后按照 c = ? 扫描出所有结果行,得到第三组rowid,然后把这三组 rowid 求交集,得到最终结果。

这个思路并没有什么问题,在最坏的情况下我们就是这么做的。因为只需要扫描三列,一般是可以做得非常快的。1亿行,百毫秒级绰绰有余。

但实际上,OceanBase 存储层做了更多优化。比如,首先做 a = ? 扫描的时候,就可以快速知道哪些微块上根本没有满足条件的数据,那么在处理 b = ?c = ? 时就可以快速跳过这样的微块。

再比如,在先计算哪个条件的选择上,可以选择过滤性最好的条件先做,这样就可以跳过更多的微块。

还比如,过滤性不确定的情况下,还可以动态地选择三个表达式中的一个来做,做一段时间发现过滤性不好,就换另一个表达式。这样动态切换,可以让计算过程具备更好的自适应能力。

对于 OceanBase 来说, a = ? and b = ? and c = ? 是最好处理的场景了,实际场景可以比这个复杂得多,比如还有 or 条件的时候应该怎么处理?这些 OceanBase 都有相应的优化策略。

基于存储层的这些优化,我们在 5000万行的数据集下做了一些简单测试,结果如下:

在这里插入图片描述

可以看到,在两个过滤条件的场景下,5000万行的表,只需要 50 毫秒即可过滤出结果。由此推算,1亿行的场景,也一定可以满足客户对延迟的需求。

http://www.lryc.cn/news/377145.html

相关文章:

  • 嵌入式实验---实验二 中断功能实验
  • 在 Visual Studio 2022 (Visual C++ 17) 中使用 Visual Leak Detector
  • 基于IDEA的Maven(properties属性配置)
  • 边缘计算(Edge Computing)_关键概念/优势/应用场景
  • idea关联gitlab仓库,访问报错
  • 【Hive】new HiveConf()时加载的配置浅析
  • Glide 缓存机制研究及同命名图片的替换回显
  • 一键简易桌签(带背景)-Word插件-大珩助手
  • 如何解决centos停止维护后更换Debian11平替?
  • 服务器雪崩的应对策略之----熔断机制
  • RestClient操作索引库和文档
  • 【设计模式深度剖析】【11】【行为型】【解释器模式】| 以算术表达式求值为例加深理解
  • MySQL8,Navicat能登陆成功,密码却忘记了
  • 游戏中的寻路算法研究
  • 【AWS SMB】关于AWS 中小型企业 (SMB) 能力介绍及注意事项
  • 中年之恋:重返青春的旅程
  • 人工智能中的监督学习和无监督学习
  • 深度学习500问——Chapter12:网络搭建及训练(1)
  • HuggingFace CLI 命令全面指南
  • FreeRTOS源码分析
  • python实战:将视频内容上传到社交媒体平台
  • 【深度学习】sdwebui A1111 加速方案对比,xformers vs Flash Attention 2
  • 5分钟了解单元测试
  • VSCode之C/C++插件之宏定义导致颜色变暗
  • 自然语言处理概述
  • 用Rust和Pingora轻松构建超越Nginx的高效负载均衡器
  • 华为云与AWS负载均衡服务深度对比:性能、成本与可用性
  • Vue65-组件之间的传值
  • Java零基础之多线程篇:线程生命周期
  • 技术差异,应用场景;虚拟机可以当作云服务器吗