粉丝95获赞765

click house 是一种什么样的数据库?相信很多做大数据开发的小伙伴呢,都已经使用过 click house, 我呢是最近才开始研究使用的, 今天就来给大家聊一聊这段时间以来我对 click house 在使用上的一些感受。我们知道,当 click house 被大家所熟知的时候,其实市面上早就已经有了非常多优秀的分布式数据库产品。 哎,他之所以能够在众多优秀的数据库竞争对手中脱颖而出,想必一定有他的过人之处。那么接下来我将从以下四个方面来谈一谈我对这款数据库的理解。第一个,我们从他的组织价格上来看, 它既是一个单实力的数据库,也可以是由多个实力联合在一起来组成的数据库集群。只不过这个 集群的组织形式呢,他并不是我们通常见到的 master slaver 架构组织形式,对于每一个 clear cos 实力来说,他们都是平等的关系,而他们的集群则是以表为单位进行组织的, 通过选择不同的建表方式来构建。具体做法则是选择有集群属性的表引擎,比如 replicated multitree 以及 disrupted。 这两类表引擎 分别代表了表的副本集群以及表的分片集群。只是这个副本规则或者分片规则都需要我们自己手动来配置。而且我们知道啊,一般对于集群来说, 想要数据能够在不同的机器之间完成数据的自动传递和交互,就额外需要一个指挥协调的人。而对于 click house 咨询来说, 这个指挥协调的人可以是 keeper, 也可以是 click house 自己提供的一个服务叫 click house keeper。 第二个,从建表语句上来看,他跟其他数据库最大的不同点在于,根据不同的业务场景,他提供了四大不同类型的表演情, 而且每个大类型中又细分了多个不同功能的小类,表面上看起来呢,让人眼花缭乱。 在实际应用中,我们用的最多的是 mojetch 家族提供的表引琴,在用这个表引琴建表的时候,有个特别需要注意的点,就是你的建表语句必须要提供几若干各自断的 odby 说明。 原因在于这个引擎叫 mojitch, 它是一种带锁引的数据存储结构。而所谓的锁引呢,本质上就是数据根据一定规 规则进行排序,而这个 order by 这段就是显示提供给目击区这种数据结构的排序依据。第三个, clear house 还提供了基于多个外部数据源的 integration 功能, 简单理解就是 click house 可以直接作为多个外部数据员的客户端,比如各种数据库、文件系统、消息对列等。 通过直接创建带对应数据源引擎的表,就可以通过 click house 直接读取到这些外部数据。而且还可以通过在 click house 进一步创建这些外部数据源的雾化仕途,进而把这个外部数据源给接入到 click house 内部存储起来。 这样一来呢,就实现了直接通过 click house 将外部数据啊导入的目的,省去了用额外的数据导入工具以及 及可能的 etl 开发成本。第四个,官方宣传它比一般的 olap 数据库快,给出的原因呢,除了有劣势,存储数据带锁引、数据压缩、向量化查询等很多数据库都具备的功能化,它区别于其他分布式数据库非常重要的一个原因在于, 你的每一次数据查询,它都会根据你的数据分布情况,最大限度地使用机器的 cpu 和内存资源, 通过多线程来并行执行查询动作。如果当前你的查询数据量很大,但是机器资源又不足的话,是很有可能直接把 k house 进程给干崩掉的。 而且经过一段时间的使用后发现它的使用成本啊比我们以往的一般分布式数据库都要高。主要体现在建表时需要太多 我们人为的思考和配置。比如建表时,除了思考必要的表字段外,还需要思考是建本地表、副本表还是分片表,是否需要创建分区,根据哪些字段进行排序,选择什么样的表引擎等等。而对于一般的普通分布式数据库来说,我们是不需要思考这么多内容的, 比如 elect 设计。当然,前期建表的繁琐带来的就是后续查询数据时的更加高效,而这也许就是 click house 在设计上的取舍。

