kudu学习笔记
文章平均质量分 51
badboynt
这个作者很懒,什么都没留下…
展开
-
kudu compaction操作
对于需要大量数据进行快速写入/删除的集群,可以设置更大的值。后台工作线程会一直处于工作状态,当插入操作比较频繁时,会更多时间片用于 MemRowSets 刷写磁盘变为 DiskRowSets,当插入操作比较少时候,会花更多时间片用于 Delta Compaction/RowSet Compaction,以提升长久的读取和插入性能。这个操作本质上不是为了减少文件数量,而是为了对内容进行排序重组,减少不同DRS之间key的overlap(重复),进而在检索的时候减少需要参与检索的DRS的数量。...原创 2022-08-17 15:59:24 · 730 阅读 · 0 评论 -
kudu scan操作
根据用户查询的timestamp决定在base data的基础上apply redo file或者apply undo file,得到最终数据。Delta数据部分包含REDO与UNDO两部分:这里的REDO与UNDO与关系型数据库中的REDO与UNDO日志不太相同。在关系型数据库中,REDO日志记录了更新后的数据,可以用来恢复尚未写入DataFile的已成功事务更新的数据。READ_YOUR_WRITES 如果客户端A写入了最新的值,那么A的后续操作都会读取到最新值。性能较差,但是出现故障后可以续传。.原创 2022-08-17 15:36:25 · 384 阅读 · 0 评论 -
kudu update操作
这里同样使用了一段内存作为缓冲,与insert操作的memRowset类似,update操作也是先写入deltaMemStore,然后再定期刷入到deltaFile中。deltaStore中维护的并不是主键索引的b-树,而是基于row_offset的b-树。update操作在baseData中查询主键索引,得到row_offset后,在deltaStore中可以直接通过row_offset去deltaStore中进行写入。kudu的update操作与insert操作类似,一开始需要先查询主键是否存在。...原创 2022-08-17 15:04:22 · 754 阅读 · 0 评论 -
kudu insert操作流程
访问每个rowset时,先看在不在内部实际最大最小值范围内,如果不在,则直接pass。比如一个rowset范围是12000-13000,则pass,另一个rowset范围是13000-16000,则需要进入下一步。这样做的原因是hbase的一行数据可能会flush到不同的storefile中,因此在扫描一行数据时必须要遍历所有的storefile。而kudu的做法可以保证一行数据一定就在某一个rowset中,找到这个rowset就不用再遍历其他的rowset。至此,是kudu的所有insert操作流程。..原创 2022-08-16 17:11:11 · 991 阅读 · 0 评论 -
kudu使用bloom filter来加速join操作
在以上步骤中,3是负载最终的操作,尤其是当工作节点与表的实际存储位置不在同节点上时,还会产生大量的网络IO。这样kudu在读大表时,就自动将不匹配bloom filter的数据过滤掉,不再回传给负责读大表的工作节点。根据kudu自己的测试,在应用了bloom filter来加速hash join之后,在不同场景下有大约3-15倍的性能提升。如果换个场景,比如两张大表的hash join,而且数据比例接近1比1,也就是说淘汰不了太多数据的话,这个优化应该提升不大,甚至有副作用。...原创 2022-08-16 16:00:08 · 317 阅读 · 0 评论 -
kudu index skip scan优化
Index skip scan可以在缺失主键第一列的情况下,自动补全主键第一列,将全表扫描转换成多次主键扫描。但是显而易见如果主键第一列的取值非常多,反而会导致性能下降。目前kudu中该优化默认开启,并且没有判断主键第一列取值数以决定是否关闭该优化的能力。另外目前只支持=谓词,尚且不支持范围谓词,以及IN谓词。查询条件落在tstamp列上,缺失了主键第一列,所以无法走到主键扫描。但是kudu可以可以根据主键索引得到第一列host的具体值,补全第一列后再进行查询。依次遍历所有host值,得到所有结果。...原创 2022-08-16 15:28:39 · 391 阅读 · 0 评论 -
关于kudu延迟物化的思考
这样的查询过程就减少了IO数量,提高了性能。C9列是特殊的列,选择性非常好,有一百万个不同的值。但是根据前面延迟物化的步骤,从C9过滤完结果后,又继续去读其他列进行过滤,导致性能反而下降。如下图所示,谓词数量增加后,反而耗时185毫秒,性能明显下降。当过滤出的行低于某个临界值,例如总行数的1%后,可以直接读出这些行的所有列,再执行剩下的谓词即可。由于Kudu是一个典型的列存系统,所以存在一个优化机制叫做延迟物化。在查询时会优先 过滤出谓词中涉及到的列,将符合条件的行筛选出来以后,再决定是否去读取其他列。..原创 2022-08-16 15:05:20 · 230 阅读 · 0 评论