1、?|01?02?目录 CONTENT|03?04?01|?|?Merge On Read 简称,是一种行级更新技术,本质上是 out-of-place update,更新和删除不直接修改历史数据,而是单独记录数据变更,在读取的时候再合并历史数据和变更得到修改后的值。这种方式更新的时候代价较小,读取的时候代价较大?|?|?先把 Equality-delete 数据读入内存,按照equality-delete-columns指示的列构建 Hash 表读取 data 数据,取equality-delete-columns指示的列和 Hash 进行比对,丢弃掉和 Hash 表匹配的数据?|?先把 Po
2、sition-delete 数据读入内存,按照删除的位置构建 Bitmap读取 data 数据,丢弃掉 Bitmap 里存在的行号的数据?|?Data 文件的行号肯定是自然增加,Position-delete文件的行号也是升序排列。利用归并排序对两种文件做 Sort-Merge。?|?Equality-delete 只作用于历史文件,当前快照的删除使用 Position-delete 文件。Task 按照 data file 为主导划分,一个 data file可以划分为一个或多个 Task。每一个 Task 是一个最小读取单元。Arctic 基于Iceberg 性能优化02|?|Arctic
3、 是一个开放式架构下的湖仓管理系统,在开放的数据湖格式之上,Arctic 提供更多面向流和更新场景的优化,以及一套可插拔的数据自优化机制和管理服务。基于 Arctic 可以帮助各类数据平台,工具和产品快速搭建开箱即用,流批统一的湖仓。?|?小文件问题冗余数据太多数据组织形式低效过期无效文件残留?|?自动执行定时+监听小文件数量触发AMS 调度并异步执行OptimizeAMS提供资源组管理和配额设置,允许资源在表级隔离和共享基于 Flink 引擎部署,支持YARN、K8S,支持通过AMS 在线扩缩容资源隔离灵活部署?|?降低 HDFS 的Name-node压力降低 Iceberg 元数据的数量减
4、少查询时打开文件的代价?|?减少了文件数量减少了读取的数据量降低了 MOR 时应用delete 文件的代价,释放了 CPU 和内存?|?Equality-delete:读入内存,然后构建 Hash 表和 data 数据进行比对对内存消耗较高,需要额外读取比对字段。构造成本低,直接申明需要删除的数据即可。Position-delete:可以读入内存构建 Bitmap 比对,也可以通过Sort-merge 比对,对内存消耗较少,且不需要额外的字段比对。有一定的构造成本。一个 Position-delete 只对应一个 Data file,这样可以充分的利用Iceberg 的 data-skippi
5、ng,让读取的时候避免读其他无效的position-delete 文件相较于上述的 data+delete-data 的方案,可以在删除比例不高的时候减少写放大?|?可以看出在读取阶段,每个 data 需要和太多的 delete 文件对应?|?|?|?读取的时候,相同 node 下的多个data 文件会分配在一个 Task 里面,读取的时候 delete 文件只读取一次。?|?等效于k-way number partitioning problem是一个 NP-Hard 问题?|?采用排序+贪心算法(CGA)分配,能得到一个很好的次优解?|?|?文件类型文件类型对查询性能影响较大,Parque
6、t 文件相较于 AVRO 由于采用列存模式具有较高的压缩比,写入和读取的 IO 会更少,并且可以列裁剪,谓词过滤,读取性能很高,有时能达到数倍差距,但是 Parquet 对内存消耗更高,有时甚至因为同时写入的 Parquet 文件过多导致 OOM 等问题压缩类型各种压缩类型的特性都有区别,有的压缩比更高但是解压缩代价就更高,有的压缩比不高但是解压缩代价更低,需要根据机器,业务情况选择合适的优化效果如何评估03|?|TPC-C 用于 OLTP 负载,使用只读和更新密集型业务事务