00:00
那理解完索引的基本原理,接下来我们聊聊细节了,呃,那是从索引的作用来讲,那么接下来忽Di它支持哪一些索引的类型,说白了也就是索引的实现方案,实现方式那么简单总结来讲可以分为四大类啊,四大类第一类呢,就是我们前面讲到了布隆索引,它就是用了布隆过滤器来判断,诶,我对应的这一条数据在不在,那这条数据怎么判断,是不是有个呼D器啊,我在在在,别忘了我把这个截了吧。嗯,就这句话。D key啊。这句话大家时刻记着啊。我们的索引数据其实就是这个东西对吧?啊,就是这个东西,那怎么判断这个key在不在呢?这个我们指定了一个数据键,记录键,还有分区路径跟fire group ID文件ID建立一个唯一映射啊,就判断这个文件组里面这条数据在不在呗,啊那判断在不在布隆是很常用的一种啊,它也是默认的配置啊,那我们前面讲呢,它的优点是什么?效率高,而且我不用依赖外部的系统,数据与索引可以保持一致性,缺点就是布隆这种过滤,布隆过滤这种算法它本身的一个假阳性的问题,说白了就准确率,也就是说你说在他还真不一定在,因为你可能说错了啊,因为他有一个哈希冲突的问题啊。
01:34
那么。那是你说不在,他就一定不在,能理解我意思吧?呃,当然它正常来讲用它也够了啊,也够了啊,就是兼顾效率,另外一个是简单索引,简单索引呢,它其实是将我们更新还有删除操作的,这个新数据跟老数据进行什么交易,那么大家看到这个就知道这个操作特别重了,它实现起来就是思路上最简单,但是它的缺点也超级明显,性能太差,你想想那如果数据一多了呢,你这个蚯蚓那还得了啊。
02:13
对吧,那那那那不行啊。那还有一种叫索引。那什么意思呢?它也不是说h base实现什么算法,而是什么呢?将索引的这个数据存放在h base里,那说明什么?说明你的所有数据太多了啊,太多了,那我们在插入数据的时候,我们是不是要插入分区下面的某一个文件组啊,那这个时候你在插入的过程中,呃,迪呢,他会向h base发起这个请求,读取请求,就查一下这张索引表,看一下呃,这个数据在不在,也就是说它的区别就在于索引的存储位置啊,存储位置。我直我直接将全量的索引都保存在h base,你就现查h base呗,就是这个意思啊,对于小批次的key查询效率是比较高的,这是它的优点,但是缺点也特别明显,什么明显呢?你这是要借助外部系统。
03:13
那你增加了运维的压力,再者说如果h base你用的不好,或者说你配置的不对啊,像什么内存GC啊,还有它的线程啊,各种东西你没配好,也就是说你h base并没有用好,这个时候它的QPS上不去,反而成为你的瓶颈。对吧,所以你用h base index的前提是,嗯,你对h base比较了解,你也知道怎么去让h base发挥出它应该有的性能。好马配好鞍吗?能理解我意思吧,再有一个是库底后期版本就开始支持flink了,那这个时候它因为前面这些是针对于Spark而言的用户,D最早它就支持的一个Spark引擎啊,主要支持Spark引擎,那么后期版本才出了一个支持flink,那这个时候依赖于flink呢,它单独对所有的存储可以存在哪呢?呃,可以存储在flink那个。
04:12
S算子的一个状态里面去啊,可以存到flink的状态,因为flink本身是呃,有状态的计算嘛,对吧,它用了flink的状态作为底层的索引存储。每个数据在写入之前都会计算目标的一个8K的ID啊,它的优点呢,就不同于布隆啊,它避免了每次重复的文件的一个查找。那缺点呢,嗯,缺点我觉得可能的缺点就是对于因为你你这个索引是存在这个flink状态里的嘛,那如果你的这个索引数据特别大,那flink的状态是不是变得特别大。那进一步是不是就会影响flink这个checkpoint。
05:00
是吧,另外一方面会影响咱们flink的资源使用,当然你可以对flink进行大状态的调优,你可以使用DB,你可以开启增量检查点啊等等这些,那就看你对flink熟不熟了,是不是啊。好啊,所以我这边注意写了一点啊,Flink只有一种是什么state base index,你就不存在说什么base啊这一些了。其他的index是Spark可选的配置啊,所以你要注意你用的是什么啊,这个是我们who索引,这个索引里面的可选的不同方案不同类型。
我来说两句