quick house 是什么? quick house 是俄罗斯搜索巨头 yannex 公司在二零一六年开元的一个极具战斗力的实时数据分析数据库, 是一个用于欧乐的烈士数据库管理系统,简称 ck。 quick house 的技术特点包括,现代化 mpp 架构、秒级查询、返回延时、支持标准 sql 语言、兼容 masql 协议、向量化执行器、多样化的数据库引擎和表引擎、 极致的数据压缩存储,完备的 d b m s 特性。为降低数据治理门槛,帮助企业更简单快捷的进行数据治理,万山数据团队研发了胡仓数据治理系统 d g 四哦,该系统具备以下特点, e d。 门槛主要体现在,一、系统部署低门槛,几乎可以解压直 接运行。二、数据集成低门槛,不管是数据库还是接口数据源,均可使用相同的 sql 函数实现数据增量同步。三、数据治理任务开发低门槛,所有的数据处理逻辑都通过 sql 完成, 无需其他编程语言和工具,无需编译。四、数据分析低门槛,拖拉拽和点选即可完成复杂的数据分析。二、效率高,主要体现在一 千万级数据治理和分析可以在两级出结果,完全可以实现一边和业务对规则一边实现,即便研发边测试边上线。二、数据整合高效,一条 sql 即可完成数据集成。三、见效快,一天之内可完成系统实施,一周之内可将多元易购数据整合, 完成数据仓库建设,一月之内看到数据治理后的应用效果。四、国产化,已适配国产芯片、国产操作系统、国产数据库。

稳定高效的 mexico 到 click house 数据同步方案 click house 因其卓越的分析查询速度备受赞誉,但如何稳定、高效、简单的将 mexico 数据同步到 click house 却成为不少开发者和 dba 的难题。市场上有很多同步工具,但哪款更好用呢?今天我们来对比三款数据同步工具。 nine data、 click out 自带的 materialize、 mysql 以及 bifrost, 看看他们在同步 mysql 到 click house 的差异。首先,从整体功能上来看, nine data 在数据复制方面的表现尤为突出,无论是增量 d、 d、 l 的处理、自断映射的准确性,还是无主见表的支持 以及功能丰富度上,都展现出了强大的实力。在结构映射对比方面, nine data 考虑的更为细致,例如 mysql the daytime 类型会被准确映射到 playcast daytime 六四,确保 数据精度的完整性此外, nine data 对于 mexico 全部数据类型的支持更完整,如 jason 类型几何数据、地理信息仅有 nine data 支持。在无主建表支持方面, nine data 通过对记录做特殊的标记处理,很好的支持了无主建表的数据同步,这在其他两款产品中是无法做到的。 对于数据增量,同步,支持各种类型的 ddl 是保障同步链路持续稳定的关键。 ninety 团队无主见表 ddl 支持自断删除、自断明修改等特殊操作 均做了适配处理,可以很好的保障复制链路的稳定性。同时, nine data 还提供了可视化的错误修复和跳过功能,可以最大限度的保障链路持续稳定。除了以上基础功能, nine data 还支持数据对比、限流过滤等高级功能,进一步提升数据质量 同步稳定性。那么性能如何呢?我们通过 suspense 工具进行了全面的性能测试,结果显示,在全量同步中, nine data 的性能高至三十六点二瓦 rps, 而在增量同步中则是 materialize mysql 最高。但需注意的是, materialize my sql 在错误处理上较为简单,一旦报错需要全部重新同步。如果你也想实时准确的实现从 mexico 到 click house 的数据实时同步,综合考虑功能和性能, nine data 是一个不错的选择。 nine data 让每个人用好数据和云。

