【数据湖与开放表格式】行级删除与 Merge-on-Read
内容提要
在Iceberg中,数据文件不可变,删除行可通过写时复制(CoW)和读时合并(MoR)两种方式实现。CoW重写整个文件,写放大高;MoR则写删除标记,适合高频删除。V3引入删除向量(DV),提高了删除效率。选择CoW或MoR取决于删除频率和读写性能需求。实验表明,CoW在删除时重写大量数据,而MoR需定期合并以避免性能下降。
关键要点
-
在Iceberg中,数据文件不可变,删除行通过写时复制(CoW)和读时合并(MoR)两种方式实现。
-
CoW重写整个文件,写放大高,而MoR则写删除标记,适合高频删除。
-
V3引入删除向量(DV),提高了删除效率。
-
选择CoW或MoR取决于删除频率和读写性能需求。
-
实验表明,CoW在删除时重写大量数据,而MoR需定期合并以避免性能下降。
延伸解读
CoW与MoR的选择依据
在选择使用CoW(写时复制)还是MoR(读时合并)时,用户需考虑删除操作的频率和数据读取的性能需求。CoW适合低频删除场景,因其在写入时会重写整个文件,确保读取时的高效性。而MoR则适合高频删除,虽然写入时开销较小,但读取时需要合并删除标记,可能导致性能下降。
删除向量的优势
Iceberg V3引入的删除向量(DV)显著提高了删除效率。与V2的独立删除文件相比,DV通过位图编码被删行的位置,减少了读取时的开销。用户在设计数据湖时,应优先考虑使用V3的DV,以便在高频删除场景中保持良好的性能表现。
删除操作的成本分析
CoW和MoR在删除操作中的成本表现截然不同。CoW在删除时需要重写大量数据,写放大效应显著,而MoR则通过写入小的删除标记来降低写入成本,但在读取时需要合并删除信息,可能导致性能下降。因此,用户应根据具体的使用场景进行合理选择。
延伸问答
Iceberg中如何实现行级删除?
在Iceberg中,行级删除通过写时复制(CoW)和读时合并(MoR)两种方式实现。CoW重写整个文件,而MoR则写删除标记,适合高频删除。
CoW和MoR的主要区别是什么?
CoW在写入时重写整个文件,写放大高;而MoR则只写删除标记,读时需要合并,适合高频删除场景。
什么是删除向量(DV),它有什么优势?
删除向量(DV)是V3中引入的,用于提高删除效率。它通过位图编码被删行的位置,减少了读端的开销。
选择CoW或MoR时需要考虑哪些因素?
选择CoW或MoR时需考虑删除频率和读写性能需求。CoW适合低频删除,而MoR适合高频删除。
实验结果显示CoW的写放大有多大?
实验表明,CoW在删除时重写大量数据,写放大可达文件行数的量级,例如删除1行可能重写1000行。
MoR在读时的性能如何影响?
MoR在读时需要定期合并删除标记,随着删除的累积,读性能会下降,因此必须依赖compaction来维护性能。