clickhouse布隆过滤器跳数索引最佳实践

news2025/1/23 10:25:25

背景

本文来聊一下clickhouse的这个列式存储数据库的布隆过滤器的跳数索引类型,来了解它的数据结构,它可以为那些查询类型提供查询优化。

跳数索引-布隆过滤器

首先布隆过滤器家族的跳数索引分成三种类型: ngrambf_v1,tokenbf_v1,bloom_filter其原理是类似的,都是基于布隆过滤器数组来过滤数据,我们先看一下他们的数据结构:
在这里插入图片描述
我们重点讲讲tokenbf_v1和ngrambf_v1这两类跳数索引,这两类跳数索引都是作用于字符串类型:String,FixString上的。
1.tokenbf_v1跳数索引先把字符串的列按照空格等分解成一个个token字符串的形式,然后对这些token集合构建布隆过滤器,我们知道布隆过滤器存在假阳性的问题,也就是虽然布隆过滤器判断包含某个字符串,但是实际上这个字符串并不存在这一列的数据中.所以这个跳数索引只支持如下类型的查询优化

s LIKE '%test%'
NOT s NOT LIKE '%test%'
s = 1
NOT s != 1
startsWith(s, 'test')
endWith(s,'test')
s in ('test','test1')

不支持返回结果预期为false的查询优化

NOT s LIKE '%test%'
s NOT LIKE '%test%'
NOT s = 1
s != 1
NOT startsWith(s, 'test')
NOT endWith(s,'test')
NOT s in ('test','test1')

这里我们可以看出跳数索引是支持模糊查询也就是带%通配符的查询优化的,比如它会先去查找test这个字符在布隆过滤器中是否存在,如果不存在,就可以跳过这些数据块的扫描了.
2.ngrambf_v1类型的跳数索引先把字符串的列按照固定的N个字符的形式把字符串分解成一个个token字符串的形式,然后对这些token集合构建布隆过滤器,这个跳数索引支持和tokenbf_v1一样的查询优化,唯一要注意的比如这个ngrambf_v1使用N=4个字符分割字符串,那么对于s like '%tes%' 这种常量的长度小于4的查询是没法使用ngrambf_v1(4)进行优化的,常量的字符串长度必须要大于等于4才能使用ngrambf_v1(4)进行优化.

这里简单对比一下Set跳数索引和布隆过滤器索引的使用场景,Set跳数索引比较适用于比如Loglevel等低基数并且字段值聚集良好的列,而布隆过滤器比较适合于message日志消息字段,因为当对message字段进行字符串切分成token后,每个gradularities*8192条记录中会产生大量的原子字符串,只有使用布隆过滤器这个跳数索引才能有效的压缩存储,此外我们经常使用这个message字段进行模糊搜索的需求,当然如果基于Loglevel字段+message模糊搜索字段查询就可以既使用Set跳数索引过滤数据,也可以使用布隆过滤器索引过滤数据了.

最后简单的说下使用跳数索引一定要进行测试,我们可以使用trace级别的日志或者explain语法看下服务器的日志确认跳数索引是否真的可以优化查询,并且这个优化的效果要平衡跳数索引自身IO带来的开销要好得多,这样的跳数索引才是有用的跳数索引.

参考文献:
https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#functions-support

https://clickhouse.com/docs/en/optimize/skipping-indexes#skip-index-types

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visual Studio 2022如何安装和使用MSDN

我是荔园微风,作为一名在IT界整整25年的老兵,在后台收到提问,问我Visual Studio 2022如何安装和使用MSDN,这个我之前也没有在这个版本上装过MSDN,我之前是在Visual Studio 2017版上装过MSDN,那既然有人问了…

蓝桥杯【第14届省赛】Python B组

测试链接:https://www.dotcpp.com/oj/train/1093/ 测试结果还是蛮惨烈,主要原因有几个: C 语言网的时间限制是 3 s:但实际比赛的时间限制都是 10 s 起步,甚至有 30 s 的莫名其妙的运行报错:我不知道 D 题…

浅谈ChatGPT的关键技术与落地发展

分享嘉宾 | 刘焕勇 文稿整理 | William 1、从大规模语言模型看ChatGPT的起源与本质 ChatGPT可以拆开分为Chat和GPT去理解,前一个表示一种应用形式,后一个是生成式的模型。在百度百科里面定义为ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c…

数组与字符串C语言代码总结

《array》 arr.c #include <stdio.h>int main(int argc, char *argv[]) {int a[2][3]; int i, j;for (i 0; i < 2; i) {for (j 0; j < 3; j) printf("%p ", &a[i][j]); //验证二维数组连续性}printf("%p %…

d2l Markov序列模型

本节的任务是使用Markov模型对后续序列进行预测&#xff0c;使用sin函数&#xff0b;噪声绘制1000个样本点&#xff0c;取tau为4&#xff0c;即利用后四个的信息预测第五个。 目录 1.构造样本点 2.抽取iter 3.构造网络 4.训练 5.预测 5.1单步 5.1多步 1.构造样本点 T …

【程序人生】5个月从职场打杂到月薪14000的女测试工程师逆袭之路

大家好&#xff0c;我是来自湖南的一位辣妹子&#xff0c;毕业于一所工业大学&#xff0c;大学的专业是软件与工程&#xff0c;其实也算是本专业&#xff0c;大学期间掌握的知识也算比较广&#xff0c;各个方面都会一丢丢&#xff0c;就是不是特别深入。 之所以这么说&#xf…

nginx配置文件介绍