click house 它的那个 c 口的这个连接,它呢有几个比较重要的算法?上一期这个这个博客,上一期呢也是跟大家讲过, click house 里面 作为一个实时的这样的一个数据仓库,它的一些的连接,它支持非常非常多的这种 c 口的连接。之前我们也讲过,大概支持六种,内连接、外连接、半连接、相似链接等等一系列的。那么我们看一下它这个 c 口链接里面,它还是有有一些经典的一些 脚印的一些算法,就是表和表这些连接之间的一些算法,这些算法也是有些时候是非常快,但是呢他要消耗些内存,有些时候呢他会慢一点,但是他可能他需要的内存就会比较少。那么有些在不同的应用场景当中,我们可能要选择不同的算法, 等于是这样,今天呢,我们主要是起来聊一聊 click house 里面比较经典的这个三种的 joining 的这种算法。三种 joining 的算法,那么在讲这个算法之 前,我们先来看一下 click house 一个一个查询的一个 popline, 那我们可以看到他有一句 c 口出来的时候呢,他先会给服气啊,然后服气。这边呢,他会根据你的 c、 p、 u 所在的和数,那他会起和微核,他就会起一个现成的他这个例子,他说他有四个 c、 p、 u 的内核,他这句 c 口进去之后呢,他会分别起 这个子的查询,他等一下从这个 table 的 data 里面自动地把这个数据能够拿出来之后过滤,过滤完之后聚合,聚,聚合完之后排序,排序完之后再 把这要的这个数据进行合并,合并之后呢再进行一个返回 limit, 比如说一千条的这样的一个操作,然后再把这个查询的结果返回给这个客户端,他的整个一个操作,啪啪啦的整个一个流程是这样的,所以他是这个是并行的,他在很多的这个操作当中他是并行的,那这个并行的话呢?他他可以是设置的通过一个 max threats 这样的一个设定,你可以有一个全局的这样的一个设置,当然你也是可以在每条语句当中指定这个有 多少个 max three 的进行并行啊,它是这样的好,呃,这个是 click house, 它的这个最基础的它的查询语句的这样的一个原理, 为什么他会这么快?他就是因为充分的利用了我们 c p u 的这个内核,那 c c p u 的内核充分的就是利用所有的这个硬件的资源在克里 cos 里面,那么他并行的话呢,那么他可以大大的缩短这个查询的时间,他是这样的一个原理。 好,那么我们来看一下他脚印操作的话,他目前也是一样的,他可以最大效率的用到这些资源。他有算法,六种不同的算法,他在这里面讲啊,他有 rat, 就直接的这个并行的 hash, 还有一个 hash 算法,还有个 green hash 算法,还有一个这个就是 是全排序的 merge, 还有一个是 merge merge 的这种算法,他这个是有两个轴的,一,这个呢就是靠近,越靠近这样越快,越靠近这个上面他所需要的内存就越多,他等于是这样,当你内存用用的少的,他相对来讲他这个速度就会比较慢一些,那么他比较适合于一些 表非常非常大,数据量非常非常多啊,你的内存没有这么多的情况下,你不得不用这些,能够 把这个查询啊,能够给查出来。他等于是当你的表的数据量比较小,或者你你的整个服期内存比较高的时候,那你可以用这些算法,可能是来讲他的速度也会比较快,同时他也要消耗更多的一些内存。今天我们主要讲三个 hush 的算法,一个并行,一个 hush, 还有一个 grace hush, 这个三个算法我们今天会来比比较一下,给大家也提供些例子,来看一看。到底 在 click house 里面,表和表之间链接用这个 hash 这个算法的时候,这三种不同的 hash, 它使用的不同的场景 等于是这样。好,后面他这个两种算法是在下一篇的博客当中,我们再会来讲这个东西。好,我们先来看这样一个例子,这个例子呢上次也是讲过的,什么演员还有一个是角色,他两个, 那么这个两个两个表他也是分别有大小的,演员这个表呢,他就有一百万的数据,那么演员和这个角色的这张一对多的这个表的话呢,他就有一亿条数据,他是等于是这样,所以大家记 记记住是演员这张表相对来讲他比较小,这张表的话呢,要大一百倍,他等于是要大一百倍,那么我们看看他到底有些什么差异,我觉得这个还是很有价值的。首先他在实验室的这样的一个 kick house 的这个 server 上面呢,他最大的 max three 的话呢,是三十,三十 这个,所以他在做查询 papilon 的时候,他默认的指定了一下就是 marx red 等于二,那么他可以看得出来这个区别。首先他先介绍了一个 hash join 啊, hash join 的话呢, 它是需要它的这个操作的话呢,主要是大家看一下,它主要是在内存当中建这样的一张 hash 的一个 table, 它有右半边的这个数据, 因为它设了两个 max three 的,所以它可以定型的把这个数据从右半边的这个表加进来,再把左半边的表加进来,完了之后再把这个两张表做一个交易的这个操作,操作完了之后把这个数据返回虎亏了,它等于是这样, 所以你看它,它这个查询语句里面后面它有个 setting, 这一部分是比较重要的啊。第一个的话它就是 marks red, 它用了二,当然你也可以用四四的话,它就是可以并行四四个,当然它现在是用了二。另外它 join 的操作用了 一个哈士的这样一个操作,哈士的这个操作呢是这个目,目前这个并行哈士和 grace 哈士这个三个操作里面速度是中等的, 是是是是排在不是最快,但是消耗的也是中等的,一般我们用的会比较多,所以,但大家要记住的是他连接的时候是右右边的这个表,先做一个 连接操作,先读取数据,就右边的表连接左边的表,一定要记住的是右边的表连接左边的表,不是像他表达式一样,左边的表连接右边的表,所以右边这张表 尽可能要小,左边这张表的是是右边这张表,数据小的时候,他这个 hostable, 他的所使用的内存就会少,同时他连接的速度也会更快。我们回头可以看一下这个例子,这个主要是这张图表的这样的一个操作,我们看一下他,他使的这个算法,他几乎所有的表的连接 类型,我们之前讲的六种类型他都是可以支持的,他都是可以支持的。好,那么我们先看一下这个在右半边,一般建议是数据量小的在右半边,在这我们解释过有两张表,一个是表,一个是主角跟角色的,这张表是一 一百万,相差一百倍,你可以看他用这个哈数,他是零点八一七秒,他就查出来的速度性,性性还是非常快的,他等于是这样,那么我们把它反过来,这张表左边这张表是一百万,右边这张表是一,你看就五点几几秒,他就是相差是蛮大,相差将近七倍 啊,七倍不到一点。所以的话呢,一定要记住的是右边这张表要小,如果用哈数这个算法,右边这张表要小,左边这张表大,他等于是这样的好,呃,这个是他解释这张表去解释他为什么是这样的,这个我们就不看了,用的这个内存也是 不一样的,那肯定是这个右半边,这个表小,连接所需要的内存肯定少了,速度肯定快,这个是要关键。他的解释了一下为什么他右半这个 编的这个表是这么重要,因为它有一个叫 resize, 这样一个操作,如果你比较小的,那么他做这个操作就会比较快,他等于是这样 我们就不看了。好,那么接下来我们再来看一下 hash joinhahch johnhahch john。 那么有些时候我们左半边和右半边这个表都很大,那怎么办?我们可以用这个并行的这个 hh john 来操作,两张表差不多大,那么我们怎么办呢?大家都是一亿条数据,那么你可以用并行的 hh john 这个操作来做,那他只要是在这个 hash join 的这个算法里面用这个并行的 hash 就可以了,指指定一下这个算法你就可以来用了。他这个原理就跟刚才他在内存当中只有一个 hash table, 那么现在的话呢?他会建,因为他现在 max spread 是二,所以他 他会借两个哈士推波,他等于是这样的,那么这样他并行的有多个哈士推波,这样他他做起来肯定死更快点,还是一样的,这个原理就是尽可能你的右半边的这个推波要小,尽可能你的右半边的推波要小,他等于是这样, 它因为可以有多个 hashtable, 所以的话呢,它这个速度会更快,我们可以看一下啊,它这个结论,它这个并行的那个 hashtable 的这个操作的话呢,它有一个操作,有一个交易的操类型是不支持的,就是只叫 asof, 这个就是呃,就是比较这个相似的这个呃就是相似的这种数据的这种 左半边和右半边这个时间上面差了这个几秒,他比较接近的进行操作叫 asof, 他目前是不支持的,其他都是支持的,我们也可以看一下,还是一样,如果用哈士的这把,那么这个表大一亿条数据,你看五点几秒, 但是如果用并行的话,它可以减一半的这个时间,因为它有两个内内存,当中维护了两个 hashtable, 它等于是这样,所以它的性能会更好。好,当然它需要的内存会更高,需要的内存会更高, 需要的内存也是 double 了,它等于是这样,它需要的这个在 hush table 要去维护,在这个内存当中,这个会更高。那么它在这个三个哈数算法里面,并行的哈数算法肯定是最快的,效率是最高的,但使用的内存也是最多的,它是这样。好,最后我们再来讲一下最后一个算法,就 green grace hush join。 grace hush join 的话呢,它就是 适合于更大的表,因为你的这个内存不够啊,你用那个哈士的这个算法,或者你用并行的哈士算法,这个哈士表在内存当中会导致 out of memory, 那么连接不行啊,那么这个时候呢,你只能把这个哈士的这个 table 放在临时表里面去创创建这个算法 叫 grace hash join, 当然它的速度是最慢的,它消耗的内存也是最少的,消耗的内存也是最少的。一样的啊,原理也是一样的,当然它在这个里面的除了有一个这样的一个 grace 哈,是的,这样一个东西之外,他还有一个叫桶桶,分了三个桶的话呢,就是相当于他把这个 hashtag 啊,就是分了三片,然后可以进行并行,当然你也可以分更更多片,分的片数会多一些的话,有有比较大的概率是可以把这个性能进一步提升的, 但是他对这个 i o 的访问操作可能会要求会比较高了。嗯,我们可以看一下,那么他还是一样的这个哈士推股呢,他是建立在那个此盘上的,那 它是等于临时的表,它等于是,那么这个也是一一样的,内连接,左连接,外连接,它,这些都是能够支持的,除了这个 a, s, o, f 的这个表的连接是不支持。我们对比了一下,用 hash 算法,它这个一亿条数据在右 半边五点几秒,如果是用 grace 哈数的这个算法就是不用内存的话,那么他要十三秒,还是等于是这样,那这种算法的话,一般就是你内存不够的时候,你 bout out of memory 的时候你才用,因为它的性能会差一点。对, 如果你的这个 bucket 就是分筒 sam, 它射了八,你会发现射了太高,有可能也不一定它的这个查询时间会更短,因为它取决于你的 i o, 你的那个磁盘的 i o 的这个性能,它等于是这样, 这个他是解释,这个我们就不用看了。好,我们看到最后。呃,最后他的结论,我们看一下最后他的这个结论,他也给了一张比较直观的一张图。呃,我们今天讲了这个三种的这个 click house 里面的表连接的这样的一个哈数算法的这样的一个。 呃,三个算法,这是速度是适中的,是速度是中,用的内存相对也是中,那么它的性能的话呢?也是中并行的。这个 house 它 的速度是最快的,你你,你看它的速度是最快的,但是它需要的号的那个内存也是最多的,它对适合一些内存比较资源,硬件资源内存比较多的这种情况。那么 greenshars 的话呢,就是内存是用的最少的, 性能是最差,他的性能是最差他这个四个这个风筒,他是性能在这那八个风筒的话呢,他的性能反而会更弱一点,但他消耗的这个资源 会更少一点,它是它是有这样的一个差异,所以的话呢,我们 click cos 的话呢,它的功能是非常强大的,它不但能够支持各种各样的这个 表和表之间的连接功能,而且他能够指定你用一些什么样的算法。因为你在不同的应用场景,你不同的这个表的连接,你自你的服务器的这个内存和你的 cpu 的资源情况不一样,你的那个磁盘的 io 的性能情况不一样,你可以选择不 不同的这种算法的去满足你对这种大数据查询的这些功能上面的这个要求,而且能够满足资源的约束性能的这些要求,他都是能够找到你自己合适的。在这篇文章里面,我们也了解到,当你在 click house 里面,你的这个 做表和表连接的话呢,尽可能你右右表右半边的这个表,你尽可能要用的小一点,如果是表,我们前面也看过,如果你右半边的表小,他的查询性能会更优 好,大概是这样的,所以总结来讲,这个三个算法,他的不同的应用场景 greens 的话是最慢,因为他消耗的内存是最少的,但是他利用了那个磁盘上面的 临时表去帮你维护数据,所以它的性能是最慢的。像这种并行哈数,它的性能是最好的,但是它消耗的内存是最多的。哈数这种算法一般情况我们都是用一个哈数算法就够了, 一般就足够了,它是一个速度适中,内资源消耗也是比较适中的这样的一个算法。而这种呢,一般我们比较常用并行,它是我们对性能数据的返回有极端要求的,可以用 病情哈数的这种算法。如果我们是离线计算,表的数据非常非常大,我们对那个数据返回的时间呃,能够慢一点,能够接受,能够容忍,那么用古力斯哈数是比较合适,它特别适合于做一些晚上的一些定时任务的一些离线计算,这个是比较合适的好。

嗯,克里考斯他虽然本质上呢他是一个极快的这样一个数据库,然后他针对那个实施分析的系统进行了优化,但是尽管他查询足够快,但是我们 还是呃有有些应用场景,还是希望呃他在快的基础上能够更快。然后呢他我们呢就是今天的话呢,就会讲三个内容,三个内容啊,呃主要是针对这个 可以靠死呃如何使用这个主见啊?然后能够让自己的性能做得更好。那么另外一部分的话呢,主要还是讲这个,我们之前也是讲过可以靠死里面有一个功能叫投影 呃 projection 的这个功能。那么第三个的话呢,主要还是介绍一下呃克力克 house 里如何查询可以处理并发并发的这个性能,他等于是这样,这个跟大家稍微介绍一下好吧。啊那么第一部分的话呢,我们还是来讲一下就是克力克 house 啊,克力克 house 它的表结构的话呢,它是它的设计的初衷就是 是每秒钟可以插入几百万条的数据,然后呢可以存储呃就是几百个 t b 这样的一个数据量啊,就是非常非常大的这种数据量来设计的这样一个数据库啊。那么 克里考斯当中呢,他快速查询的速度呢,主要是因为他有一个稀疏的这样一个主锁引来实现的啊,他等于是这样,那么他通过这个主锁引呢,可以大幅大幅度的就是可以去细呃呃减少这个可以靠实 需要通过词盘去读取的这个数据量啊,他等于是这样啊,那么呃可以靠是主所引的设计的话呢,他主要基于的是二分类的这个二分的所引发啊,所所引算法啊,那么这种所引算法的话呢,就是 呃,他呃在呃我们可以看到他的官网上也有一篇文章啊,这篇文章里面也是介绍了一下,就是说他的大概的一个原理啊,这个跟我们原来在 大学里面学的那个数据结构,最简单的就是二分类的这个呃搜索算法是非常类似的。比如说他这边举了一个例子,如果我要查询四十二这个数字,对吧?那你在这个队列当中,你先除以二,然后因为他是按照那个身序排序的,所以的话呢,他除以二之后的话呢,他在三十二到六十四之间,他发现四十二在这个里面,那么他又会在 呃,那么他就会先把这个排序啊,先一分为二,然后在二里面,在这一半里面再去找到四十二,从三十八到六十四里面他,他再去找到四四十二这样的一个数啊,他等于是这样啊,他就是一个典型的二分类的这样的一个搜索的引擎啊。那么 那个 kikos 使用的那个表结构的主缩影的话呢,他其实在呃表中查巡航的这个工作方式的话呢,跟这个方式几乎是类似的啊,那只是说呃他在主缩影当中的话, 他是不是按照这个呃这个所谓的这个行,他是把这个八千一百九十 九十二个行,他会变成一个数据的一个颗粒度啊,他变变变成一个这样一个最小的颗粒度,然后去创建出这样一个组建,他通过这种方式去做啊。啊, 好的,这个之前我们也是呃给大家介绍过的,就是在创建主缩影的时候,他会有一个快啊,他这个主缩影的快,他是把这个八千一百九十二行变成这样的一个缩影,他通过这种方式来编的,他等于是这样啊,当然这个这个行的数量也可以发生变化,也是可以发生变化啊。对,嗯, 所以的话呢,他就是通过这种方式可以让这个我们的查询就是大大加快啊。嗯啊,那么我们再来看这张图啊,这张图里面就讲了一下可以靠字里面的这样一个呃分析的这样 的一个过程啊,就是查询语句的这样一个过程啊,他第一步的话呢,先分析这样的一些查询语句啊,查询语句分析完了之后的话呢,他会把这个 相关的主锁引放到这个主内存里面来,他等于是这样啊,加载到主主的内存里面来,然后呢就是前面讲的,他会根据你要查找的这个目标,根据前面的这个二分类的那个搜索的这个算法,然后在这个主锁引里面把相应需要处理的这个 这个这个这行等于给过滤出来,等于找出来,找出来之后,然后的话呢,第三步的话,然后他再去呃,以这种呃流逝的方式,呃 把它传到,呃,再再把这个行塞到这个组内存里面,然后再处理这些行啊,然后处处理完行之后的话呢,他会得到最终的这个查询结果,他等于是这样的啊,他是通过这个三步而来处理的,所以的话呢,如果我们要把 把这个 kikos 的所有的那个性能要足够好的话呢,第一个的话呢,主要还是主缩影还是比较重要的。那么第二个的话呢,就是尽可能就是把这个 呃主锁眼里面的相对应的行叫近视,近近可能少的加载到内存里面来,那么这样的话呢,他处理的这个行越少,他的这个查询的性能就越高,越快,他等于是这样啊,他整体就是这样的,哎,当然那个 那个在 k 号是有三个主要的这个阶段来来加快这样的一个搜索的这样一个方式啊。那么第一种方式的话呢,就是还是一样的就是他这个主缩影啊,他所就是加载的数据越少,那么你消耗的内存也就越少,那么你这样就越快。 那么另外一种方式的话呢,他可以就是用豫剧核的这种方式啊,回头我们也会讲用 projection 的这种方式啊。那么第三种方式的话呢,就是他把这个呃二分类法,他其实 也是可以并行的把这些记录挑选出来,然后加载到这个内存当中的啊,这个是有三种方式啊,第一个就是用主锁引,对吧?第二个用豫剧和第三个用那个并发啊,用用并行计算,用并发的这种方式去做这样一件事情啊,那么这个就是可以靠是如何去加速这样的一个 呃,我我们的这个查询他这个最基本的原理,最基本的原理哈,那么接下来我们看一下他如何使用主缩影啊?他如何使用主锁影啊?我们讲一个例子,他这个例子的话呢,也是主要是讲这个英国啊,英国的这样的一个呃,这个这个房地产的这样的一个价格啊,他他大概有, 呃,就是呃几一条数据吧。二十七,二十二十七一条数据吧,啊,他有一个这个数据几,然后我们可以查一下啊,可以看一看二十七点六四的迷恋的这样的一个数据几啊, 大概两千多万吧,两千多万的这样的一个数据机,然后我们可以看一下他这个查了一句语句,就是呃,通过我查一下伦敦的这样的一个呃这个这个地区的这样的一个房地产的这个价格,然后按照这个降序 排列啊,他等于是把他查出三句啊,那么这个三句查完之后的话,我们会发现就是说他他等于是全表扫描了,他等于是啊,他这个虽然查询速度非常快啊,零点四四秒就查出来,但是他也是处理了 二十呃,二十七点六四 million 的这个行,他等于是呃做了一个全表的扫描,他等于是讲啊,那么说明这个还是有优化空间的。他等于啊,那么我们可以看一下他这个修 create table 这样的一句语句,我们可以看到啊, 他这个他这个表结构里面的他的这个呃主缩影,他的主缩影是欧德拜,他的主缩影就是缩影。呃缩影的键,他是通过四 四个字段做了一个创建一个组合的缩影,一个的话呢,就是 pose 的扣的一, pos 的扣的二和 jess 一和 jess 二啊,那么我们这一前面查的这个语句呢,主要是根据这个 tom 啊就所在的地区,所以他这个主,所以里面是没有这样一个自断的,所以的话呢,他的查询效率当然是非常慢,他所以要把所有的表结构里面的所有的数据都要去查一遍,所以他才能得到最终的结果啊,他等于是这样啊,那么我们怎么做呢? 当然我们可以根据这个呃这个唱的这样一个字段去重新创建这样一个主缩影。但是我们清楚在克力 cos 里面,一旦你创建完主缩影之后,你的这张表的结构是不能变化的。 呃,如果你要重新去创建这样一个主缩影的话,你要去创建另外一个表,他等于是这样啊,这个是他,呃呃,所以我们在建主所引的时候我们要非常小心,而且要非常慎重的,他等于是这样啊, 啊,我我们可以看到他这样一个例子啊,他这个例子就是说他创建了第二张表啊,他在前面那张表里面创建了第二张表,那么第二张表的话呢?他的 odobai 的这个组建,他主要是根据 tong 和 price 这个两个字段啊, 然后我们可以看到他又查询了前面相同的这样一句语句,对吧?那么他处理的这个行数就大大降低了,他只有八十一点九 千条记录,他等于是这样,那么就少很多了。他等于是啊,他的这个所以主,所以等于是命重啊啊啊。 又讲了一个这样的一个例子,就是这个例子的话,他主要是讲是什么呢?就是呃,优化你那个读的这个哦顺序,他是等于是这样,因为 默认的话呢,可以靠词汇把你这个记录读出来之后,再重新的根据这个 price 进行排序,它等于是这样啊,所以的话呢,它等于是要处理一下这个 price 的这个这个排序的这样一个东, 那么还有一种呢?你可以在你的这个,在你的这个查询语句里面,你强制要求他不做排序啊,就是你读出来的是什么样的顺序,你就是什么样的顺序,他是等于是这样就,呃,避免了再一次排序,如果你是这样的话呢,他的效率还会进一步的提升,他是等于是这样啊,他是有这样一个好处的。