nginx配置文件介绍 nginx默认的配置文件是在安装目录下的 conf目录下&#xff0c;后续对 nginx 的使用基本上都是对此配置文件进行相应的修改。 配置文件中用#符号表示注释内容。 配置文件主要包括三部分&#xff0c;main、events和http main 用于进行nginx全局信息的配置…

Netty应用篇

Netty应用 粘包和半包 服务器代码 public class StudyServer {static final Logger log LoggerFactory.getLogger(StudyServer.class);void start() {NioEventLoopGroup boss new NioEventLoopGroup(1);NioEventLoopGroup worker new NioEventLoopGroup();try {ServerBoo…

【WebRTC技术专题】未来可期,WebRTC的诞生发展的概述介绍(1)

近几年实时音视频通信应用呈现出了大爆发的趋势。在这些实时通信技术的背后&#xff0c;有一项不得不提的技术 ——WebRTC。 前言背景 2021年1月26日&#xff0c;W3C&#xff08;万维网联盟&#xff09; 和 IETF &#xff08;互联网工程任务组&#xff09; 同时宣布 WebRTC&…

企业办公WLAN覆盖方案的设计与实现_kaic

企业办公WLAN覆盖方案的设计与实现 摘要&#xff1a; 无线LAN技术的快速发展已经使它在当今的数字通讯行业中变得越来越重要。它的优点包括易于部署、灵活操作、价格实惠&#xff0c;使它能够在不同的场景中提供支持。无线LAN技术已经被许多不同类型的人所接受&#xff0c;并且…

linux下使用lftp的小结

lftp的功能比较强大&#xff0c;相比原来用ftp&#xff0c;方便了很多。 1、登陆&#xff1a; lftp ftp://yournamesite pwd:***** 或 open ftp://yournamesite 2、基本操作&#xff08;转&#xff09; lftp使用介绍 lftp 是一个功能强大的下载工具&#xff0c;它支持访问…

React-Native 创建App项目

# React-Native 创建App项目 环境搭建 概述 RN的官方网站百度谷歌 安装环境介绍 操作系统&#xff1a;win10系统手机&#xff1a;安卓手机真机一部或夜神模拟器必须安装的依赖有&#xff1a;Node,JDK,Yarn,Android SDK,Python2 Node的安装 先到官网去下载node版本&#…

Cypress触摸芯片自己做的demo 代码

1.前言 &#xff08;1&#xff09;cyprees芯片主要是可以做一些触摸的检测并实现一些IO输出&#xff0c;使用的工具psoc creater &#xff08;2&#xff09;psoc creater 可以i直接通过GUI的方式配置一些GPIO的状态以及集成的功能模块&#xff0c;编译后&#xff0c;我们可直接…

基于深度学习的花卉识别

1、数据集 春天来了&#xff0c;我在公园的小道漫步&#xff0c;看着公园遍野的花朵&#xff0c;看起来真让人心旷神怡&#xff0c;一周工作带来的疲惫感顿时一扫而光。难得一个糙汉子有闲情逸致俯身欣赏这些花朵儿&#xff0c;然而令人尴尬的是&#xff0c;我一朵都也不认识。…

2022蓝桥杯省赛——砍竹子

问题描述 这天, 小明在砍竹子&#xff0c; 他面前有 n 棵竹子排成一排&#xff0c;一开始第 i 棵竹子的 高度为 hi​。 他觉得一棵一棵砍太慢了&#xff0c; 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用&#xff0c; 假设这一段竹子的高度为 H&#xff0…

UNIX环境高级编程——系统数据文件和信息

6.1 引言 UNIX系统的正常运行需要使用大量与系统有关的数据文件&#xff0c;这些文件都是ASCII文本文件&#xff0c;并且使用标准I/O库读这些文件。 6.2 口令文件 UNIX口令文件是/etc/passwd&#xff0c;每一行包含下图中的各字段&#xff0c;字段之间用冒号分隔&#xff0c…

除了Jira、禅道还有哪些更好的敏捷开发过程管理平台?

无论是从国内的敏捷调研开发调研报告还是从国外的敏捷状态调查&#xff0c;工具支持一直是决定敏捷成功的关键因素之一&#xff0c;它们可以帮助团队提高软件开发的效率、质量、协作和满意度。选择合适的敏捷开发管理工具&#xff0c;并正确地使用它们&#xff0c;是每个敏捷团…

JAVA SMART系统-系统框架设计与开发

SMART系统是一个新型智能在线考试信息管理系统&#xff0c;该系统主要实现了学生在线考试与评估以及教师对学生在线考试信息的管理和维护。本文按照SMART系统的非功能性需求&#xff0c;基于Struts、Spring、Hibernate三种开源技术&#xff0c;构建了一个具有良好的可扩展性、可…

英文译中文翻译-中文英文翻译在线翻译

如果您需要在线翻译英文文本为汉字&#xff0c;您可以使用各种在线翻译服务或应用程序。以下是一些您可以尝试的在线翻译服务&#xff1a; Google翻译&#xff1a; Google翻译是一款广受欢迎的在线翻译服务&#xff0c;可将英语文本翻译成汉字。只需将需要翻译的英文文本复制粘…

MFC动态库封装

1.MVC的设计模式的使用 经典MVC模式中&#xff0c;M是指业务模型&#xff0c;V是指用户界面&#xff0c;C则是控制器&#xff0c;使用MVC的目的是将M和V的实现代码分离&#xff0c;从而使同一个程序可以使用不同的表现形式。其中&#xff0c;View的定义比较清晰&#xff0c;就…